TLDR: is the amount of time used to switch to these distros worth it? (compared to Debian, Fedora, etc.), or is there a better distro that fits my use case?
I have been using Linux for about 4 years now as my daily driver, distro hopping a lot. I have used PopOS (for a few years), Manjaro, Garuda (for a year or so), KDE Neon, Debian, Linux Mint, Nobara (for some months until I ran into system breaking issues), and lastly EndeavourOS.
Issues I have run into in the past are around the different packaging systems and versioning. The Debian/Fedora based ones seem to be fairly slow to update and so they have out of date packages, which sometimes is ok, but sometimes if they are too out of date I have to compile it from scratch. Also the different packaging systems (like apt, pacman, dnf…) means that depending on what flavor I am currently running there may not be a analogous system or maybe a package will be missing and I end up (once again) having to build it from scratch. On the other side I have Arch Linux based ones, which usually works great (especially having access to the AUR) but I end up spending a lot of time configuring stuff that isn’t built in (which is by design I know), or having stuff randomly be broken after an update. (which I suppose is my own fault I should have probably set up btrfs or something). Also some libraries will build/work great out of the box on some distros and be completely unusable on others for no apparent reason.
I looked into Gentoo, NixOS, and Guix SD as possible solutions for my issues. Gentoo because since it seems like I have to compile a lot of my libraries anyways maybe I should use a system where you have to compile everything. NixOS and Guix since it seems they are designed for package management and versioning built into the system which might be exactly what I am looking for.
I am worried about the learning curve of all of these. I don’t have a lot of time to mess around with configuring stuff all the time. Ideally I’m looking for a distro that works well with my old-ish hardware (with NVIDIA support unfortunately) where I can sit down, program and/or play games on steam+proton; but it seems like I have to choose between “system is stable but packages are old” and "system and libraries are new but is very unstable. Or if I am using snaps or flatpak its “install 5 things and now you are out of memory” (thanks electron).
Also concerned about both NixOS and Guix since they seem to be designed behind “everything goes through the package manager”, which is super cool for making it so the environment is the same, but I am concerned about getting stuff to work if a package doesn’t exist or if the library is designed to use like ‘pip’ or ‘bun.sh’ or some built in package manager.
Any thoughts about this? any non popular distros that might fit my use case? did I give up on some distro too soon? am I just a confused newb?
I use Guix Home on my laptop (on top of Asahi Fedora Remix) and started trying to use Guix System on my server a while ago. Here’s some points I have:
just
command runner, I have a Justfile in the directory where I store my configuration.just update
runsguix time-machine
pointing to the channel.scm which pulls the repo’s updates then after the--
has the command that prints the channels with the specific commit to channel.scm.lock. For every other guix command, such as the reconfigure command, it usesguix time-machine
pointing to channel.scm.lock then the command I want after--
.guix import
feature can be helpful and works nicely with Rust, especially if the program you want is in crates.io in which you can put it in your packages repo very quickly.guix import
. The Node.js ecosystem is allergic to FOSS so it might not work very well with Guix (there are barely any Electron programs packaged outside of nonguix also).guix profile
andguix home
are confusingly different. One uses imperative install commands and the other uses a declarative configuration and they install into different directories, so if you remove a program from home but it’s still there it may still be installed in profile.guix home
and don’t need to be installed systemwide. It also provides powerful containerization/environment management tools to isolate installs efficiently.To address your points:
Fedora is way more up-to-date than Guix is. Also Guix is source-based so it may end up compiling stuff from source automatically. You can install Nix though if you need it which looks a lot more up-to-date.
You’ll be spending a lot of time configuring stuff with Guix as well. However the declarative style makes it a lot easier to track and maintain.
Libcamera broke pretty recently on my Guix install which broke a ton of programs although it might be fixed now. If that happens though you can revert to your previous configuration or pin the repo to an older version until it gets resolved. Normally packages are checked when they are updated though to ensure they don’t break stuff.
You’ll need to spend a lot of time learning stuff since there’s very few tutorials on the internet.
IDK if nonguix supports NVIDIA or not but it might be a problem.
You can still use other package managers, but you can’t use them to package the program specifically for Guix. You may have luck using
guix import
instead however. Also bun.sh is an example of a non-mainstream program that probably isn’t in the Guix repos.Yes, this is a big issue in corporate development. It seems like management is in a constant state of barreling headfirst into a “silver bullet that fixes everything” instead of doing things the hard way (which in the long term is almost always better.
I have not maintained any packages before but I am very interested in learning how, I shall look into this.
I vaguely remember this was the originally used in Hurd? if so that is cool.
This is very cool!
This seems quite useful thanks for that.
I have been wanting to set up upasfs this may be the push I need to finally get around to doing that.
It appears Guix may be a good choice in the future but not quite yet, I will try installing it as a package manager and/or try it in a VM to start out with. Thanks for the info!
The easiest way to learn this is to download the Guix source code and look in the gnu/packages directory to see how other programs are packaged and look at the official packaging guides/build system options/guix import options/guix refresh (updates package definitions)/contributor guides (if you want to set up the local Guix repo copy more correctly) in the documentation - gnu/packages also has certain files for running guix import in if a program you’re contributing needs dependencies that can be guix-imported. Simple things are easy to package, so are binaries if you’re just doing it for yourself and need something quickly (I think nonguix has a binary build system specifically for that as well), it’s programs that have a ton of libraries (especially with Python and Node.js) that are the problem since there’s no internet during the build process so running the project package manager won’t work.
Yes, Guix System works with Hurd as well although I don’t see any reason to use it since it’s in an incomplete state and there are more interesting OS projects being developed like RedoxOS or Genode.
Guix Home (and Guix System) has a services section in the documentation that has configuration options for certain things including email so I would suggest looking at that. (The Guix Home services also work on foreign distros.)
That’s the best approach to learning Guix IMO, especially using Guix Home. Once you have it fully set up on your current distro with Guix Home, you can copy your configuration to a Guix System install later on and replicate your current user setup really quickly. You can also return to your distro package manager quickly if you decide you don’t like it.
One other thing I forgot to mention is that Guix works weirdly with non-POSIX shells like fish and nushell so you might need to modify the configuration to automatically add the necessary environment variables or it will end up being stuck on an outdated Guix version randomly which will cause weird issues when you install/search packages or run guix pull.