summaryrefslogtreecommitdiff
path: root/examples/hakyll/hakyll.hs
blob: 60ddc3396e07ed5b6d248ae626c7862f5322d5e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{-# LANGUAGE OverloadedStrings #-}
import Hakyll
import Control.Monad (forM_)
import Control.Arrow ((>>>), arr)
import Text.Pandoc

main :: IO ()
main = hakyll $ do
    match "css/*" $ do
        route   idRoute
        compile compressCssCompiler

    -- Static directories
    forM_ ["images/*", "examples/*", "reference/*"] $ \f -> match f $ do
        route   idRoute
        compile copyFileCompiler

    -- Pages
    forM_ pages $ \p -> match p $ do
        route   $ setExtension "html"
        compile $ pageCompiler
            >>> requireA "sidebar.markdown" (setFieldA "sidebar" $ arr pageBody)
            >>> applyTemplateCompiler "templates/default.html"
            >>> relativizeUrlsCompiler

    -- Tutorial
    match "tutorial.markdown" $ do
        route   $ setExtension "html"
        compile $ readPageCompiler
            >>> pageRenderPandocWith defaultHakyllParserState withToc
            >>> requireA "sidebar.markdown" (setFieldA "sidebar" $ arr pageBody)
            >>> applyTemplateCompiler "templates/default.html"
            >>> relativizeUrlsCompiler

    -- Sidebar
    match "sidebar.markdown" $ compile pageCompiler

    -- Templates
    match "templates/*" $ compile templateCompiler
  where
    withToc = defaultHakyllWriterOptions
        { writerTableOfContents = True
        , writerTemplate = "<h2>Table of contents</h2>\n$toc$\n$body$"
        , writerStandalone = True
        }

    pages = [ "about.markdown"
            , "changelog.markdown"
            , "index.markdown"
            , "philosophy.markdown"
            , "reference.markdown"
            ]