From a19cc6497a788742ea25bba82d2fcc2e217b2c29 Mon Sep 17 00:00:00 2001 From: Stefan Kreutz Date: Sun, 24 Aug 2025 22:21:37 +0200 Subject: Add experimental Nix flake --- site.hs | 167 +++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 85 insertions(+), 82 deletions(-) (limited to 'site.hs') diff --git a/site.hs b/site.hs index c016f04..1833558 100644 --- a/site.hs +++ b/site.hs @@ -8,90 +8,93 @@ import System.FilePath.Posix ((), (<.>), splitExtension, splitFileName, takeD import Text.Pandoc (Pandoc, Inline(Link, Space, Str), Block(Header)) import Text.Pandoc.Shared (stringify) import Text.Pandoc.Walk (walk) +import qualified GHC.IO.Encoding as Encoding main :: IO () -main = hakyllWith hakyllConfig $ do - match ("images/*" .||. "files/*" .||. "robots.txt" .||. "health") $ do - route idRoute - compile copyFileCompiler - - match "css/*" $ do - route idRoute - -- WORKAROUND: compressCssCompiler removes copyright notices - compile copyFileCompiler - - match (fromList ["about.md", "contact.md", "privacy.md", "code.md"]) $ do - route $ setExtension "html" `composeRoutes` appendIndex - let context = dropIndexHtml "url" <> defaultContext - compile $ customPandocCompiler - >>= loadAndApplyTemplate "templates/direct.html" context - >>= loadAndApplyTemplate "templates/default.html" context - - match "posts/*" $ do - route $ setExtension "html" `composeRoutes` appendIndex - compile $ customPandocCompiler - >>= loadAndApplyTemplate "templates/post.html" postContext - >>= saveSnapshot "content" - >>= loadAndApplyTemplate "templates/default.html" postContext - - create ["posts.html"] $ do - route appendIndex - compile $ do - posts <- recentFirst =<< loadAll "posts/*" - let archiveContext = - listField "posts" postContext (return posts) <> - constField "title" "Blog" <> - dropIndexHtml "url" <> - defaultContext - - makeItem "" - >>= loadAndApplyTemplate "templates/posts.html" archiveContext - >>= loadAndApplyTemplate "templates/default.html" archiveContext - - create ["feeds/posts.rss"] $ do - route idRoute - compileFeed renderRss rfc822DateTimeFormat - - create ["feeds/posts.atom"] $ do - route idRoute - compileFeed renderAtom rfc3339DateTimeFormat - - create ["sitemap.xml"] $ do - route idRoute - compile $ do - posts <- recentFirst =<< loadAll "posts/*" - singles <- loadAll (fromList ["about.md", "contact.md", "privacy.md", "code.md", "posts.html"]) - let - pages = posts <> singles - sitemapContext = - constField "root" root <> - listField "pages" postContext (return pages) - makeItem "" - >>= loadAndApplyTemplate "templates/sitemap.xml" sitemapContext - - match "index.html" $ do - route idRoute - compile $ do - posts <- recentFirst =<< loadAll "posts/*" - let indexContext = - listField "posts" postContext (return posts) <> - defaultContext - - getResourceBody - >>= applyAsTemplate indexContext - >>= loadAndApplyTemplate "templates/default.html" indexContext - - match "err.html" $ do - route idRoute - compile $ customPandocCompiler - >>= loadAndApplyTemplate "templates/default.html" defaultContext - - match "404.html" $ do - route idRoute - compile $ customPandocCompiler - >>= loadAndApplyTemplate "templates/default.html" defaultContext - - match "templates/*" $ compile templateBodyCompiler +main = do + Encoding.setLocaleEncoding Encoding.utf8 + hakyllWith hakyllConfig $ do + match ("images/*" .||. "files/*" .||. "robots.txt" .||. "health") $ do + route idRoute + compile copyFileCompiler + + match "css/*" $ do + route idRoute + -- WORKAROUND: compressCssCompiler removes copyright notices + compile copyFileCompiler + + match (fromList ["about.md", "contact.md", "privacy.md", "code.md"]) $ do + route $ setExtension "html" `composeRoutes` appendIndex + let context = dropIndexHtml "url" <> defaultContext + compile $ customPandocCompiler + >>= loadAndApplyTemplate "templates/direct.html" context + >>= loadAndApplyTemplate "templates/default.html" context + + match "posts/*" $ do + route $ setExtension "html" `composeRoutes` appendIndex + compile $ customPandocCompiler + >>= loadAndApplyTemplate "templates/post.html" postContext + >>= saveSnapshot "content" + >>= loadAndApplyTemplate "templates/default.html" postContext + + create ["posts.html"] $ do + route appendIndex + compile $ do + posts <- recentFirst =<< loadAll "posts/*" + let archiveContext = + listField "posts" postContext (return posts) <> + constField "title" "Blog" <> + dropIndexHtml "url" <> + defaultContext + + makeItem "" + >>= loadAndApplyTemplate "templates/posts.html" archiveContext + >>= loadAndApplyTemplate "templates/default.html" archiveContext + + create ["feeds/posts.rss"] $ do + route idRoute + compileFeed renderRss rfc822DateTimeFormat + + create ["feeds/posts.atom"] $ do + route idRoute + compileFeed renderAtom rfc3339DateTimeFormat + + create ["sitemap.xml"] $ do + route idRoute + compile $ do + posts <- recentFirst =<< loadAll "posts/*" + singles <- loadAll (fromList ["about.md", "contact.md", "privacy.md", "code.md", "posts.html"]) + let + pages = posts <> singles + sitemapContext = + constField "root" root <> + listField "pages" postContext (return pages) + makeItem "" + >>= loadAndApplyTemplate "templates/sitemap.xml" sitemapContext + + match "index.html" $ do + route idRoute + compile $ do + posts <- recentFirst =<< loadAll "posts/*" + let indexContext = + listField "posts" postContext (return posts) <> + defaultContext + + getResourceBody + >>= applyAsTemplate indexContext + >>= loadAndApplyTemplate "templates/default.html" indexContext + + match "err.html" $ do + route idRoute + compile $ customPandocCompiler + >>= loadAndApplyTemplate "templates/default.html" defaultContext + + match "404.html" $ do + route idRoute + compile $ customPandocCompiler + >>= loadAndApplyTemplate "templates/default.html" defaultContext + + match "templates/*" $ compile templateBodyCompiler hakyllConfig :: Configuration hakyllConfig = defaultConfiguration -- cgit v1.2.3