Nix takes a fundamentally different approach: every package is stored in isolation with a cryptographic hash of its dependencies. This means no dependency conflicts and fully reproducible environments.

Installation

sh <(curl -L https://nixos.org/nix/install)

Installing Apps

nix-env -iA nixpkgs.firefox
nix-env -iA nixpkgs.vlc
nix-env -iA nixpkgs.vscode

Why Nix?

  • No dependency hell — Every package has its own isolated dependencies
  • Rollbacks — Every change is reversible
  • Reproducible — Same config produces the same environment on any machine
  • Cross-platform — Works on macOS and Linux

The Declarative Approach

Instead of installing packages imperatively, define your environment in a file:

# home.nix
{ pkgs, ... }: {
  home.packages = with pkgs; [
    firefox vlc vscode gimp
  ];
}

Run home-manager switch and your environment is exactly as defined.

Nix has a steeper learning curve than Homebrew or winget, but for developers who want deterministic, reproducible environments, it’s unmatched.