Ricochets
So, like everyone, I’m concerned by the End of commercial support of Windows 10, and I want to help some friends who aren’t computer nerds (yes, I have a few of those) to install Linux on their computers (the classic story so far), but I have an unusual expectation of hopefully not ending up being a technical hotline. What if the Linux computer never breaks and just keeps working forever, kind of like a Chromebook done right, with (again) infinite vendor support?
So, what Linux distribution to choose? NixOS indeed1, and here is not the place to argue why reproducibility and, most importantly, atomic upgrades make it a perfect choice for the task. However, one key requirement is: my buddies should never have to write Nix code to tweak their configuration.
If you keep on the same stable release channel (and that’s what “stable” is all about, right?), your configuration will never break. But there’s no such thing as an LTS (Long Term Support) release in NixOS; every 6 months you have to read the release notes, switch to the new channel, and eventually change some Nix code, so you get your hands a bit dirty, which is not great if the user isn’t a developer.
So, the solution is just to copy-paste in your terminal:
nix run https://ricochets.stoemp.club/main.tar.gz \
--experimental-features "nix-command flakes"
What does this do? It just changes the default <nixpkgs/nixos>
channel2 to
this repository, and with a bit
of human maintenance burden, that channel will always re-export the last stable.
No action on the user side is required, and to keep it that way we’ll have to
backport some deprecated options (e.g. sounds.enable got deprecated in the
24.11 release). Backporting the full release note changes each release
(starting from the current one, 25.05) is a big pile of
work3, and I don’t think this is necessary.
My targeted user is someone that uses their computer to do normal non-developer
tasks, maybe install some apps (through Flatpak), and that’s all; their
/etc/nixos/configuration.nix is the one generated by the graphical installer
(with choices of language/region/keymap, partitioning, and some desktop
environment).
Ensuring those sets of potential user configurations keep not breaking while unmodified is clearly an attainable goal, and also the occasion to set some opinionated defaults (like auto-upgrades) that suit users of a desktop/laptop.
Now if we take a quick break. Do you see what we’ve built?
Yes, some kind of enterprise-grade machine herd management!
Sure, you don’t like trying to steal Microsoft’s business, but the ability to manage a fleet of machines, configure them centrally, while giving users some degrees of freedom is just as simple as homebrewing your own Nix channel. Why aren’t there more people or organisations doing that?4
Now let’s try to keep the promise we just made. We’ll need some kind of CI,
checking for every new channel some potential user configurations and testing it
with, e.g., build-vm. I’m not sure what’s the best way to design the
backporting bits (since 25.11 isn’t out yet), but I’ll try to complete this
repository with more experiments.
Will 2025 be the year of Linux on the desktop? Idk but I really like the idea of having desktop environments that are really hard to break and kept up-to-date.
Feel free to ping me by mail, mastodon, or to catch up at NixCon 2025 if you want to discuss the matter :)
P.S. it would be unfair not to mention Michael Kelly’s nixbook project I first came across and found very cool, that motivated me to find an alternative installation method!
I’ve tried both RPM tree-based OSes like Fedora Atomic Spins and Universal Blue, but even though I didn’t measure it scientifically, boot times and general responsiveness on the machines I tested were significantly slower compared to NixOS. GuixSD with the
nonguixchannel would be a cool alternative I’d love to recommend, but for now, I find the Guix package set a bit too outdated to recommend to someone who can’t package things by themselves.↩︎I’m aware Nix channels are a flawed design, but I believe we will still have them around and I’m kind of proud of this hack.↩︎
and yet I’m not sure I understand why it’s not at least partially done in nixpkgs? Why not use
system.stateVersionto raise just a warning and ignore the option rather than a breaking error…↩︎I don’t think only about the corporate world, but also computers used in teen workshops, or by organizations doing politically sensitive work, etc.↩︎