The Best Hakyll Workflow I've Found
I've been doing some work with Hakyll and Stack, specifically editing the Hakyll site.hs
file. Originally I was manually compiling and rebuilding every time I make changes to site.hs
, but that was a little awkward, so I came up with a script to make things smoother. Ideally, I want everything to rebuilt when I change site.hs
or any of the site's assets. I also want to stop the script with Ctrl-C when I'm done. In the end this is what I came up with...
#!/bin/bash
trap 'kill %1; kill %2;' SIGINT
stack exec site server & \
ls content/*.* \
css/*.* images/*.* \
templates/**/*.* \
templates/*.* \
site.hs \
| entr stack build --exec "stack exec site rebuild"
The trap line will kill the subprocesses on a SIGINT. The first process is the Hakyll server command. The second one is entr, which will watch the files that I pipe into it, and run stack build --exec
when there is a change. The --exec
is used to run the Hakyll rebuild command, so that the cache gets cleaned whenever a recompile happens or any of the site content changes.
When I'm doing editing site.hs
I switch back to the default site watch
command since that's faster and more efficient.