# Nix — Purely Functional Package Manager for Reproducible Builds > Nix is a cross-platform package manager that uses a purely functional approach to dependency management. Every package is built in isolation with pinned dependencies, enabling reproducible builds, atomic upgrades, and easy rollbacks across Linux and macOS. ## Install Save in your project root: # Nix — Purely Functional Package Manager for Reproducible Builds ## Quick Use ```bash # Install Nix (multi-user, works on Linux and macOS) sh <(curl -L https://nixos.org/nix/install) --daemon # Install a package into your profile nix-env -iA nixpkgs.ripgrep # Start a temporary shell with specific tools nix-shell -p nodejs python3 go # With flakes enabled, run a package without installing nix run nixpkgs#cowsay -- "Hello from Nix" ``` ## Introduction Nix treats packages like values in a functional language: each package is built from a fixed set of inputs with no implicit global state. This eliminates dependency conflicts, makes builds reproducible across machines, and allows atomic upgrades with instant rollback. The Nixpkgs repository is one of the largest open-source package collections with over 100,000 packages. ## What Nix Does - Builds packages in complete isolation with explicit, pinned dependencies - Supports atomic upgrades and instant rollbacks via generations - Provides temporary development shells with any combination of tools - Manages multiple versions and variants of the same package side by side - Works as a user-level package manager on any Linux distribution and macOS ## Architecture Overview Nix stores all packages in a content-addressed path under /nix/store, where each path includes a hash derived from all build inputs. The Nix expression language (a lazy functional DSL) describes how to build packages. When you request a package, Nix evaluates the expression, computes the output hash, and either fetches a pre-built binary from a cache or builds from source in a sandboxed environment. User profiles are symlink trees pointing into the store, and switching profiles is an atomic symlink swap. ## Self-Hosting & Configuration - Install with the official installer script supporting single-user or multi-user (daemon) modes - Configure substituters (binary caches) in /etc/nix/nix.conf for faster installs - Enable the experimental flakes feature for reproducible project-level dependency management - Use nix develop or nix-shell with a shell.nix file to define per-project dev environments - Set up a private binary cache with nix-serve or Cachix for team-wide build sharing ## Key Features - Reproducible builds guaranteed by content-addressed storage and sandboxed compilation - Atomic upgrades and rollbacks through profile generations - Flakes provide a standardized way to define project inputs and outputs - Cross-compilation support built into the package infrastructure - Declarative system configuration when paired with NixOS ## Comparison with Similar Tools - **Homebrew** — simpler to learn but lacks reproducibility guarantees and rollback support - **Guix** — similar functional approach but uses Guile Scheme instead of the Nix language - **asdf / mise** — manage language runtime versions but not arbitrary packages or system dependencies - **Docker** — provides isolation via containers but is heavier and less suited for local development tooling - **Conda** — strong in Python/data science but limited outside that ecosystem ## FAQ **Q: Can I use Nix without switching to NixOS?** A: Yes. Nix runs as a package manager on any Linux distribution, macOS, and WSL without replacing your OS. **Q: What are flakes?** A: Flakes are an opt-in feature that provides a standard schema for Nix projects with a lock file (flake.lock) for pinning dependencies and ensuring reproducibility. **Q: Does Nix use a lot of disk space?** A: The /nix/store can grow large since old versions are kept for rollback. Run nix-collect-garbage periodically to remove unreferenced packages. **Q: Is there a GUI for Nix?** A: Nix is primarily CLI-driven. Some community tools provide search interfaces, and the NixOS options can be explored via a web UI at search.nixos.org. ## Sources - https://github.com/NixOS/nix - https://nixos.org/ --- Source: https://tokrepo.com/en/workflows/asset-f6c8c48e Author: AI Open Source