• Stars
    star
    147
  • Rank 245,812 (Top 5 %)
  • Language
    Nix
  • Created about 5 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Pragmatic tutorial on how to use nix with a haskell monorepo

Nix Haskell Monorepo Tutorial

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 Gabriel'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.

  1. pinned nixpkgs
  2. monorepo nix expressions
  3. extra deps
  4. system deps
  5. shell.nix
  6. setting up a hydra instance
  7. hydra project config
  8. nix tests
    1. simple test
    2. multiple machines
    3. generating tests
    4. testing the docs
  9. docker images
  10. developer ergonomy
    1. checking that caching works
    2. prefetch-nixpkgs.sh
    3. IDEs
    4. making sure Cabal, Stack and Nix use the same versions

Why?

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