I recently tried to create Nix setup for our Haskell monorepo at work. This tutorial documents the whole process. This is still experimental and any feedback is very welcome. If you find it hard to understand some part just open an issue.
I absolutely recommend reading first Gabriella's tutorial on how to use Nix with Haskell in general.
Even though you end up with a project that can be fully built with Nix, chapter 5. shell.nix describes how you can use Nix to only
provision your dependencies and use only Cabal and its v2-
multi-package API to manage your build during development completely transparently.
- pinned nixpkgs
- monorepo nix expressions
- extra deps
- system deps
- shell.nix
- setting up a hydra instance
- hydra project config
- nix tests
- docker images
- developer ergonomy
- checking that caching works
- prefetch-nixpkgs.sh
- IDEs
- making sure Cabal, Stack and Nix use the same versions
What can you gain by following this tutorial:
- easy to write, integration test-suites
- cached package-builds across machines
- self-contained project description - no need to list system dependencies in a readme
- reproducibility
- easily bootstrappable local enrionment ??? TBD