Context: I love Guix but use enough random scientific programs and things that aren’t available (and have too much on my plate already to have time to figure out the packaging myself) so I use Guix over Arch which makes running the weird stuff more manageable as I have direct access to all of Arch’s packages and the AUR and a more normal setup in terms of FSH and such. I’ve had some weird issues though. Specifically I noticed tons of random big things like linux-libre being installed when I update. That obviously shouldn’t be needed as my kernel is installed via Pacman. This was super annoying and sometimes caused problems (kernel compilation is not fast on my machine and some times it failed so I had to do the update again). I finally think I figured it out today, so I’ll share what I have (and hopefully get some tips from more experienced Guix users).
Tl;dr
-minimal versions of packages are extremely important (though in my defense the normal-minimal pair that was relevant for me didn’t exist when I first installed it).
My issue
I had fastfetch installed because it is a nice way to get a quick summary of disparate system info for things like basic debugging. When I installed it there was no minimal version, but now there is. I didn’t look closely at the dependencies and since I had it added in my initial configuration didn’t notice all the crazy dependencies were because of it.
Broader Issue
I don’t really know how to do much dependency investigation in Guix and it seems (at least based on the obvious tools) to not have super great support for it.
While guix graph stuff is amazing (at least for small graphs; I still need to find/make a good visualizer for the larger ones), it has some problems by default:
- It doesn’t let you filter to just installed packages when doing reverse graphs. In my case I had wondered multiple times “what do I have installed that is requiring linux-libre” and that was not easy enough (yes I was always aware that I could have made it loop over my installed programs and run the dep graph for each, but that is way more painful than it should be). I am thinking of making a wrapper around this (basically find some way to get a list of all installed packages (maybe from listing the store; that should be easier too) but might be a while before I get around to it.
- An interactive browser (probably as part of the Emacs package) almost like ncdu or maybe like the inspector in SLY/SLIME would be good for this too. Some kind of interactive thing where you can see (with a collapsed tree by default) the true number of dependencies a package has and where they are concentrated (either numerically or according to size) and then drill down into it. Basically a dependency browser.
- It lacks integration with the update and installation processes. In some other package managers it tells you a list of all the new dependencies that will be installed and their size before installation (and generally has you confirm after showing you). This would be really nice in Guix. I don’t know if there is a technical barrier her with how Guix is made, but if this is possible it would be a good improvement.
- More generally, having something intermediate between no information at all and having to look through a DAG with hundreds of nodes (with no indication of which are already installed, of course) would be very helpful.
If anyone knows more about how this can be done, has comments on the architecture, or has examples of how you handle this, I would love to hear.