summaryrefslogtreecommitdiff
path: root/web/tutorials/faq.markdown
blob: eed32a2e86ddab24d33e044883dd9bc228e6c43f (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
---
title: FAQ
author: Jasper Van der Jeugt
---

## "File name does not match module name" on Mac OS

    Hakyll.hs:1:1:
        File name does not match module name:
        Saw: `Main'
        Expected: `Hakyll'

Is an error encountered on Mac OS when `hakyll.hs` is located on a
case-insensitive filesystem. A workaround is to rename it to something that
isn't the name of the module, for example, `site.hs`.

## `pageCompiler`/Hakyll/Pandoc eats my HTML!

Sometimes, it can seem that HTML pages are stripped of some arbitrary tags, e.g.
`<div>`'s. The issue here is that, when using the default `pageCompiler`, your
page passes through Pandoc. Pandoc unfortunately strips away this information,
giving you the "wrong" HTML.

The solution is not to use `pageCompiler` -- it is very common to write custom
page processing compiler. The definition of `pageCompiler` is, put simply:

~~~~~{.haskell}
pageCompiler =
   readPageCompiler >>>
   addDefaultFields >>>  -- Sets some things like $path$
   arr applySelf    >>>  -- Used to fill in $var$s in the page
   pageRenderPandoc      -- Pass through pandoc
~~~~~

You can add your own version in your `hakyll.hs` file:

~~~~~{.haskell}
myPageCompiler =
   readPageCompiler >>>
   addDefaultFields >>>  -- Sets some things like $path$
   arr applySelf    >>>  -- Used to fill in $var$s in the page
~~~~~

And using this instead of `pageCompiler` should solve the issue.

## Does Hakyll support syntax highlighting?

Syntax highlighting is enabled by default in Hakyll if you are using a somewhat
recent version of Pandoc (1.9 and onwards). Note that you also need to include
some CSS in order for this to work! This site, for example, uses the [default
Pandoc syntax CSS file][syntax-css].

[syntax-css]: https://github.com/jaspervdj/hakyll/blob/master/web/css/syntax.css

## When should I rebuild and when should I build?

If you execute a `./hakyll build`, Hakyll will build your site incrementally.
This means it will be very fast, but it will not pick up _all_ changes.

- In case you edited `hakyll.hs`, you first want to compile it again.
- It is generally recommended to do a `./hakyll rebuild` before you deploy your
  site.

After rebuilding your site, all files will look as "modified" to the filesystem.
This means that when you upload your site, it will usually transfer all files --
this can generate more traffic than necessary, since it is possible that some
files were not actually modified. If you use `rsync`, you can counter this using
the `--checksum` option.

## Problem with regex-pcre dependency on Mac OS

Hakyll requires [regex-pcre], which might fail to build on Mac OS. To solve
this problem, make sure the [pcre] C library is installed (via homebrew or
macports). Then install [regex-pcre] using:

    cabal install --extra-include-dirs=/usr/local/include regex-pcre

or

    cabal install --extra-include-dirs=/opt/local/include regex-pcre

...and proceed to install Hakyll the regular way.

[regex-pcre]: http://hackage.haskell.org/package/regex-pcre
[pcre]: http://www.pcre.org/