When comparing Nix vs Nix package manager, the Slant community recommends Nix package manager for most people. In the question“What are the best Mac package managers?” Nix package manager is ranked 2nd while Nix is ranked 9th. The most important reason people chose Nix package manager is:
Every time your profile changes, you get a new generation of your profile and older generations are kept around, so you can easily (and atomically) revert to older version of your profile.
Specs
Ranked in these QuestionsQuestion Ranking
Pros
Pro No side effects when building packages
Nix is a purely functional package management system. This means that the act of building a package does not have side effects, such as destructively updating or deleting files that may be used by other packages.
Pro Isolated development environments
Nix allows the creation of project-specific shell and build environments which are isolated from the rest of the system. These environments are defined declaratively to ensure reproducibility.
Pro Can replace docker in some places
Pro Can use multiple versions of the same package
Because of the functional approach it takes, Nix makes it easy for systems to use multiple versions of the same package simultaneously, and ensure that updating or removing a package can't break other packages.
Pro The configuration works on "All machines"
No more of the traditional: "it works on my machine". When it says reproducible, this is the real deal.
Pro It's easy to revert any change in your environment
Every time your profile changes, you get a new generation of your profile and older generations are kept around, so you can easily (and atomically) revert to older version of your profile.
Pro Packages installed with Nix don't overlap with packages installed in /usr/local
Since packages are stored in the /nix directory, it won't overlap with anything you'd install in /usr/local or wherever else.
Pro Can keep around several profiles for you to use
You can have different (probably overlapping) sets of software installed in two or more profiles that will be handled (changed, versioned, upgraded, reverted) independently. All software will be installed in the same /nix/store, so any overlaps between your sets will be physically installed only once.
Pro You always and atomically get an isolated consistent profile
Every time you install, delete or change anything you get a new fresh copy of your user environment (set of symlinks to files in /nix/store) that's stored in the same /nix/store and handled mostly the same way. Your "profile" (symlink to one of environments) is updated after everything else is ready, so you'll never end up in a half-finished state of your system.
Pro Does not require root priviledges
Everything is owned by your user (unless you use more powerful multiuser mode that doesn't require root either).
Pro Uses binary caches (that are provided) so you don't have to build anything locally
Due to its functional nature, it can just download a binary package with the same hash if its available and it'll get the very same package as you'd build locally (to the last bit that is).
Pro Packages don't change after they are built
Nix treats packages like values in a functional language. Since they are built by functions without side effects they never change after they are built.
Pro Very easy to share compiled binaries between machines
You can share packages via HTTP or SSH (push or pull) with just some simple commands.
Pro Easy to install
Requires just one shell script to install, only one directory is created via sudo. This makes for a pretty simple install method that most can grasp.
Pro Many apps
Since it is compatible on Mac and Linux, there are many apps in their repos.
Cons
Con Does not work well for services on non-NixOS systems
When using Nix with anything other than NixOS you can run into difficulties with trying to start up services. For example, you can install docker with Nix, but it won't integrate with the host system's systemd leaving you to handcraft awkward workarounds in order to start the background service that docker requires. This seems like a critical flaw when using Nix on anything that is not NixOS, and it's unfortunate because this affects many of the packages many users would be most interested in using Nix to handle.
Con Steep learning curve
Con Cannot handle filetypes that have different semantics across different versions
While the functional approach that Nix takes is great for sandboxing binary artifacts of packages, it seriously lacks any power in handling configuration files or user data. It's difficult to upgrade and downgrade files where semantics and syntax can change between versions. Especially in Debian/Ubuntu it can cause severe problems where the upgrade process blocks and the user needs to resolve the 3-way merge.
Con Feels slightly over-complicated
Con Steep learning curve
There are lots of unfamiliar concepts and jargon (e.g. fixpoint, instantiate, realise).
Con Cannot handle filetypes that have different semantics across different versions
While the functional approach that Nix takes is great for sandboxing binary artifacts of packages, it seriously lacks any power in handling configuration files or user data. It's difficult to upgrade and downgrade files where semantics and syntax can change between versions. Especially in Debian/Ubuntu it can cause severe problems where the upgrade process blocks and the user needs to resolve the 3-way merge.
