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.