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.
Btw, here's how you configure HiDPI for GNOME. Unfortunately, my laptop has a hydeepeeay display, so it's not fully compatible with Linux. (It's 3840x2160, so at least 2x scaling is possible, hypothetically.)
Commands from the Arch Wiki, but also adds cursor scaling:
$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "[{'Gdk/WindowScalingFactor', <2>}, {'Gtk/CursorThemeSize', <48>}]"
$ gsettings set org.gnome.desktop.interface scaling-factor 2
The default GNOME configuration is some how missing that. I didn't have to do that in Arch, but I do in Guix. IDK. Anyway, if you don't run those commands certain apps will be tiny, including a tiny mouse cursor.
You need to edit your /etc/config.scm or where ever you store your system config. Import the right modules/services, add your user to cgroup, add iptables-service-type to your services, add rootless-podman-service-type and configure it.
(use-service-modules containers networking …)
(use-modules (gnu system accounts)) ;for 'subid-range'
(operating-system
;; …
(users (cons (user-account
(name "alice")
(comment "Bob's sister")
(group "users")
;; Adding the account to the "cgroup" group
;; makes it possible to run podman commands.
(supplementary-groups '("cgroup" "wheel"
"audio" "video")))
%base-user-accounts))
(services
(append (list (service iptables-service-type)
(service rootless-podman-service-type
(rootless-podman-configuration
(subgids
(list (subid-range (name "alice"))))
(subuids
(list (subid-range (name "alice")))))))
%base-services)))
Then of course you run guix system reconfigure /etc/config.scm.
Now you can do a simple guix install distrobox. If you install distrobox first, you don't end up using rootless podman and you run into more problems that way. (You have to use distrobox --root.)
After that command, everything should work like normal. Enjoy. 🍻
txt
distrobox create --image docker.io/library/archlinux:latest --name arch-dev
distrobox enter arch-dev
Btw, here's the guix home configuration file I used to add the contents of flatpak.sh into my ~/.profile, in order to update the XDG_DATA_HOME env var.
guix shell and guix shell container for dev environment isolation
Yeah! This is one of the features I'm most interested in. I haven't gotten to using this feature yet, but I was curious about it.
Let's say I'm working on a project that requires Go, Node, maybe some C library, and GNU Make. Seems like I would be able to use guix shell for this, right? Great.
Now if a friend wanted to work on the project, could I share my guix shell configuration with him? (Assuming he's also a Guix user.)
I'm currently using distrobox.ini plus distrobox assemble for this kind of workflow, but of course this isn't totally reproducible.
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.