TL;DR:#
Nix is a powerful tool that changes how you manage software by using a declarative approach. Instead of running commands to install packages one by one, you define your entire system in a single configuration file, ensuring your setup is reproducible, safe, and easy to roll back.
We’ve all been there: you install a package, it pulls in dozens of dependencies, and months later, your system feels like a “black box” of forgotten software. Traditional package management is often a game of memory and luck.

Nix isn’t just a package manager, it’s a functional approach to computing. It treats your system like a blueprint rather than a pile of manual changes.
Understanding the Paradigm#
To understand why Nix is appealing, we first have to look at how we usually do things.
The Imperative Way (APT & DNF)#
Traditional tools like APT and DNF are imperative. You give them a command: “install this.”
Example:
sudo apt install kitty
sudo dnf install fastfetch- Process: The system modifies its state immediately, placing files in standard directories like
/usr/bin. - The Downside: If you install different versions of the same library, they often conflict. If an update breaks your system, undoing it is difficult because the “old state” is overwritten.
The Declarative Way (Nix)#
Nix is declarative. You don’t tell the system how to install software; you tell it what the system should contain.
Example:
{ config, pkgs, unstable, ... }:
{
home.packages = with pkgs; [
kitty
fastfetch
unstable.neovim
python315
python314
];
}- Process: You list your packages in a
.nixfile. Nix then builds an environment where everything is stored in the/nix/storeunder unique hashes. - The Benefit: No two packages ever “clash.” You can have Python 3.15 and 3.14 running side-by-side without them ever knowing the other exists.
Comparative Table#
| Feature | APT / DNF (Imperative) | Nix (Declarative) |
|---|---|---|
| Logic | Step-by-step commands | State definition (Blueprint) |
| Rollbacks | Complex/Manual | Built-in and Instant |
| Consistency | Hard to replicate exactly | Identical across any machine |
| Isolation | Shared /usr/lib (Risk of conflict) | Isolated /nix/store (Safe) |
My Personal Experience#
After using Nix to manage my packages, here is what I found from a hands-on perspective:
The “Peace of Mind” Factor#
I no longer have to remember what I installed. If I want to see my software list, I just open my config file. It is much easier to manage than a history of terminal commands that I typed weeks ago.
Effortless Version Management#
In my testing, switching between package versions or trying out a new tool was stress-free. If a new version didn’t work, I just changed one line in my config and ran a rebuild. It’s like having an “Undo” button for your entire operating system.
The Learning Curve (The “Catch”)#
It’s not all magic. Using Nix on a non-NixOS distribution (like Ubuntu) requires some adjustment:
- The Path Issue: Because Nix doesn’t use standard folders like
/usr/bin, your shell needs to be told where to find the Nix binaries. - Integration: Sometimes desktop environments won’t “see” a Nix-installed app icon until you manually link the desktop files or use a tool like Home Manager.
Conclusion#
Nix is for the user who values reproducibility and order. While it requires a shift in how you think about your computer, the ability to define your environment in code and have it work exactly the same way every time is a massive upgrade for productivity.
