It's the most advanced Linux distribution I know of.
- Nix brings Functional Programming to the system. It's declarative, a pleasure to configure and use.
- The whole system configuration is persisted in a single file ("configuration.nix").
- Easily share and sync the system and configurations between multiple hosts.
- Easy to automate using a Git CI flow to build the system, generate cache and deploy on many hosts.
- Reproducible: Software runs the same on different hosts. Errors are more easily replicated. Docker images generated on different hosts are exactly the same (good for caching).
- Granular system wide rollback at boot. Effortless recovery.
- Has an ephemeral sandboxed shell (nix shell) that allows using packages without installing. Unused packages are garbage collected automatically.
- Can start a fresh system at every boot. root folder ("/") can be scrapped.
- Packages of any version, even conflicting versions, work in parallel.
- Packages are built from sources in a sandboxed/airgapped environment once and (binary) cached, other hosts can reuse it without building.
- Supports distributed & remote builds. Speeding up builds.
- Provides high level abstractions that makes packaging the right way easier.
- Nixpkgs is the largest repository of high quality, fresh packages. Rivals AUR with notable differences.
- Can easily generate lean OS images with only required packages. Generates docker images smaller than Alpine.
- Project dependencies are sandboxed, isolated from system environment, Docker becomes unnecessary. direnv makes dependencies available only when opening the project.
- Nix works everywhere (Linux, Mac and Windows WSL).
- Great community. Made by big brains. Used by competent people.
- Steep learning curve.
- (Basic) programming skills is required.
- Not mainstream.
- Binaries require patching.
- Missing packages requires packaging.
It depends on who you are.
People benefiting the most of NixOS are usually power users, programmers.
But NixOS can benefit any user willing to pay the price in learning/study that is required.
Install is manual. (But simple.)
I highly recommend NixOS for Arch users. Because Arch teaches you the Linux basics while NixOS solves automation and resiliency.
NixOS is where you want to be at: Low effort, reliable, productive. Allowing boldly experimentation.
I use Nix for reproducible builds and containers/kubernetes for deployments. [1]
Adjust your expectations:
- It's a new paradigm.
- The learning curve is real.
- It's a major milestone.
- Be prepared to spend time learning Nix.
- Focus on getting the basics right (nix language).
- Getting acquainted with Nix(OS) is important enough.
- When onboarding stick to Nix(OS) only. Use what you already know. Avoid introducing anything new.
- Read the manuals.
- Read other people's configuration.nix
- Learn to package.
- Search issues and read source code at nixpkgs.
- Upstream your improvements.
- Ask for help. The community is there for you.