

I’ve been enjoying Guix for the last 8 days. You declare your OS and home config in a file and you can check them into source control. It was originally a fork of NixOS, but has diverged a lot.
The CLIs and APIs are pretty nice. They have a concept of “channels”, which are git repos you can download software from. The default official channel only hosts FOSS software, but you can trivially add non-FOSS channels and they work just as well as the first-party channels.
Each channel update and package install, removal, update get put on a log, which you can trivially jump between. guix package --switch-genereation=28
and boom you’re at that generation (it’s like a git commit). The software and config changes get saved in the generation so the jump is clean and atomic. I actually bisected my OS yesterday to track a bug! That was cool. You can also create and share isolated, reproducible environments.
Guix works with Flatpak and distrobox as well, in case some software isn’t available in existing channels. I got HiDPI, Zoom, Logseq, Syncthing, and Tailscale working.
The biggest drawback for me so far is that it doesn’t use systemd. Not sure if it’s a dealbreaker for me yet. Systemd does way more than just manage system services, so GNU Shepherd (which Guix uses) isn’t a real replacement.
I love this. I hate when tools only allow hidden config files. I want to know where the config is—my teammates should be aware of where the config is. I don’t want to be tricked into thinking there isn’t a config file in a directory.
I actually have
alias ls='ls -A'
in my bashrc so I see everything.