-------------------------------------------------------------------------------- {-# LANGUAGE OverloadedStrings #-} import Data.Monoid (mappend) import Hakyll import Hakyll.Web.Sass (sassCompiler) -------------------------------------------------------------------------------- config :: Configuration config = defaultConfiguration { previewPort = 4053 } main :: IO () main = hakyllWith config $ do match "images/*" $ do route idRoute compile copyFileCompiler scssDependency <- makePatternDependency "css/**.scss" rulesExtraDependencies [scssDependency] $ match "css/default.scss" $ do route $ setExtension "css" compile (fmap compressCss <$> sassCompiler) match "css/*" $ do route idRoute compile compressCssCompiler match "posts/*" $ do route $ setExtension "html" compile $ pandocCompiler >>= loadAndApplyTemplate "templates/post.html" postCtx >>= loadAndApplyTemplate "templates/default.html" postCtx >>= relativizeUrls match "index.html" $ do route idRoute compile $ do posts <- recentFirst =<< loadAll "posts/*" let indexCtx = listField "posts" postCtx (return posts) `mappend` defaultContext getResourceBody >>= applyAsTemplate indexCtx >>= loadAndApplyTemplate "templates/default.html" indexCtx >>= relativizeUrls match "templates/*" $ compile templateBodyCompiler -------------------------------------------------------------------------------- postCtx :: Context String postCtx = dateField "date" "%B %e, %Y" `mappend` defaultContext