Arch Linux was my distribution of choice for more than a decade. With its rolling-release model, minimal base, and the invaluable ArchWiki, it felt like the final distribution I would ever need.
My primary Linux machine is a dedicated home server, handling services like Home Assistant, local DNS, background jobs, and developer sandboxes. For a server running 24/7, long-term stability and maintainability are critical. Over years of incremental tweaks, configuration entropy inevitably crept in. System state became scattered across /etc, /usr, systemd service units, and package manager transactions. Whenever I made changes, I had to keep diligent notes about which files were edited, when, and why.
Recent events, such as the Arch Linux AUR security incidents (which I touched upon in my previous post on Caddy) and developments around Omarchy, prompted me to re-evaluate my setup. I wanted an operating system that was declarative, reproducible, and manageable entirely in code.
GNU Guix shares the same core architectural foundation as NixOS (functional package management, declarative configuration, and atomic rollbacks), but its design choices felt much more cohesive:
- Language (GNU Guile Scheme vs Nix DSL): Nix uses its own bespoke domain-specific language. Guix configurations are written entirely in GNU Guile, a general-purpose Scheme (Lisp). As an Emacs user accustomed to Emacs Lisp, Scheme felt familiar and expressive. Rather than learning a specialized configuration syntax, I could leverage a real programming language with first-class functions, macros, and modules.
- Init System (GNU Shepherd vs systemd): NixOS builds on systemd, while Guix System uses GNU Shepherd as its service manager. In Guix, Shepherd services are also defined in Guile Scheme. Everything from package recipes to system daemons to PID 1 shares a unified language and data model.
- Documentation: Guix’s documentation is remarkably cohesive. Even though some community tutorials can be dated, the official GNU Guix reference manual is consistent, comprehensive, and avoids the fragmented wiki landscape of Nix.
- Philosophy (GNU Libre Standards vs Pragmatism): NixOS takes a pragmatic stance, offering toggles for proprietary software and unfree drivers. GNU Guix strictly adheres to the GNU Free System Distribution Guidelines, shipping the Linux-libre kernel and free software exclusively by default.
Great writeup! I discovered guix a few yearssago and it’s become my preferred OS. I first installed it on my desktop and then my two laptops.
The declaritive system config is a game changer. I like it so much I would never go back to a distro that doesn’t support it. The rollback feature has saved my @$$ a few times.
I haven’t done any yet but I want to try packaging some software for guix. I think that’s it’s biggest downside, some packages not being availible on any channels forcing users to install via nix, flathub, or something else. In my experience it can add a bit of friction.
I also tried GNU Guix distro when was looking for a free distro. But the Guix package manager was too slow to be usable. So I went to Trisquel.
Installing new packages is relatively slow. But it was also quite slow because the infrastructure at gnu.org was loaded. It is a lot faster since the project moved to codeberg.
Also, for me personally is openix a “guix shell” a lot faster than starting up a virtual machine.
I have Guix, the package manager, on Debian
This is what I do. I use
guix shellfor local development environments, for example when I need current Rust + cargo or an LSP package in Emacs.Guix is typically very little behind of Arch (which I use as well, in a VM), and depending on what you do, it now has a pretty massive package selection (well, less npm stuff or NVidia hardware support).
It is also quite good for packaging and distributing own software that way, offering for developers and power users a better solution to what flatpaks solve. Since it works across different distributions and across most popular languages, I expect it to become somewhat of a standard for bazaar-style open source contributions.
What I really want is NixOS, but with the Debian package repository.
I don’t understand that. Debian packaging repository works completely different than how NixOS works.
I want to try out Guix in a way that’s easy. I have very little time, but when I have time that I am mentally well enough to do something technical , but not confident enough to do something important, I fuck around with different OSes in VMs.
Guix has been a bastard to play with. I can get an XFCE/Ratpoison env set up. Rebuilding Guix over wifi is such a fucking massive pain that my only sense of balance is that I keep hammering their services for gigabytes , so they’re suffering as much as me.
So, if I want to try using LXQT, the entire fucking thing doesn’t compile, and what’s worse, it downloads fucking EVERYTHING before trying to build properly, then crashing out, or , finishing building everything again and then having LXQT not launch on login. I just get a black screen.
I get that I should learn how to setup x whatever to make it run properly and understand what it is I’m doing. But like, I can learn a few things at a time, and I learn by doing and iterating. My feelings on the documentation is that GNUdocs are written by people who make a fuckload of assumptions on existing user knowledge, and even their ability to understand paradigms with no indicators. What I mean by this, is that it is akin to a map with no key or legend. There are different sections highlighted in different colours , but not explanation to what those colours are. And there is text that says “avoid the hinterlands, as they have hostile bandits. go for the blinterlands, they have fine ales and buxom wenches” BUT NOTHING TELLS ME WHICH COLOUR REFERS TO EITHER PLACE.
Compare and contrast the Mozilla documentation on web standards :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
https://www.gnu.org/software/coreutils/manual/html_node/rm-invocation.html
The Mozilla docs show examples of the things in action, the GNU ones (the bad ones, anyway) don’t have concrete examples or things to avoid. Just abstractions only.
Changing or installing different DEs was really easy on Fedora;
https://docs.fedoraproject.org/en-US/quick-docs/switching-desktop-environments/
sudo dnf install @kde-desktop-environmentTrying to do the same for a repeatable config.scm , WHICH IS THE ENTIRE FUCKING POINT OF GUIX, is a nightmare.
Here’s the focused in part of the info :
https://guix.gnu.org/manual/1.5.0/en/html_node/Desktop-Services.html
I remove xfce-desktop-service-type and add in lxqt-desktop-service-type , then run
sudo guix system reconfigure /etc/config.scm, after waiting for somewhere between 45 mins to an hour, the rebuild ends and I get a non-working option to select LXQT in login and have no fucking idea wtf to do. Fucking great.Or, it makes me wait 45mins before saying the SCM needed --allow-downgrades, or for me to waste gigabytes of space downloading the entire earth using guix pull.
I really want to go for GUIX for a few reasons : sensible, systemd free reproducible builds, a repo that seems an appropriate size with appropriate support, and not going for right wing software.
I can’t fucking do that if there is no looseness and “playability” factor to learn by doing. I don’t want to, and shouldn’t fucking read a book length manual to learn everything before I can do a few things that are very basic tasks or doing the central point of your software.
It’s like 1 hour before I go to bed when I’m fucking about with it. I don’t have the brainpower to bother doing that shit, and if I did, I wouldn’t be wasting it investigating alternate operating systems.
EDIT : If anyone knows of a good source of .scm configs I can fuck about with and tips on making use of cached stuff , I would really appreciate it.
EDIT2 : BTW, I am not the biggest fan of fedora for a few reasons, but I have to give it its due props. That functionality alongside archinstall’s easy setup let me try basically every fucking UI under the sun quite easily.
Here you go
thanks? I haven’t read it all, but just to note, I’m looking for LXQT and not LXDE, but maybe I just need to replace the one line that says LXDE with LXQT then I can try something that whittles away everything else you have there.
You can install lxqt as a user; it does not need to be part of your system configuration
But I WANT it to be part of the system config. There is no point to what I want to maybe use this for if I have to do it per user.
Then just add it to the package list (along with the login manager of your choice) then add your login manager to the services.
From the discussion on the programmer forum lobste.rs:
I just started a NixOS project and briefly considered Guix instead. I went with Nix entirely because it’s more popular, which means there’s more AI training material for it. I don’t intend to ever program in Nix myself so while I’d prefer Scheme conceptually, it’s not a big thing for me. OTOH everyone loves the Guix docs, that’s a point in its favor for AI usability.
Joey Hess seems to have been right with his recent comment that LLMs promote using things like configuration languages that are worse for understanding.
GNU/Stallman always coming up with the horribly bad names for stuff.
Most people do.
I non-ironically like the name Hurd
A herd of water buffalos






