-------------------------------------------------------------------------------- {-# LANGUAGE OverloadedStrings #-} import Data.Monoid ((<>)) import Hakyll -------------------------------------------------------------------------------- main :: IO () main = hakyll $ do match "images/*" $ do route idRoute compile copyFileCompiler match "css/*" $ do route idRoute compile compressCssCompiler match (fromList ["about.rst", "contact.markdown"]) $ do route $ setExtension "html" compile $ pandocCompiler >>= loadAndApplyTemplate "templates/default.html" defaultContext >>= relativizeUrls match "log/*.org" $ do route $ setExtension "html" compile $ pandocCompiler >>= loadAndApplyTemplate "templates/post.html" postCtx >>= relativizeUrls create ["log/index.html"] $ do route idRoute compile $ do makeItem "" >>= loadAndApplyTemplate "templates/archive.html" postForArchiveCtx >>= loadAndApplyTemplate "templates/post.html" archiveCtx >>= relativizeUrls match "index.html" $ do route idRoute compile $ do getResourceBody >>= applyAsTemplate indexCtx >>= loadAndApplyTemplate "templates/default.html" indexCtx >>= relativizeUrls match "templates/*" $ compile templateBodyCompiler -------------------------------------------------------------------------------- posts :: Compiler [Item String] posts = recentFirst =<< loadAll "log/*.org" indexCtx :: Context String indexCtx = listField "posts" postCtx posts <> constField "title" "Home" <> defaultContext archiveCtx :: Context String archiveCtx = constField "title" "archive of log posts" <> defaultContext postCtx :: Context String postCtx = dateField "date" "%B %e, %Y" <> defaultContext postForArchiveCtx :: Context String postForArchiveCtx = listField "posts" dateForArchiveCtx posts <> defaultContext dateForArchiveCtx :: Context String dateForArchiveCtx = dateField "date" "%d %b %Y" <> defaultContext