Other programs I’ve tried: Puppet, Ansible, Pip, Poetry, Virtualenv, Vagrant, NPM, Yarn, Gradle, Docker, Apt, Yum, Make, and many more I can’t remember the names of.
It would be difficult to convince myself from ten years ago that Nix was even a good idea without trying it. The change is probably as fundamental as going from ./configure && make && make install to a package manager, or from no version control to Git. I’ll give it a try
You can replace the vast majority of the use cases of the other programs above with Nix – it’s not just another tool on the pile.
Do you ever work on more than one programming project? It’s trivial to ensure they don’t clobber each other, for example when they use different versions of NPM or Python.
Reverting to a previous version of your entire operating system configuration is trivial.
You don’t need to write any rules to uninstall packages or disable services when you no longer need them, like in Puppet or Ansible—you simply remove the relevant line and rebuild.
Some arguments I can think of against Nix:
Builds can take a relatively large amount of disk space, but that’s already really cheap and getting cheaper.
The Nix language is maybe about as complex as Puppet, Ansible or Vagrant, but unless you’re developing software you won’t need to deal with anything as complex as that.
Some of the tooling is still not very mature. Again, unless you’re a developer using some unusual package management solution you should not worry about this.
Strong endorsement. Having used ansible for work and Nix for my own computer, the experience is incomparable.
As two additional “against” I’ll offer these:
while Nix-the-idea and NixOS-the-operating-system are awesome and vastly superior to the alternatives (other distros I’ve tried: ubuntu, mint, arch, gentoo, debian, devuan, centos, …), Nix-the-language is… suboptimal. Weird syntax, not awesome error messages (but at least if you get an error you don’t get it halfway through an ansible playbook leaving your system broken UGH)
the documentation is… Not Great. A lot of the time I had to read the source code for nixpkgs which should not be needed?
That considered, I still maintain it is architecturally vastly superior to the alternatives, in particular because error messages can be improved (for example, via the Nickel project), and the documentation can be fixed, without changing the architecture.
Software: Nix
Need: Package management
Other programs I’ve tried: Puppet, Ansible, Pip, Poetry, Virtualenv, Vagrant, NPM, Yarn, Gradle, Docker, Apt, Yum, Make, and many more I can’t remember the names of.
It would be difficult to convince myself from ten years ago that Nix was even a good idea without trying it. The change is probably as fundamental as going from
./configure && make && make install
to a package manager, or from no version control to Git. I’ll give it a tryYou can replace the vast majority of the use cases of the other programs above with Nix – it’s not just another tool on the pile.
Do you ever work on more than one programming project? It’s trivial to ensure they don’t clobber each other, for example when they use different versions of NPM or Python.
Reverting to a previous version of your entire operating system configuration is trivial.
You don’t need to write any rules to uninstall packages or disable services when you no longer need them, like in Puppet or Ansible—you simply remove the relevant line and rebuild.
Some arguments I can think of against Nix:
Builds can take a relatively large amount of disk space, but that’s already really cheap and getting cheaper.
The Nix language is maybe about as complex as Puppet, Ansible or Vagrant, but unless you’re developing software you won’t need to deal with anything as complex as that.
Some of the tooling is still not very mature. Again, unless you’re a developer using some unusual package management solution you should not worry about this.
Strong endorsement. Having used ansible for work and Nix for my own computer, the experience is incomparable.
As two additional “against” I’ll offer these:
while Nix-the-idea and NixOS-the-operating-system are awesome and vastly superior to the alternatives (other distros I’ve tried: ubuntu, mint, arch, gentoo, debian, devuan, centos, …), Nix-the-language is… suboptimal. Weird syntax, not awesome error messages (but at least if you get an error you don’t get it halfway through an ansible playbook leaving your system broken UGH)
the documentation is… Not Great. A lot of the time I had to read the source code for nixpkgs which should not be needed?
That considered, I still maintain it is architecturally vastly superior to the alternatives, in particular because error messages can be improved (for example, via the Nickel project), and the documentation can be fixed, without changing the architecture.
As a counterpoint, here’s my experience with NixOS: https://poignardazur.github.io/2021/09/08/nixos-post-mortem/