Nix is an immutable package manager. It’s a tool I’m exploring for creating reproducible builds of software, and to set up my disparate machines in a consistent way.

It was first created as part of a thesis paper by Eelco Dolstraa called “Nix: A Safe and Policy-Free System for Software Deployment”.

Right now, I’m experimenting with using it on my new Mac to replace Homebrew. I’m also using NixOS on my Linux desktop.

How it works

Nix configurations use a declarative model written in the Nix language. The Nix language is a language inspired by Haskell that looks like TOML.

The Nix language is Turing complete and capable on its own, but it benefits from the robust ecosystem to allow declaration of system configuration.

Package manager

The Nix package manager is the largest in the world. It has more “fresh” packages than any other package manager.

Declarative builds

The combination of the package manager and the Nix language allow for declarative builds.

Every build is isolated and built with an exact dependency tree - based on a Merkle tree. This allows for reproducible builds.