Six months later with my GNU Guix-powered life

July 26, 2025

Alternative title: Six months later without my GNU Guix-powered life

I'm a nerd. One of my favourite things to do is to put some technological barrier in my way and use my knowledge to try to overcome it. This is extremely important for me, because some of the most important pieces of software in my life I discovered this way. Most recently, I did this with GNU Guix, and Lisp in general. I figured I'd write a debrief, since the first thing I posted to this blog was the beginning of my journey.

Normally, what makes a challenge fun is how challenging it is to overcome. GNU Guix was super hard. And fun. And annoying. Maybe it's because I put Guix on all my machines while at the same time learning Emacs, Scheme, and Common Lisp. But generally, everything that is worth the effort makes its value known very quickly. There's a reason I'm still using Emacs, and there's a reason I'm still making this post with Haunt and Skribe markup. There's also a reason why my servers are once again running OpenBSD, and my laptop is back on Fedora Silverblue (the third point above).

Love at First Sight

I've long been a fan of immutable distros. I've been using Fedora Silverblue since version 35, and NixOS has been running my home multimedia server for 3 years now. So when I found that the GNU project had their own fork of NixOS, which used as its configuration language not some arcane Haskell-like abomination, but a real programming language which I had always admired---I was excited.

So I got to work pouring through documentation. I have a pretty long history with OpenBSD, and the first thing I noticed when I started using Guix is that the man pages aren't sufficient to answer some questions. I found that I had to rely on online documentation quite a lot more than I was used to, and the speed of the Guix package manager made mistakes unforgiving. When I set up this blog on GuixSD, it took a few days, even after living with Guix for months on my laptop. When I switched it over to OpenBSD, it took me two hours from installation to HTTPS, and I never opened a browser. Which doesn't necessarily mean anything, but it demonstrates the kind of complexity and documentation crevasse that I was facing.

Complexity is part of the fun, so that wasn't really a problem. Was was a problem was the inconsistency. The promise of declarative GNU/Linux is that configuration files on one machine should be able to be dropped on another without too much trouble. This was not the case on Guix. My hand-rolled configs; examples from the documentation; online dotfiles: every one of these sources would sometimes be inexplicably incompatible with one of my systems. Okay, maybe that's unfair---I'm sure that given enough time the reason would make itself known. But at a certain point I wanted to finish building the system and do something cool with it, like make a blog, or learn something, or check my E-mail.

One time I didn't guix pull for a few weeks on my laptop and then I started getting an error every time I tried to reconfigure the system. I rolled back, which let me reconfigure again, but the new generation had the same problem. I probably could have fixed it, but I was travelling for work and didn't have time. I had to re-install, which was almost an entire day of pulling packages. “Why did that work? Isn't the whole point that the system has a known-good state?” It left a bitter taste in my mouth. After that fiasco I was constantly paranoid that my karaoke system or my remote server would just stop updating, and then I'd have a whole day event on my hands.

Standard Issues Party

On top of all the jank, Guix has the standard problems of being a fairly niche distro. I use stable Emacs for the same reason I use stable OpenBSD (I prefer a slow pace), but the stable Emacs Guix package was only updated to 30 last month. That bothered me, since Emacs is the defacto main interface for the system. The software availability was a bit of an issue otherwise, but unpackaged software was usually easy enough to package myself, thanks to the Scheme language; I had anticipated a bit of packaging.

Documentation quality comes along with this too. By and large the documentation is surprisingly very high quality, but OpenBSD is still king here. I think that the key is that the OpenBSD documentation is just a man away. The GNU/Linux world doesn't really make their man pages the same way. “Be the change” I suppose.

Really though, Guix is mature enough that the standard issues don't really apply to it. And since the backdrop is so unique and opinionated, it has its own ecosystem of programs to keep you in its world. I want to take a moment to say that there are some extremely talented people who put in a lot in order to create the Scheme-based machine we all dream of using. I think it's close---it just needs some more time in the oven.

Return to Normalcy

It was a fun journey, but it was time to get back to doing things other than setting up Guix systems. The disk failed on my karaoke machine (luckily I keep the tracks on a separate drive), and when it was time to setup the new system I just went with OpenBSD. It was my first time trying OpenBSD for my karaoke machine (I never put the same thing on it twice), and I don't want to say I was shocked how smoothly it went---OpenBSD has never let me down before---but things just worked. Even when I used regular distros like Debian or Xubuntu there was always something I wasn't happy with. Overhead resource usage for example when I had a lower power machine, or not being able to force fullscreen for whatever reason. And audio is still a mess on GNU/Linux. OpenBSD is so stable that I practically don't have to touch the machine, and I set up my audio config in three commands. Really Guix was never a good choice for my use-case. I thought that it would be rock-solid because of the declarative aspect, but between package updates and my own curiosity I couldn't leave it alone. All it has to do is run a Python app anyway, and I really don't like having to troubleshoot it when I'm half in the bag.

The web server went back to OpenBSD as well. I've been running web servers on OpenBSD for 5 or 6 years off and on, so I never really considered anything else. It just works.

I stuck with Guix for a longer on my laptop than any other machine, but I just couldn't get Heroic Launcher working on it, which meant that my DRM-free game library was ironically inaccessible on my freedom-machine. Plus the system just felt... crufty; in a way that it wasn't supposed to. There were parts of my configuration that I couldn't think of a reason for needing, but removing them broke other parts of the system. I never did get my fingerprint reader working either. Eventually, I bowed my head and went back to Silverblue. I was going to try and put the Guix package manager on the system to at least use it to manage my Emacs packages, but it seemed pretty in-depth for the sake of one application. Maybe once the rest of the ecosystem moves to immutable distributions the installation process for this stuff will assume it can't write to root. Really it should always have gone to /usr/local (which is symlinked to /var/usrlocal on Silverblue), but that's just my opinion. Guix doesn't really acknowledge the FHS anyway.

Honestly if I didn't want to play a game every now and again I'd probably have gone with OpenBSD on the laptop. Maybe one day I'll get a Steam Deck or something, but I don't really like to support Valve. For the moment, Silverblue adds enough stability to the GNU/Linux dumpster fire that it's actually usable in the long term. I mostly live in Emacs anyway, so when I just want to consume some media or play a game it's nice to have a system that just gets out of my way.

What Was Gained

I learned a lot about Scheme these last few months, and Lisp in general. I'm still on a journey to become a wizard, but it's certainly made me better at configuring Emacs. Obviously I stuck with Emacs as my editor of choice. I was actually on Acme for a long time, and vi before that. I would probably still be on Acme if plan9port worked properly on Wayland. It looks like they're close, but at this point I've lost most of my scripts for Acme, and if I'm writing Lisp Emacs is really the only game in town. Haunt is of course a boon, and SXML is much more fun to write than HTML or Markdown. For the most part, though, my life has been de-Guixified. Hopefully one day the package manager becomes easier to install on Silverblue, but until that happens I'm happy using Emacs as my Lisp machine.

Guix is a beautiful piece of software, but, apart from the Scheme programming language (which is a pretty big advantage) it doesn't offer me anything that NixOS doesn't, and the maintenance gap makes it pretty hard to justify moving my multimedia server, the only server I could really see Guix working out on. All of the services on it are containers, but NixOS has certain convenience features that make maintenance somewhat less frequent, and Nix itself is just faster.