I’m absolutely sold on the concept of functional package management.
The process of “installing and configuring stuff” neatly fits the definition of a function, and I can’t think of any reason why such a critical function should NOT be pure, i.e. why it’s output (the state of the OS), should not be determined only by it’s inputs (set of dependencies and config).
I’m also a pragmatist, I sometimes chose a technology that I consider inferior, because it has more short or medium term benefits, lower investment, risk, cost of adoption, etc.
My “inner pragmatist” had me wait almost a decade from my discovery of NixOS, to trying it out, and I recently just did that: I setup a NixOS raspberry-pi with half a dozen of services, and it went well enough that I consider NixOS meets my “pragmatist” expectations.
One aspect of Nix makes me pessimistic: the Nix language. I think inventing a custom language for a package manager is a liability. Package management absolutely deserves a DSL (domain specific language), but any dialect of the List family is a superior choice.
The advantage of having Guile based DSL is a huge one IMO.
However I expect Guix to have a higher cost, at least in the short term, now I’m trying to get a feeling of “how much”, so I set out searching for how I could replicate my NixOS experiment, to see how much harder it is with Guix.
For context, my NixOS raspberry-pi config has the following services: librespot, zigbee2mqtt, home-assistant, mpd, it uses ALSA for mpd and librespot.
I’d appreciate any pointers on how I can configure this with Guix.