summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuebinm2021-05-28 18:38:51 +0200
committerstuebinm2021-05-28 18:38:51 +0200
commit818f7a68df4ca0221107b2d07eb502b16fa6d653 (patch)
treee8939bed4a329fc37dc06e466ea53e4c7d4626c5
parent855acf6b984855646119551b39bffb4cf169dc40 (diff)
hakyll wrapped in a nix derivation
(see the Readme.org file for more information)
-rw-r--r--hakyll-nix/Readme.org35
-rw-r--r--hakyll-nix/build.nix43
-rw-r--r--hakyll-nix/default.nix16
-rw-r--r--hakyll-nix/defaultsite/about.rst17
-rw-r--r--hakyll-nix/defaultsite/contact.markdown6
-rw-r--r--hakyll-nix/defaultsite/css/default.css141
-rw-r--r--hakyll-nix/defaultsite/defaultsite.cabal11
-rw-r--r--hakyll-nix/defaultsite/images/haskell-logo.pngbin0 -> 5674 bytes
-rw-r--r--hakyll-nix/defaultsite/index.html16
-rw-r--r--hakyll-nix/defaultsite/posts/2015-08-12-spqr.markdown59
-rw-r--r--hakyll-nix/defaultsite/posts/2015-10-07-rosa-rosa-rosam.markdown46
-rw-r--r--hakyll-nix/defaultsite/posts/2015-11-28-carpe-diem.markdown50
-rw-r--r--hakyll-nix/defaultsite/posts/2015-12-07-tu-quoque.markdown58
-rw-r--r--hakyll-nix/defaultsite/site.hs66
-rw-r--r--hakyll-nix/defaultsite/templates/archive.html2
-rw-r--r--hakyll-nix/defaultsite/templates/default.html33
-rw-r--r--hakyll-nix/defaultsite/templates/post-list.html7
-rw-r--r--hakyll-nix/defaultsite/templates/post.html11
-rw-r--r--hakyll-nix/shell.nix21
19 files changed, 638 insertions, 0 deletions
diff --git a/hakyll-nix/Readme.org b/hakyll-nix/Readme.org
new file mode 100644
index 0000000..ae742f4
--- /dev/null
+++ b/hakyll-nix/Readme.org
@@ -0,0 +1,35 @@
+#+TITLE: nix-wrapper around hakyll
+
+This is a simple wrapper around hakyll, which will build hakyll sites
+with nix while attempting to minimise the hassle of constantly
+recompiling the ~site.hs~ script.
+
+* Components
+
+~default.nix~ contains a function that will take exactly one argument
+(a path to some directory containing a ~site.hs~ file), and will return
+a function that can be called with ~haskellPackages.callPackage~ to
+make a derivation.
+
+~build.nix~ containes a function that will build a hakyll site if given
+a suitable directory. However, consider decoupling the build logic
+from your site's content by putting your ~site.hs~ script into a
+seperate directory from the rest of your site, to stop nix from
+recompiling it each time you make a minor change to any other file.
+
+Called with default arguments, ~build.nix~ will built the hakyll
+example that ships with ~hakyll-init~, as found in ~./defaultsite~.
+
+* Considerations
+
+Usually, it is advisable to build haskell projects with ~stack~, but
+this can easily result in the ~site.hs~ script being compiled to a
+single binary over a gigabyte in size (and recompiled from scratch
+each time something changes). Instead, the version here will use
+the haskell packages contained in ~nixpkgs~ to minimise build times,
+since these are usually available as prebuilt substitutes.
+
+Also note that the built hakyll script is only needed to build the
+actual site itself, and not a runtime-dependency, i.e. it will not
+be connected to a garbage collection root by default and may be removed
+by ~nix-collect-garbage~.
diff --git a/hakyll-nix/build.nix b/hakyll-nix/build.nix
new file mode 100644
index 0000000..ba45ab8
--- /dev/null
+++ b/hakyll-nix/build.nix
@@ -0,0 +1,43 @@
+{ pkgs ? import <nixpkgs> {}
+# source of the site's files
+, src ? ./defaultsite
+# source of the hakyll script; will default
+# to the site's source if set to null (default).
+, hakyllSrc ? null
+# name for the site's derivation
+, name ? "hakyll-site"
+# plug some other compiler in here if you want
+, compiler ? "default"
+}:
+
+with pkgs;
+
+let
+ f = import ./default.nix
+ (if hakyllSrc == null then src else hakyllSrc);
+
+ haskellPackages = if compiler == "default"
+ then pkgs.haskellPackages
+ else pkgs.haskell.packages.${compiler};
+
+ hakyll = haskellPackages.callPackage f {};
+
+in stdenv.mkDerivation {
+ inherit src name;
+
+ # haskell reads in files with the character encoding
+ # declared in an environment file; nix does not set this
+ # by default, causing hakyll to fail on files containing
+ # unicode.
+ LC_ALL = "C.UTF-8";
+ buildInputs = [ hakyll ];
+
+ buildPhase = ''
+ ${hakyll}/bin/site build
+ '';
+
+ installPhase = ''
+ mkdir $out
+ cp -r _site/* $out
+ '';
+}
diff --git a/hakyll-nix/default.nix b/hakyll-nix/default.nix
new file mode 100644
index 0000000..0c2fc3f
--- /dev/null
+++ b/hakyll-nix/default.nix
@@ -0,0 +1,16 @@
+hakyll-src:
+
+{ mkDerivation, base, hakyll, stdenv }:
+
+mkDerivation {
+ pname = "hakyll-site-generator";
+ version = "0.1.0.0";
+ src = hakyll-src;
+ isLibrary = false;
+ isExecutable = true;
+ executableHaskellDepends = [
+ base
+ hakyll
+ ];
+ license = "unknown";
+}
diff --git a/hakyll-nix/defaultsite/about.rst b/hakyll-nix/defaultsite/about.rst
new file mode 100644
index 0000000..99af9e2
--- /dev/null
+++ b/hakyll-nix/defaultsite/about.rst
@@ -0,0 +1,17 @@
+---
+title: About
+---
+Nullam imperdiet sodales orci vitae molestie. Nunc quam orci, pharetra a
+rhoncus vitae, eleifend id felis. Suspendisse potenti. Etiam vitae urna orci.
+Quisque pellentesque dignissim felis, egestas tempus urna luctus vitae. In hac
+habitasse platea dictumst. Morbi fringilla mattis odio, et mattis tellus
+accumsan vitae.
+
+1. Amamus Unicode 碁
+2. Interdum nex magna.
+
+Vivamus eget mauris sit amet nulla laoreet lobortis. Nulla in diam elementum
+risus convallis commodo. Cras vehicula varius dui vitae facilisis. Proin
+elementum libero eget leo aliquet quis euismod orci vestibulum. Duis rhoncus
+lorem consequat tellus vestibulum aliquam. Quisque orci orci, malesuada porta
+blandit et, interdum nec magna.
diff --git a/hakyll-nix/defaultsite/contact.markdown b/hakyll-nix/defaultsite/contact.markdown
new file mode 100644
index 0000000..78e8698
--- /dev/null
+++ b/hakyll-nix/defaultsite/contact.markdown
@@ -0,0 +1,6 @@
+---
+title: Contact
+---
+
+I live in a small hut in the mountains of Kumano Kodō on Kii Hantō and would not
+like to be contacted.
diff --git a/hakyll-nix/defaultsite/css/default.css b/hakyll-nix/defaultsite/css/default.css
new file mode 100644
index 0000000..381ff73
--- /dev/null
+++ b/hakyll-nix/defaultsite/css/default.css
@@ -0,0 +1,141 @@
+html {
+ font-size: 62.5%;
+}
+
+body {
+ font-size: 1.6rem;
+ color: #000;
+}
+
+header {
+ border-bottom: 0.2rem solid #000;
+}
+
+nav {
+ text-align: right;
+}
+
+nav a {
+ font-size: 1.8rem;
+ font-weight: bold;
+ color: black;
+ text-decoration: none;
+ text-transform: uppercase;
+}
+
+footer {
+ margin-top: 3rem;
+ padding: 1.2rem 0;
+ border-top: 0.2rem solid #000;
+ font-size: 1.2rem;
+ color: #555;
+}
+
+h1 {
+ font-size: 2.4rem;
+}
+
+h2 {
+ font-size: 2rem;
+}
+
+article .header {
+ font-size: 1.4rem;
+ font-style: italic;
+ color: #555;
+}
+
+.logo a {
+ font-weight: bold;
+ color: #000;
+ text-decoration: none;
+}
+
+@media (max-width: 319px) {
+ body {
+ width: 90%;
+ margin: 0;
+ padding: 0 5%;
+ }
+ header {
+ margin: 4.2rem 0;
+ }
+ nav {
+ margin: 0 auto 3rem;
+ text-align: center;
+ }
+ footer {
+ text-align: center;
+ }
+ .logo {
+ text-align: center;
+ margin: 1rem auto 3rem;
+ }
+ .logo a {
+ font-size: 2.4rem;
+ }
+ nav a {
+ display: block;
+ line-height: 1.6;
+ }
+}
+
+@media (min-width: 320px) {
+ body {
+ width: 90%;
+ margin: 0;
+ padding: 0 5%;
+ }
+ header {
+ margin: 4.2rem 0;
+ }
+ nav {
+ margin: 0 auto 3rem;
+ text-align: center;
+ }
+ footer {
+ text-align: center;
+ }
+ .logo {
+ text-align: center;
+ margin: 1rem auto 3rem;
+ }
+ .logo a {
+ font-size: 2.4rem;
+ }
+ nav a {
+ display: inline;
+ margin: 0 0.6rem;
+ }
+}
+
+@media (min-width: 640px) {
+ body {
+ width: 60rem;
+ margin: 0 auto;
+ padding: 0;
+ }
+ header {
+ margin: 0 0 3rem;
+ padding: 1.2rem 0;
+ }
+ nav {
+ margin: 0;
+ text-align: right;
+ }
+ nav a {
+ margin: 0 0 0 1.2rem;
+ display: inline;
+ }
+ footer {
+ text-align: right;
+ }
+ .logo {
+ margin: 0;
+ text-align: left;
+ }
+ .logo a {
+ float: left;
+ font-size: 1.8rem;
+ }
+}
diff --git a/hakyll-nix/defaultsite/defaultsite.cabal b/hakyll-nix/defaultsite/defaultsite.cabal
new file mode 100644
index 0000000..f800428
--- /dev/null
+++ b/hakyll-nix/defaultsite/defaultsite.cabal
@@ -0,0 +1,11 @@
+name: defaultsite
+version: 0.1.0.0
+build-type: Simple
+cabal-version: >= 1.10
+
+executable site
+ main-is: site.hs
+ build-depends: base == 4.*
+ , hakyll == 4.13.*
+ ghc-options: -threaded
+ default-language: Haskell2010
diff --git a/hakyll-nix/defaultsite/images/haskell-logo.png b/hakyll-nix/defaultsite/images/haskell-logo.png
new file mode 100644
index 0000000..97c0937
--- /dev/null
+++ b/hakyll-nix/defaultsite/images/haskell-logo.png
Binary files differ
diff --git a/hakyll-nix/defaultsite/index.html b/hakyll-nix/defaultsite/index.html
new file mode 100644
index 0000000..6dd191d
--- /dev/null
+++ b/hakyll-nix/defaultsite/index.html
@@ -0,0 +1,16 @@
+---
+title: Home
+---
+
+<h2>Welcome</h2>
+
+<img src="/images/haskell-logo.png" style="float: right; margin: 10px;" />
+
+<p>Welcome to my blog!</p>
+
+<p>I've reproduced a list of recent posts here for your reading pleasure:</p>
+
+<h2>Posts</h2>
+$partial("templates/post-list.html")$
+
+<p>…or you can find more in the <a href="/archive.html">archives</a>.</p>
diff --git a/hakyll-nix/defaultsite/posts/2015-08-12-spqr.markdown b/hakyll-nix/defaultsite/posts/2015-08-12-spqr.markdown
new file mode 100644
index 0000000..3704aa5
--- /dev/null
+++ b/hakyll-nix/defaultsite/posts/2015-08-12-spqr.markdown
@@ -0,0 +1,59 @@
+---
+title: S.P.Q.R.
+---
+
+Mauris in lorem nisl. Maecenas tempus facilisis ante, eget viverra nisl
+tincidunt et. Donec turpis lectus, mattis ac malesuada a, accumsan eu libero.
+Morbi condimentum, tortor et tincidunt ullamcorper, sem quam pretium nulla, id
+convallis lectus libero nec turpis. Proin dapibus nisi id est sodales nec
+ultrices tortor pellentesque. Vivamus vel nisi ac lacus sollicitudin vulputate
+ac ut ligula. Nullam feugiat risus eget eros gravida in molestie sapien euismod.
+Nunc sed hendrerit orci. Nulla mollis consequat lorem ac blandit. Ut et turpis
+mauris. Nulla est odio, posuere id ullamcorper sit amet, tincidunt vel justo.
+Curabitur placerat tincidunt varius. Nulla vulputate, ipsum eu consectetur
+mollis, dui nibh aliquam neque, at ultricies leo ligula et arcu. Proin et mi
+eget tellus sodales lobortis. Sed tempor, urna vel pulvinar faucibus, lectus
+urna vehicula ante, at facilisis dolor odio at lorem. Morbi vehicula euismod
+urna, et imperdiet urna ornare vitae.
+
+Sed tincidunt sollicitudin ultrices. In hac habitasse platea dictumst. Morbi
+ligula lectus, egestas at ultricies nec, fringilla et tellus. Duis urna lorem,
+bibendum a ornare sed, euismod sed nunc. Aliquam tempor massa at velit fringilla
+fringilla. Praesent sit amet tempor felis. Maecenas id felis ac velit aliquam
+tempor a sit amet orci. Nunc placerat nulla pellentesque sem commodo cursus.
+Praesent quis sapien orci, quis ultricies augue. Nam vestibulum sem non augue
+semper tincidunt pellentesque ipsum volutpat. Duis congue, nunc a aliquam
+luctus, quam ante convallis nisi, ac pellentesque lacus orci vel turpis. Cum
+sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus
+mus. Suspendisse hendrerit nisl eu felis sagittis faucibus. Nunc eu congue
+lorem. Quisque non nibh nisi, et ultrices massa. Sed vitae erat vitae nulla
+pellentesque fermentum.
+
+Ut diam nunc, consectetur ut ultrices eu, iaculis sed felis. Sed lacinia, odio
+et accumsan luctus, arcu ipsum accumsan erat, sit amet malesuada libero lacus et
+velit. Donec accumsan tristique tristique. Proin a metus magna, vitae mattis
+nisl. Integer a libero ipsum. Mauris faucibus eleifend metus id sodales. Morbi
+ornare, nibh nec facilisis imperdiet, turpis sem commodo lorem, id commodo
+mauris metus vitae justo. Etiam at pellentesque tortor. Proin mollis accumsan
+ligula, nec tempus augue auctor quis. Nulla lacinia, mi quis lobortis auctor,
+nisi diam posuere dui, pulvinar feugiat dui libero eget quam. Fusce eu risus
+nunc, a consectetur orci. Class aptent taciti sociosqu ad litora torquent per
+conubia nostra, per inceptos himenaeos. Maecenas venenatis aliquet orci, a
+ultricies sem facilisis eu. Donec dolor purus, porta condimentum convallis nec,
+dignissim nec libero.
+
+Etiam rutrum ultricies dui, et interdum metus elementum et. Nulla sapien nunc,
+interdum tristique porttitor in, laoreet vitae mi. Ut vehicula auctor mauris sit
+amet bibendum. Phasellus adipiscing mattis libero, eget adipiscing erat
+dignissim at. Vivamus convallis malesuada metus nec cursus. Ut cursus, lorem
+eleifend sollicitudin condimentum, felis tortor sodales augue, ac tempus lacus
+ipsum vitae quam. Vestibulum vitae lacus non tortor vehicula iaculis faucibus
+quis massa.
+
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus
+mus. Duis malesuada neque nec ante porttitor accumsan. Suspendisse potenti.
+Aliquam in lacus magna, imperdiet laoreet lectus. Praesent id diam nec ante
+commodo rhoncus nec vel augue. Pellentesque tortor massa, dignissim ut sagittis
+sed, hendrerit vitae nunc. Nam gravida, urna vitae hendrerit rutrum, felis augue
+vulputate tortor, ut varius velit libero nec lectus. In adipiscing massa in est
+scelerisque ullamcorper. Vivamus in nisi metus.
diff --git a/hakyll-nix/defaultsite/posts/2015-10-07-rosa-rosa-rosam.markdown b/hakyll-nix/defaultsite/posts/2015-10-07-rosa-rosa-rosam.markdown
new file mode 100644
index 0000000..bbda8fd
--- /dev/null
+++ b/hakyll-nix/defaultsite/posts/2015-10-07-rosa-rosa-rosam.markdown
@@ -0,0 +1,46 @@
+---
+title: Rosa Rosa Rosam
+author: Ovidius
+---
+
+Suspendisse pharetra ullamcorper sem et auctor. Suspendisse vitae tellus eu
+turpis dignissim gravida ut ut tortor. Cum sociis natoque penatibus et magnis
+dis parturient montes, nascetur ridiculus mus. Morbi aliquam sapien quis nisl
+sodales non aliquet nisl iaculis. Curabitur fermentum orci vel sapien
+pellentesque id condimentum metus vehicula. Curabitur turpis purus, scelerisque
+at interdum quis, placerat sit amet tortor. Aliquam erat volutpat.
+
+Integer posuere felis non arcu suscipit ullamcorper. Nam tempus risus venenatis
+orci sagittis eu aliquam ante tincidunt. Aenean vehicula ipsum id sapien
+tincidunt commodo. Aliquam erat volutpat. Curabitur vehicula libero ac turpis
+cursus consectetur. Praesent posuere egestas purus et dapibus. Mauris egestas,
+lectus vitae scelerisque ultricies, metus lorem tempor nisi, sed vehicula tortor
+mauris nec urna. Quisque urna tellus, facilisis at mollis eget, adipiscing in
+nisl. Proin quam arcu, euismod et imperdiet sed, ultricies sed orci.
+
+Nulla malesuada sem eget lectus scelerisque nec rhoncus metus interdum. In dui
+felis, rhoncus id scelerisque eget, vulputate id sem. Nulla facilisi. Vestibulum
+eleifend, metus dignissim lacinia ornare, magna nulla vehicula nisi, sed
+molestie mauris ipsum vel turpis. Class aptent taciti sociosqu ad litora
+torquent per conubia nostra, per inceptos himenaeos. Nulla urna leo, vehicula
+eget dignissim a, hendrerit ut risus. Fusce ultricies elementum placerat. Nam at
+dolor sed nisi mollis sollicitudin vitae at urna. Vestibulum iaculis adipiscing
+eros et mollis.
+
+Phasellus ultricies elit eu risus sagittis eu dictum ante ultrices. Nulla
+congue, augue ac placerat tempor, orci mi luctus nisi, at varius ipsum sem sed
+eros. Vivamus eget velit eget felis posuere ornare. In sed metus non est iaculis
+facilisis dapibus sit amet enim. Aliquam viverra tortor eget neque volutpat in
+auctor urna rutrum. Aliquam ligula augue, congue sit amet rutrum in, semper vel
+nulla. Sed tempus porttitor faucibus. Donec cursus sodales nulla, quis lacinia
+mi vehicula vel. Sed nec purus orci. Nam leo sapien, rutrum a ultrices quis,
+placerat vel ligula. Donec massa quam, pellentesque et molestie nec, hendrerit
+id mauris. In hac habitasse platea dictumst. Cras quis quam sem. Curabitur in
+arcu diam, in interdum mauris.
+
+Proin lorem sapien, iaculis et faucibus nec, dictum sed nunc. Pellentesque in
+purus justo. Vestibulum facilisis rutrum nisi, a egestas nunc suscipit sed. Ut
+quis tortor a arcu bibendum placerat non sed ante. Praesent orci sem, posuere
+sit amet cursus molestie, volutpat ut purus. Curabitur aliquam, purus in
+pharetra viverra, lorem leo aliquam tellus, vel consequat felis neque et mauris.
+Aliquam erat volutpat.
diff --git a/hakyll-nix/defaultsite/posts/2015-11-28-carpe-diem.markdown b/hakyll-nix/defaultsite/posts/2015-11-28-carpe-diem.markdown
new file mode 100644
index 0000000..bd115da
--- /dev/null
+++ b/hakyll-nix/defaultsite/posts/2015-11-28-carpe-diem.markdown
@@ -0,0 +1,50 @@
+---
+title: Carpe Diem
+---
+
+Fusce tortor quam, egestas in posuere quis, porttitor vel turpis. Donec
+vulputate porttitor augue at rhoncus. Proin iaculis consectetur sagittis.
+Curabitur venenatis turpis sit amet purus tristique nec posuere risus laoreet.
+Nullam nisi sem, dapibus id semper id, egestas vel arcu. Morbi porttitor ipsum
+placerat erat consequat sed consequat purus feugiat. Donec auctor elit ut risus
+mattis facilisis. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+Proin vulputate sapien facilisis leo ornare pulvinar. Fusce tempus massa a risus
+semper iaculis. Suspendisse sollicitudin posuere nunc, sit amet rutrum leo
+facilisis mattis. Sed ornare auctor dui, vitae rutrum neque auctor sit amet.
+Proin ac dui magna. Mauris vehicula interdum augue, nec ultrices libero egestas
+quis. Nunc convallis euismod ipsum, id sollicitudin orci consequat ac. Fusce
+bibendum congue libero, in rutrum nulla congue non. Cras sit amet risus tortor,
+eu pellentesque dui. Phasellus euismod enim non nibh sodales quis consectetur
+lorem laoreet. Vivamus a egestas quam. Curabitur in tortor augue, vitae varius
+tellus. Integer varius, elit ac gravida suscipit, eros erat pellentesque nisi,
+et tristique augue odio id nulla. Aliquam sit amet nunc vel tellus hendrerit
+tempus ac vel sem.
+
+Aenean tincidunt sollicitudin sapien ut porttitor. Curabitur molestie adipiscing
+lorem vel scelerisque. Donec vitae interdum est. Proin rutrum vulputate
+faucibus. Suspendisse sit amet felis odio, non volutpat ante. Sed eu lectus
+quam. Curabitur tristique rhoncus est, vel commodo tortor suscipit semper.
+Maecenas feugiat vestibulum nisi id facilisis. Nulla non tincidunt libero.
+Praesent ultrices interdum commodo. Sed euismod nisl auctor leo ultrices rutrum.
+Aliquam nibh felis, congue molestie blandit at, bibendum at eros. Aenean
+tincidunt, tortor iaculis placerat sollicitudin, lorem justo tempor diam, et
+posuere sapien leo et magna. Quisque vel aliquam mauris.
+
+Proin varius tempus fermentum. Cum sociis natoque penatibus et magnis dis
+parturient montes, nascetur ridiculus mus. Sed tincidunt nunc id magna
+adipiscing non sollicitudin turpis tempor. Etiam vel elit ipsum, quis euismod
+velit. Quisque elementum magna vitae quam venenatis lacinia. Sed at arcu ipsum.
+Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
+himenaeos. Donec ut lorem ac sapien cursus lacinia sit amet mollis dolor.
+Vivamus tempus odio nec magna faucibus sed hendrerit lorem tempor.
+
+Vestibulum eu nisi arcu. Curabitur nisi risus, fermentum ut lacinia ut, interdum
+nec magna. Nunc aliquet gravida massa, eu aliquam lorem faucibus at. Sed
+sollicitudin volutpat velit id tempor. In nibh justo, pharetra et pretium
+dignissim, tempus in turpis. Phasellus eget lobortis nisl. Phasellus sed
+fermentum diam. Nam tempus pharetra odio, quis congue eros imperdiet eu. Aliquam
+dui eros, hendrerit et vulputate vel, porta eu eros. Nullam nisi dui, commodo
+eget pharetra ut, ornare sit amet nunc. Fusce vel neque urna. Maecenas nulla
+ante, egestas at consequat quis, fermentum a enim. Aliquam id tristique urna.
+Integer augue justo, scelerisque et consectetur id, rhoncus eget enim.
diff --git a/hakyll-nix/defaultsite/posts/2015-12-07-tu-quoque.markdown b/hakyll-nix/defaultsite/posts/2015-12-07-tu-quoque.markdown
new file mode 100644
index 0000000..bdf2ea4
--- /dev/null
+++ b/hakyll-nix/defaultsite/posts/2015-12-07-tu-quoque.markdown
@@ -0,0 +1,58 @@
+---
+title: Tu Quoque
+author: Julius
+---
+
+Vestibulum leo turpis, dignissim quis ultrices sit amet, iaculis ac ligula.
+Pellentesque tristique, velit eget scelerisque scelerisque, est dolor ultrices
+arcu, quis ullamcorper justo arcu luctus mauris. Integer congue molestie nisi id
+posuere. Fusce pellentesque gravida tempus. Integer viverra tortor nec eros
+mollis quis convallis sem laoreet. Nulla id libero ac erat varius laoreet. Proin
+sed est est. Curabitur lacinia fermentum lorem, elementum malesuada ipsum
+malesuada ut. Donec suscipit elit id leo vehicula mattis non sed leo. Morbi
+varius eleifend varius. Nulla vestibulum, neque vitae aliquam eleifend, nisi
+tellus placerat nunc, quis suscipit elit turpis eu tortor. Etiam euismod
+convallis lectus quis venenatis. Phasellus laoreet magna in nibh cursus eu
+egestas nulla convallis. Aliquam vel ullamcorper risus. Fusce dictum, massa id
+consequat viverra, nulla ante tristique est, a faucibus nisi enim nec dui. Donec
+metus ligula, condimentum at porttitor eget, lobortis at quam.
+
+Aenean vel libero in magna ultricies congue in a odio. Donec faucibus rutrum
+ornare. Fusce dictum eleifend fermentum. Vestibulum vel nibh a metus porttitor
+rhoncus. Pellentesque id quam neque, eget molestie arcu. Integer in elit vel
+neque viverra ultricies in eget massa. Nam ut convallis est. Pellentesque eros
+eros, sodales non vehicula et, tincidunt ut odio. Cras suscipit ultrices metus
+sit amet molestie. Fusce enim leo, vehicula sed sodales quis, adipiscing at
+ipsum.
+
+Nunc tempor dignissim enim, sed tincidunt eros bibendum quis. Curabitur et dolor
+augue, id laoreet mi. Nulla cursus felis id dui vehicula vitae ornare lorem
+blandit. Cras eget dui nec odio volutpat pharetra. Fusce hendrerit justo justo,
+vel imperdiet enim. Vivamus elit risus, interdum ultrices accumsan eleifend,
+vestibulum vitae sapien. Integer bibendum ullamcorper tristique. Nulla quis odio
+lectus, quis eleifend augue. Integer a ligula mauris. Aenean et tempus tortor.
+Quisque at tortor mi. Vivamus accumsan feugiat est a blandit. Sed vitae enim ut
+dolor semper sodales. Duis tristique, ante et placerat elementum, nulla tellus
+pellentesque sapien, quis posuere velit mi eget nulla. Sed vestibulum nunc non
+est porttitor ut rutrum nibh semper. Pellentesque habitant morbi tristique
+senectus et netus et malesuada fames ac turpis egestas.
+
+Nulla adipiscing ultricies lobortis. Vivamus iaculis nisl vitae tellus laoreet
+vitae aliquet lacus mollis. Phasellus ut lacus urna, sed sagittis ante. Etiam
+consectetur pretium nisl sed dignissim. Pellentesque convallis, nisl eget
+commodo mollis, sem magna consequat arcu, sed pretium ipsum arcu sit amet neque.
+Aliquam erat volutpat. Morbi sed mi sed urna vestibulum placerat vitae vel
+metus. Fusce ac ante at justo pharetra vehicula. Vivamus vel tortor eget augue
+aliquet aliquet at vel odio. Nunc venenatis, magna quis facilisis fringilla,
+augue tellus varius neque, in vulputate est eros ut tortor. Duis lorem neque,
+aliquam congue posuere id, condimentum non dui. Phasellus ut dui massa,
+porttitor suscipit augue. Praesent quis tellus quam, vel volutpat metus. Vivamus
+enim est, aliquam in imperdiet et, sagittis eu ligula. Vestibulum hendrerit
+placerat orci et aliquet. Cras pharetra, dolor placerat lobortis tempor, metus
+odio cursus ligula, et posuere lacus ligula quis dui.
+
+Donec a lectus eu nibh malesuada aliquam. Proin at metus quam, et tincidunt leo.
+Quisque lacus justo, scelerisque sodales pulvinar sed, dignissim ut sapien.
+Vivamus diam felis, adipiscing sollicitudin ultricies id, accumsan ac felis. In
+eu posuere ligula. Suspendisse potenti. Donec porttitor dictum dui id vehicula.
+Integer ante velit, congue id dictum et, adipiscing a tortor.
diff --git a/hakyll-nix/defaultsite/site.hs b/hakyll-nix/defaultsite/site.hs
new file mode 100644
index 0000000..f370ed9
--- /dev/null
+++ b/hakyll-nix/defaultsite/site.hs
@@ -0,0 +1,66 @@
+--------------------------------------------------------------------------------
+{-# LANGUAGE OverloadedStrings #-}
+import Data.Monoid (mappend)
+import Hakyll
+
+
+--------------------------------------------------------------------------------
+main :: IO ()
+main = hakyll $ do
+ match "images/*" $ do
+ route idRoute
+ compile copyFileCompiler
+
+ match "css/*" $ do
+ route idRoute
+ compile compressCssCompiler
+
+ match (fromList ["about.rst", "contact.markdown"]) $ do
+ route $ setExtension "html"
+ compile $ pandocCompiler
+ >>= loadAndApplyTemplate "templates/default.html" defaultContext
+ >>= relativizeUrls
+
+ match "posts/*" $ do
+ route $ setExtension "html"
+ compile $ pandocCompiler
+ >>= loadAndApplyTemplate "templates/post.html" postCtx
+ >>= loadAndApplyTemplate "templates/default.html" postCtx
+ >>= 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
+
+
+ match "index.html" $ do
+ route idRoute
+ compile $ do
+ posts <- recentFirst =<< loadAll "posts/*"
+ let indexCtx =
+ listField "posts" postCtx (return posts) `mappend`
+ defaultContext
+
+ getResourceBody
+ >>= applyAsTemplate indexCtx
+ >>= loadAndApplyTemplate "templates/default.html" indexCtx
+ >>= relativizeUrls
+
+ match "templates/*" $ compile templateBodyCompiler
+
+
+--------------------------------------------------------------------------------
+postCtx :: Context String
+postCtx =
+ dateField "date" "%B %e, %Y" `mappend`
+ defaultContext
diff --git a/hakyll-nix/defaultsite/templates/archive.html b/hakyll-nix/defaultsite/templates/archive.html
new file mode 100644
index 0000000..b43eeb2
--- /dev/null
+++ b/hakyll-nix/defaultsite/templates/archive.html
@@ -0,0 +1,2 @@
+Here you can find all my previous posts:
+$partial("templates/post-list.html")$
diff --git a/hakyll-nix/defaultsite/templates/default.html b/hakyll-nix/defaultsite/templates/default.html
new file mode 100644
index 0000000..e91badc
--- /dev/null
+++ b/hakyll-nix/defaultsite/templates/default.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>My Hakyll Blog - $title$</title>
+ <link rel="stylesheet" href="/css/default.css" />
+ </head>
+ <body>
+ <header>
+ <div class="logo">
+ <a href="/">My Hakyll Blog</a>
+ </div>
+ <nav>
+ <a href="/">Home</a>
+ <a href="/about.html">About</a>
+ <a href="/contact.html">Contact</a>
+ <a href="/archive.html">Archive</a>
+ </nav>
+ </header>
+
+ <main role="main">
+ <h1>$title$</h1>
+ $body$
+ </main>
+
+ <footer>
+ Site proudly generated by
+ <a href="http://jaspervdj.be/hakyll">Hakyll</a>
+ </footer>
+ </body>
+</html>
diff --git a/hakyll-nix/defaultsite/templates/post-list.html b/hakyll-nix/defaultsite/templates/post-list.html
new file mode 100644
index 0000000..71cf1b9
--- /dev/null
+++ b/hakyll-nix/defaultsite/templates/post-list.html
@@ -0,0 +1,7 @@
+<ul>
+ $for(posts)$
+ <li>
+ <a href="$url$">$title$</a> - $date$
+ </li>
+ $endfor$
+</ul>
diff --git a/hakyll-nix/defaultsite/templates/post.html b/hakyll-nix/defaultsite/templates/post.html
new file mode 100644
index 0000000..732149b
--- /dev/null
+++ b/hakyll-nix/defaultsite/templates/post.html
@@ -0,0 +1,11 @@
+<article>
+ <section class="header">
+ Posted on $date$
+ $if(author)$
+ by $author$
+ $endif$
+ </section>
+ <section>
+ $body$
+ </section>
+</article>
diff --git a/hakyll-nix/shell.nix b/hakyll-nix/shell.nix
new file mode 100644
index 0000000..2f4985b
--- /dev/null
+++ b/hakyll-nix/shell.nix
@@ -0,0 +1,21 @@
+{ nixpkgs ? import <nixpkgs> {}
+, compiler ? "default"
+, hakyllSrc ? ./defaultsite
+, doBenchmark ? false }:
+
+let
+
+ inherit (nixpkgs) pkgs;
+
+ f = import ./default.nix hakyllSrc;
+
+ haskellPackages = if compiler == "default"
+ then pkgs.haskellPackages
+ else pkgs.haskell.packages.${compiler};
+
+ variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;
+
+ drv = variant (haskellPackages.callPackage f {});
+
+in
+ if pkgs.lib.inNixShell then drv.env else drv