Nix is a package manager and build tool. It is used in
- Hydra CI
- Provisioning dependencies in Buildkite CI.
- Reproducible development environments (nix develop).
Nix is not required for
cardano-wallet development, but it can help you a lot if you try it.
The minimum required version of Nix is 2.5.
To improve build speed, it is highly recommended (but not mandatory) to configure the binary cache maintained by IOHK.
See iohk-nix/docs/nix.md or cardano-node/doc/getting-started/building-the-node-using-nix.md for instructions on how to configure the Hydra binary cache on your system.
Building with Nix
See the Building page.
Reproducible Development Environment
nix develop to get a build environment which includes all necessary compilers, libraries, and development tools.
This uses the
devShell attribute of
Full instructions are on the Building page.
The Nix build depends on code which is generated from
stack.yaml and the Cabal files. If you change these files, then you will probably need to update the generated files.
To do this, run:
Then add and commit the files that it creates.
Alternatively, wait for Buildkite to run this same command. It will produce a patch, and also push a commit with updates back to your branch.
The Nix build also depends on the Haskell.nix build infrastructure. It may be necessary to update
haskell.nix when moving to a new Haskell LTS version or adding Hackage dependencies.
To update to the latest version, run the following command:
$ nix flake lock --update-input haskellNix warning: updating lock file '/home/rodney/iohk/cw/flake/flake.lock': • Updated input 'haskellNix': 'github:input-output-hk/haskell.nix/f05b4ce7337cfa833a377a4f7a889cdbc6581103' (2022-01-11) → 'github:input-output-hk/haskell.nix/a3c9d33f301715b162b12afe926b4968f2fe573d' (2022-01-17) • Updated input 'haskellNix/hackage': 'github:input-output-hk/hackage.nix/d3e03042af2d0c71773965051d29b1e50fbb128e' (2022-01-11) → 'github:input-output-hk/hackage.nix/3e64c7f692490cb403a258209e90fd589f2434a0' (2022-01-17) • Updated input 'haskellNix/stackage': 'github:input-output-hk/stackage.nix/308844000fafade0754e8c6641d0277768050413' (2022-01-11) → 'github:input-output-hk/stackage.nix/3c20ae33c6e59db9ba49b918d69caefb0187a2c5' (2022-01-15) warning: Git tree '/home/rodney/iohk/cw/flake' is dirty
Then commit the updated flake.lock file.
When updating Haskell.nix, consult the ChangeLog file. There may have been API changes which need corresponding updates in
The procedure for updating the
iohk-nix library of common code is much the same as for Haskell.nix. Run this command and commit the updated
$ nix flake lock --update-input iohkNix
It is not often necessary to update
iohk-nix. Before updating, ask devops whether there may be changes which affect our build.
Warning: dumping very large path
warning: dumping very large path (> 256 MiB); this may run out of memory
Make sure you don’t have large files or directories in your git worktree.
When building, Nix will copy the project sources into
/nix/store. Standard folders such as
.stack-work will be filtered out, but everything else will be copied.