-------------------------------------------------------------------------------- {-# 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 "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 "article/**" $ do route idRoute compile getResourceBody match "index.html" $ do route idRoute compile $ do getResourceBody >>= applyAsTemplate indexCtx >>= relativizeUrls match "templates/*" $ compile templateBodyCompiler -------------------------------------------------------------------------------- posts :: Compiler [Item String] posts = recentFirst =<< loadAll "log/*.org" articles :: Compiler [Item String] articles = loadAll "article/**" recentPosts :: Compiler [Item String] recentPosts = (take 4) <$> posts recentArticles :: Compiler [Item String] recentArticles = (take 4) <$> articles indexCtx :: Context String indexCtx = listField "articles" defaultContext recentArticles <> listField "rposts" defaultContext recentPosts <> constField "essays" "Soon" <> 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