summaryrefslogtreecommitdiff
path: root/site.hs
diff options
context:
space:
mode:
Diffstat (limited to 'site.hs')
-rw-r--r--site.hs167
1 files changed, 85 insertions, 82 deletions
diff --git a/site.hs b/site.hs
index c016f04..1833558 100644
--- a/site.hs
+++ b/site.hs
@@ -8,90 +8,93 @@ import System.FilePath.Posix ((</>), (<.>), splitExtension, splitFileName, takeD
import Text.Pandoc (Pandoc, Inline(Link, Space, Str), Block(Header))
import Text.Pandoc.Shared (stringify)
import Text.Pandoc.Walk (walk)
+import qualified GHC.IO.Encoding as Encoding
main :: IO ()
-main = hakyllWith hakyllConfig $ do
- match ("images/*" .||. "files/*" .||. "robots.txt" .||. "health") $ do
- route idRoute
- compile copyFileCompiler
-
- match "css/*" $ do
- route idRoute
- -- WORKAROUND: compressCssCompiler removes copyright notices
- compile copyFileCompiler
-
- match (fromList ["about.md", "contact.md", "privacy.md", "code.md"]) $ do
- route $ setExtension "html" `composeRoutes` appendIndex
- let context = dropIndexHtml "url" <> defaultContext
- compile $ customPandocCompiler
- >>= loadAndApplyTemplate "templates/direct.html" context
- >>= loadAndApplyTemplate "templates/default.html" context
-
- match "posts/*" $ do
- route $ setExtension "html" `composeRoutes` appendIndex
- compile $ customPandocCompiler
- >>= loadAndApplyTemplate "templates/post.html" postContext
- >>= saveSnapshot "content"
- >>= loadAndApplyTemplate "templates/default.html" postContext
-
- create ["posts.html"] $ do
- route appendIndex
- compile $ do
- posts <- recentFirst =<< loadAll "posts/*"
- let archiveContext =
- listField "posts" postContext (return posts) <>
- constField "title" "Blog" <>
- dropIndexHtml "url" <>
- defaultContext
-
- makeItem ""
- >>= loadAndApplyTemplate "templates/posts.html" archiveContext
- >>= loadAndApplyTemplate "templates/default.html" archiveContext
-
- create ["feeds/posts.rss"] $ do
- route idRoute
- compileFeed renderRss rfc822DateTimeFormat
-
- create ["feeds/posts.atom"] $ do
- route idRoute
- compileFeed renderAtom rfc3339DateTimeFormat
-
- create ["sitemap.xml"] $ do
- route idRoute
- compile $ do
- posts <- recentFirst =<< loadAll "posts/*"
- singles <- loadAll (fromList ["about.md", "contact.md", "privacy.md", "code.md", "posts.html"])
- let
- pages = posts <> singles
- sitemapContext =
- constField "root" root <>
- listField "pages" postContext (return pages)
- makeItem ""
- >>= loadAndApplyTemplate "templates/sitemap.xml" sitemapContext
-
- match "index.html" $ do
- route idRoute
- compile $ do
- posts <- recentFirst =<< loadAll "posts/*"
- let indexContext =
- listField "posts" postContext (return posts) <>
- defaultContext
-
- getResourceBody
- >>= applyAsTemplate indexContext
- >>= loadAndApplyTemplate "templates/default.html" indexContext
-
- match "err.html" $ do
- route idRoute
- compile $ customPandocCompiler
- >>= loadAndApplyTemplate "templates/default.html" defaultContext
-
- match "404.html" $ do
- route idRoute
- compile $ customPandocCompiler
- >>= loadAndApplyTemplate "templates/default.html" defaultContext
-
- match "templates/*" $ compile templateBodyCompiler
+main = do
+ Encoding.setLocaleEncoding Encoding.utf8
+ hakyllWith hakyllConfig $ do
+ match ("images/*" .||. "files/*" .||. "robots.txt" .||. "health") $ do
+ route idRoute
+ compile copyFileCompiler
+
+ match "css/*" $ do
+ route idRoute
+ -- WORKAROUND: compressCssCompiler removes copyright notices
+ compile copyFileCompiler
+
+ match (fromList ["about.md", "contact.md", "privacy.md", "code.md"]) $ do
+ route $ setExtension "html" `composeRoutes` appendIndex
+ let context = dropIndexHtml "url" <> defaultContext
+ compile $ customPandocCompiler
+ >>= loadAndApplyTemplate "templates/direct.html" context
+ >>= loadAndApplyTemplate "templates/default.html" context
+
+ match "posts/*" $ do
+ route $ setExtension "html" `composeRoutes` appendIndex
+ compile $ customPandocCompiler
+ >>= loadAndApplyTemplate "templates/post.html" postContext
+ >>= saveSnapshot "content"
+ >>= loadAndApplyTemplate "templates/default.html" postContext
+
+ create ["posts.html"] $ do
+ route appendIndex
+ compile $ do
+ posts <- recentFirst =<< loadAll "posts/*"
+ let archiveContext =
+ listField "posts" postContext (return posts) <>
+ constField "title" "Blog" <>
+ dropIndexHtml "url" <>
+ defaultContext
+
+ makeItem ""
+ >>= loadAndApplyTemplate "templates/posts.html" archiveContext
+ >>= loadAndApplyTemplate "templates/default.html" archiveContext
+
+ create ["feeds/posts.rss"] $ do
+ route idRoute
+ compileFeed renderRss rfc822DateTimeFormat
+
+ create ["feeds/posts.atom"] $ do
+ route idRoute
+ compileFeed renderAtom rfc3339DateTimeFormat
+
+ create ["sitemap.xml"] $ do
+ route idRoute
+ compile $ do
+ posts <- recentFirst =<< loadAll "posts/*"
+ singles <- loadAll (fromList ["about.md", "contact.md", "privacy.md", "code.md", "posts.html"])
+ let
+ pages = posts <> singles
+ sitemapContext =
+ constField "root" root <>
+ listField "pages" postContext (return pages)
+ makeItem ""
+ >>= loadAndApplyTemplate "templates/sitemap.xml" sitemapContext
+
+ match "index.html" $ do
+ route idRoute
+ compile $ do
+ posts <- recentFirst =<< loadAll "posts/*"
+ let indexContext =
+ listField "posts" postContext (return posts) <>
+ defaultContext
+
+ getResourceBody
+ >>= applyAsTemplate indexContext
+ >>= loadAndApplyTemplate "templates/default.html" indexContext
+
+ match "err.html" $ do
+ route idRoute
+ compile $ customPandocCompiler
+ >>= loadAndApplyTemplate "templates/default.html" defaultContext
+
+ match "404.html" $ do
+ route idRoute
+ compile $ customPandocCompiler
+ >>= loadAndApplyTemplate "templates/default.html" defaultContext
+
+ match "templates/*" $ compile templateBodyCompiler
hakyllConfig :: Configuration
hakyllConfig = defaultConfiguration
Generated by cgit. See skreutz.com for my tech blog and contact information.