aboutsummaryrefslogtreecommitdiff
path: root/hakyll/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'hakyll/Main.hs')
-rw-r--r--hakyll/Main.hs112
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 "/")