Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 

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

About

Pragmatic tutorial on how to use nix with a haskell monorepo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published