-------------------------------------------------------------------------------- {-# LANGUAGE OverloadedStrings #-} import Hakyll import Data.List (isPrefixOf, isSuffixOf) import System.FilePath (takeFileName) -------------------------------------------------------------------------------- main :: IO () main = hakyllWith defaultConfiguration{ignoreFile = ignore} $ do match "well-known/*" $ do route (customRoute (prepend '.'. toFilePath)) compile copyFileCompiler match "images/*" $ do route idRoute compile copyFileCompiler match "resources/*" $ do route idRoute compile copyFileCompiler match "css/*" $ do route idRoute compile compressCssCompiler match "js/*" $ do route idRoute compile compressCssCompiler match "posts/*" $ do route $ setExtension "html" compile $ pandocCompiler >>= loadAndApplyTemplate "templates/post.html" postContext >>= loadAndApplyTemplate "templates/default.html" defaultContext >>= relativizeUrls match (fromList ["index.markdown", "contact.markdown"]) $ do route $ setExtension "html" compile $ pandocCompiler >>= loadAndApplyTemplate "templates/default.html" defaultContext >>= relativizeUrls create ["posts.html"] $ do route idRoute compile $ do let postsContext = listField "posts" postContext posts <> constField "title" "Posts" <> defaultContext posts = recentFirst =<< loadAll "posts/*" makeItem "" >>= loadAndApplyTemplate "templates/post-list.html" postsContext >>= loadAndApplyTemplate "templates/default.html" postsContext >>= relativizeUrls match "templates/*" $ compile templateBodyCompiler where postContext :: Context String postContext = dateField "date" "%B %e, %Y" <> defaultContext ignore :: FilePath -> Bool ignore path = any ($ takeFileName path) [ ("." `isPrefixOf`) , ("#" `isPrefixOf`) , ("~" `isSuffixOf`) , (".swp" `isSuffixOf`) ] prepend :: a -> [a] -> [a] prepend = (:)