diff options
author | stuebinm | 2021-05-28 18:38:51 +0200 |
---|---|---|
committer | stuebinm | 2021-05-28 18:38:51 +0200 |
commit | 818f7a68df4ca0221107b2d07eb502b16fa6d653 (patch) | |
tree | e8939bed4a329fc37dc06e466ea53e4c7d4626c5 /hakyll-nix | |
parent | 855acf6b984855646119551b39bffb4cf169dc40 (diff) |
hakyll wrapped in a nix derivation
(see the Readme.org file for more information)
Diffstat (limited to 'hakyll-nix')
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 Binary files differnew file mode 100644 index 0000000..97c0937 --- /dev/null +++ b/hakyll-nix/defaultsite/images/haskell-logo.png 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 |