-------------------------------------------------------------------------------- {-# LANGUAGE OverloadedStrings #-} import Data.Monoid ((<>)) import Hakyll import Hakyll.Favicon (faviconsRules, faviconsField) -------------------------------------------------------------------------------- muraConf :: Configuration muraConf = defaultConfiguration { destinationDirectory = "_http" , storeDirectory = "_store" , tmpDirectory = "_tmp" , providerDirectory = "_input" } -- Our default context for pages ctx :: Context String ctx = defaultContext <> faviconsField main :: IO () main = hakyllWith muraConf $ do faviconsRules "icons/favicon.svg" match "images/*" $ do route idRoute compile copyFileCompiler match "css/*" $ do route idRoute compile compressCssCompiler match (fromList ["about.md", "contact.markdown"]) $ do route $ setExtension "html" compile $ pandocCompiler >>= loadAndApplyTemplate "templates/default.html" ctx >>= relativizeUrls match "posts/*" $ do route $ setExtension "html" compile $ pandocCompiler >>= loadAndApplyTemplate "templates/post.html" postCtx >>= loadAndApplyTemplate "templates/default.html" postCtx >>= relativizeUrls create ["archive.html"] $ do route idRoute compile $ do posts <- recentFirst =<< loadAll "posts/*" let archiveCtx = listField "posts" postCtx (return posts) <> constField "title" "archives" <> ctx makeItem "" >>= loadAndApplyTemplate "templates/archive.html" archiveCtx >>= loadAndApplyTemplate "templates/default.html" archiveCtx >>= relativizeUrls match "index.html" $ do route idRoute compile $ do posts <- recentFirst =<< loadAll "posts/*" let indexCtx = listField "posts" postCtx (return posts) <> constField "title" "ホームページ" <> ctx getResourceBody >>= applyAsTemplate indexCtx >>= loadAndApplyTemplate "templates/default.html" indexCtx >>= relativizeUrls match "templates/*" $ compile templateBodyCompiler -------------------------------------------------------------------------------- postCtx :: Context String postCtx = dateField "date" "%Y年%-m月%-d日" <> ctx