diff options
| author | Kleidi Bujari <mail@4kb.net> | 2026-08-27 19:01:12 -0700 |
|---|---|---|
| committer | Kleidi Bujari <mail@4kb.net> | 2026-09-01 12:23:11 -0700 |
| commit | 1a181be93f37a94b347b2f5f97a1fef57e11cf89 (patch) | |
| tree | 1a637e7a9687bcfa919558a0c67dc9db2909cb95 /packages/code/kleidi-ca/app/Main.hs | |
| parent | 68d01fdea7f2052f629cb55bacc3a221d1bb61ea (diff) | |
| download | depot-1a181be93f37a94b347b2f5f97a1fef57e11cf89.tar.gz depot-1a181be93f37a94b347b2f5f97a1fef57e11cf89.tar.bz2 depot-1a181be93f37a94b347b2f5f97a1fef57e11cf89.zip | |
[kleidi.ca] init hakyll version of kleidi-cahakyll
Diffstat (limited to 'packages/code/kleidi-ca/app/Main.hs')
| -rw-r--r-- | packages/code/kleidi-ca/app/Main.hs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/packages/code/kleidi-ca/app/Main.hs b/packages/code/kleidi-ca/app/Main.hs new file mode 100644 index 0000000..406bbaf --- /dev/null +++ b/packages/code/kleidi-ca/app/Main.hs @@ -0,0 +1,71 @@ +{-# LANGUAGE OverloadedStrings #-} + +{-| +Site layout: + +Index: + - short intro to site? + - recent posts +-} + +import Hakyll +import System.FilePath (replaceExtension, takeFileName) + +postCtx :: Context String +postCtx = dateField "date" "%B %e, %Y" <> defaultContext + +-- | Static pages in the content/ directory are passed through, keeping their +-- layout. +staticContent :: Rules () +staticContent = match "content/*" $ do + route $ customRoute ((`replaceExtension` ".html") . takeFileName . toFilePath) + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/default.html" defaultContext + >>= relativizeUrls + +postsContent :: Rules () +postsContent = do + create ["posts/index.html"] $ do + route idRoute + compile $ do + posts <- loadAll "posts/*.markdown" >>= recentFirst + let archiveCtx = listField "posts" postCtx (pure posts) + <> constField "title" "Posts" + <> defaultContext + makeItem "" + >>= loadAndApplyTemplate "templates/post-list.html" archiveCtx + >>= loadAndApplyTemplate "templates/default.html" archiveCtx + >>= relativizeUrls + + match "posts/*.markdown" $ do + route $ setExtension "html" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/post.html" postCtx + >>= loadAndApplyTemplate "templates/default.html" postCtx + >>= relativizeUrls + +main :: IO () +main = hakyll $ do + match "images/*" $ do + route idRoute + compile copyFileCompiler + + match "css/*" $ do + route idRoute + compile compressCssCompiler + + staticContent + postsContent + + match "index.html" $ do + route idRoute + compile $ do + posts <- fmap (take 3) . recentFirst =<< loadAll "posts/*.markdown" + let indexCtx = listField "posts" postCtx (return posts) `mappend` defaultContext + + getResourceBody + >>= applyAsTemplate indexCtx + >>= loadAndApplyTemplate "templates/default.html" indexCtx + >>= relativizeUrls + + match "templates/*" $ compile templateBodyCompiler |
