A build tool, package manager, and programming language

Concepts / Nix

Nix refers to a few different things:

  1. The pure and functional programming language
  2. The Nix CLI
  3. The overall Nix package management system

The Nix CLI

There are two different Nix CLIs currently active:

The unified CLI

The unified CLI is a still-experimental way of using Nix that involves just one executable called nix. All Nix functionality is wrapped into this tool, including commands like nix build for building packages instead of the old nix-build tool, nix develop for activating Nix development environments instead of the old nix-shell tool, nix store for managing the Nix store instead of the old nix-store tool, and more. Because the unified CLI isn't yet official, it needs to be explicitly enabled in your Nix configuration by adding nix-command to your experimental-features list.

We won't cover setting up the unified CLI here because the Determinate Nix Installer both installs it and enables it in your Nix configuration.

The original CLI

The original CLI for Nix is still the official CLI but, as we mention above, not recommended for new Nix users for two reasons:

  1. It's incompatible with Nix flakes as it was created before the inception of flakes.
  2. It presents significant cognitive overhead in comparison with the unified CLI because it requires you to learn a wide variety of CLI tools, including nix-build for building packages, nix-shell for Nix development environments, nix-store for managing the Nix store, and several more.

The Determinate Nix Installer enables the unified CLI by default, but leaves the tools from the original CLI accessible.

Was this page helpful?