Benoit J - My mostly tech blog

Guix After a while

2024-01-04


It’s been couple of months after I migrated back to Guix.

Overall, the basic experience is good, comfortable. At the same time, some of the pain points, are quite painful:

  1. Guix does not handle well dependencies between software from different channels
  2. Some useful packages are still missing
  3. For clear reasons, packaging anything golang, rust, java, javascript, and similar is pretty much unrealistic

Guix does not handle well dependencies between software from different channels

Guix aim to be fully reproducible, but that is one big missing part. 3 Times I could not build my config due to incompatibilities between Guix, NonGuix, and my channel. Due to my time-machine “hack”, I was able to recover an broke config relatively quickly, but this is a pain. One more reminder that I miss flakes.

Possible solution would be to code something like flakes is Guix, but I dont have the time to contribute to that level.

Some useful packages are still missing

Hugo, mopidy w/ many plugins are missing. restic is outdated. NerdFonts are missing (license).

Many lsp servers are missing.

I use nix a lot on top of my basic Guix setup.

Packaging golan, rust, python, java, javascript and similar apps is unrealistic

Primarily for these reasons:

  1. amount of dependencies they have
  2. dependencies and version specification in native language build files ignored
  3. most libraries are:
    1. in one version only
    2. or missing
    3. or one step away to be updated and break the software

I tried “hacking” it by using the gnu build system, and calling the build tool to fetch dependencies, but the “home” under build is read only.

I understand why it’s done this way, but it creates unecessary fatigue for something as self contained as a golang or rust app.

It would be possible to do it, but would require symbols to always contain a version, and we are not there at all. I needs everyone to do it, which means it wont happen.

Another example, I used chezmoi in the past, it was working until it did not due to one of it’s dependencies got upgraded.

For applications it makes sense, for core stuff it make sense, for apps dependencies, makes a lot less sense if they have a strong dependency management system.

In some ways, both will tend to break over time, but leveraging the work of upstream dev reduces the workload on packagers.

Final notes

Some observations of my current migration:

You might have guessed, when the time is right, i’m back on nix.