hakyll-nix-template
hakyll-nix-template copied to clipboard
Hakyll + Nix starter template
hakyll-nix-template
Quick tips
-
Read the tutorial to get started! https://robertwpearce.com/the-hakyll-nix-template-tutorial.html
-
If you make changes to anything inside of
ssg/, you'll need to clean the hakyll cache and rebuild. This is the preferred series of commands for rebuilding (with logs), cleaning the cache, and re-running the dev server:nix build --print-build-logs && \ nix run . clean && \ nix run . watch
Features
-
Build your site into the
./result/distfolder:λ nix build -
Start hakyll's dev server that reloads when changes are made:
λ nix run . watch Listening on http://127.0.0.1:8000 ...more logs -
Run any hakyll command through
nix run .!λ nix run . clean Removing dist... Removing ssg/_cache... Removing ssg/_tmp... -
Start a development environment that
- has your shell environment
- has
hakyll-site(for building/watching/cleaning hakyll projects) - has
hakyll-init(for generating new projects) - can have anything else you put in the
shell.buildInputsof thehakyllProjectinflake.nix - is set up to run
ghciwith some defaults and the modules loaded so you can make your own changes and test them out in the ghci REPL
λ nix develop [hakyll-nix]λ hakyll-site build ... Success [hakyll-nix]λ ghci ... [1 of 1] Compiling Main ( ssg/src/Main.hs, interpreted ) ... λ >
hakyll
All of this is custmomizable, and here are some things that are already done for you:
- pandoc markdown customization to make it as close to GitHub's markdown style as possible
sluggermodule is included that makes nice link URIs based on post titles- RSS & Atom XML feed generation
- Sitemap generation
- Code syntax highlighting customization
- ...other reasonable defaults
Configure the dev server, cache & tmp directories, and more in
./ssg/src/Main.hs.
Deployment
Deployment is set up through a GitHub
Action with cachix,
and it deploys to a GitHub Pages branch,
gh-pages, when you merge code into your main branch.
Setup information can be found below in the "Cachix" section.
Note: If your main branch's name isn't main, ensure 'refs/heads/main' gets
updated to 'refs/heads/my-main-branch' in ./github/workflows/main.yml.
Setup
Nix & Flakes
If you don't have nix, follow the nix installation instructions.
Once you have nix installed, follow the instructions here to get access to flakes: https://nixos.wiki/wiki/Flakes.
Cachix
The ./.github/workflows/main.yml file builds with help from
cachix, so you'll need to generate a signing key to be
able to do this.
- Create a cache on cachix for your project
- Follow cachix's instructions to generate a signing keypair
- Copy the signing keypair value to a new
CACHIX_SIGNING_KEYsecret on https://github.com/settings/secrets