summaryrefslogtreecommitdiff
path: root/src/site.hs
blob: 2eaec9f18e5ce1bd3a445cb7c0456e6765af3b98 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
{-# LANGUAGE OverloadedStrings #-}
import           Data.Monoid                    ( (<>) )
import           Hakyll
import           Control.Lens
import           Site.Rules                     ( indexRules
                                                , contentRules
                                                )
import           Site.Contexts
import           Site.Content

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

        match "fonts/*" $ do
          route idRoute
          compile copyFileCompiler

        match "css/*" $ do
                route idRoute
                compile compressCssCompiler

        match "article/**" $ do
                route idRoute
                compile getResourceBody

        match "index.html" $ do
                route idRoute
                compile
                        $   getResourceBody
                        >>= applyAsTemplate indexCtx
                        >>= relativizeUrls

        match "templates/*" $ compile templateBodyCompiler

        let     log = Content { _contentPattern       = "log/*.org"
                              , _contentPaths         = []
                              , _contentRoute         = setExtension "html"
                              , _contentTemplate      = "post"
                              , _contentIndexTemplate = "post"
                              , _contentContext       = postCtx
                              , _contentIndexContext  = postCtx
                              }

                logIndex = Content
                        { _contentPaths = [fromFilePath "log/index.html"]
                        , _contentPattern       = ""
                        , _contentRoute         = idRoute
                        , _contentIndexTemplate = "post-list"
                        , _contentTemplate      = "post"
                        , _contentContext       = logArchiveCtx
                        , _contentIndexContext  = postForArchiveCtx
                        }

                gsoc = log & contentPattern .~ "gsoc/*.org"

                gsocIndex =
                        logIndex
                                &  contentPaths
                                .~ [fromFilePath "gsoc/index.html"]
                                &  contentContext
                                .~ gsocArchiveCtx
                                &  contentIndexContext
                                .~ gsocPostForArchiveCtx

        contentRules log
        indexRules logIndex
        contentRules gsoc
        indexRules gsocIndex