diff options
Diffstat (limited to '')
-rw-r--r-- | hakyll/Main.hs | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/hakyll/Main.hs b/hakyll/Main.hs new file mode 100644 index 0000000..a11c6fb --- /dev/null +++ b/hakyll/Main.hs @@ -0,0 +1,112 @@ +{-# LANGUAGE OverloadedStrings #-} +import System.FilePath.Posix +import Hakyll + + +main :: IO () +main = hakyll $ do + match "css/*" $ do + route idRoute + compile compressCssCompiler + match "images/*" $ do + route idRoute + compile copyFileCompiler + match "static/*" $ do + route idRoute + compile copyFileCompiler + match "fonts/*" $ do + route idRoute + compile copyFileCompiler + match "pastebin/*.html" $ do + route idRoute + compile copyFileCompiler + + match "posts/*" $ do + route $ setExtension "html" + `composeRoutes` dropPrefix "posts/" + `composeRoutes` dateFolders + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/post.html" postCtx + >>= saveSnapshot "content" + >>= loadAndApplyTemplate "templates/default.html" postCtx + >>= relativizeUrls + + match "pages/*" $ do + route $ setExtension "html" + `composeRoutes` dropPrefix "pages/" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/default.html" defaultContext + >>= relativizeUrls + + match "index.html" $ do + route idRoute + compile $ do + posts <- recentFirst =<< loadAll "posts/*" + let indexCtx = + listField "posts" postCtx (return posts) `mappend` + constField "title" "Home" `mappend` + defaultContext + + getResourceBody + >>= applyAsTemplate indexCtx + >>= loadAndApplyTemplate "templates/default.html" indexCtx + >>= relativizeUrls + + create ["archive.html"] $ do + route idRoute + compile $ do + posts <- recentFirst =<< loadAll "posts/*" + let archiveCtx = + listField "posts" postCtx (return posts) `mappend` + constField "title" "Archives" `mappend` + defaultContext + + makeItem "" + >>= loadAndApplyTemplate "templates/archive.html" archiveCtx + >>= loadAndApplyTemplate "templates/default.html" archiveCtx + >>= relativizeUrls + + create ["atom.xml", "feed.xml"] $ do + route idRoute + compile $ do + loadAllSnapshots "posts/*" "content" + >>= fmap (take 10) . recentFirst + >>= renderAtom feedConfiguration feedCtx + + create ["rss.xml"] $ do + route idRoute + compile $ do + let feedCtx = postCtx `mappend` + constField "description" "This is the post description" + + posts <- fmap (take 10) . recentFirst =<< loadAll "posts/*" + renderRss feedConfiguration feedCtx posts + + match "templates/*" $ compile templateBodyCompiler + + +postCtx :: Context String +postCtx = + dateField "date" "%B %e, %Y" `mappend` + defaultContext + +feedCtx :: Context String +feedCtx = + bodyField "description" `mappend` + defaultContext + +feedConfiguration :: FeedConfiguration +feedConfiguration = FeedConfiguration + { feedTitle = "EuAndreh" + , feedDescription = "EuAndreh's blog" + , feedAuthorName = "EuAndreh" + , feedAuthorEmail = "blog@euandre.org" + , feedRoot = "euandre.org" + } + +dropPrefix :: String -> Routes +dropPrefix prefix = gsubRoute prefix $ const "" + +dateFolders :: Routes +dateFolders = + gsubRoute "[0-9]{4}-[0-9]{2}-[0-9]{2}-" $ replaceAll "-" (const "/") |