Skip to content

Pragmatic tutorial on how to use nix with a haskell monorepo

Notifications You must be signed in to change notification settings

fghibellini/nix-haskell-monorepo

Repository files navigation

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

  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

About

Pragmatic tutorial on how to use nix with a haskell monorepo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published