The product of a chat with @QuazarOmega@lemy.lol
Nix has the same mix of conceptual simplicity and atrocious user interface as git, but somehow magnified three times over. I’ve tried it multiple times, but could never get over the unintuitive gaggle of commands.
It’s much simpler because you’re using text files to define the expected state, the cli is there only to tell nix to figure out what it needs to do and to get on with it. Meanwhile with git you’re manually doing each of the steps until you reach the desired state.
I only need cd ~/dotfiles/nix/ && nix-channel --update && nix flake update && home-manager switch
for everyday package management. It’s the nix version of apt update upgrade and install.
nix shell
and nix run
are pretty useful as well, and you’d want home-manager generations
to rollback.
The confusion arises because there are 5 different ways to do the same thing, the non-experimental methods shouldn’t be used even though they’re recommended in the official docs, and you need to get lucky to get the info that you can use home-manager and that one liner.
The confusion arises because there are 5 different ways to do the same thing, the non-experimental methods shouldn’t be used even though they’re recommended in the official docs
I appreciate what you’re trying to say, but you’re kind of illustrating exactly the point I was making about conceptual simplicity and atrocious UX.
You’re ignoring the difference between using something declaratory and imperatively. Just because it’s difficult to get to that one liner, it doesn’t change the fact you’ll still only use that one command. Git by it’s nature requires you to use different commands to achieve different results. Home-manager allows you to both update your packages and delete all of them with the same command, because that command is “sync the state with the source of truth”.
Have you considered GUIX instead? Same concept, but with added GNU and configured entirely with Guile Scheme, apparently.
It’s far better in theory, but in practice it’s got some massive issues:
- non-free packages are taboo in the official guix community
- binary support was lacking the last time I used it (firefox didn’t have a precompiled bin for example, and that means you need to leave your browser to compile overnight)
- far less packages than nixpkgs even when you account for the non-free repo
- packages are seriously out of date (I tried using it as an additional pm a few months ago, and debian 12 was newer in a lot of cases)
- essentially no support for some programming languages and package managers (node and npm for example)
In it’s current state it’s really only good for emacs, lisps, and some other languages like haskell.