I give up on NixOS…except for servers.
I have tried NixOS on 3 different machines in the past few months. 1 secondary server without GUI, and 2 other laptops with GNOME and/or XFCE. I will still keep running NixOS on my secondary server, but have given up running NixOS on a desktop. I’ll stick to rpm-ostree and Flatpaks.
Declarative Config is the Ideal
I really love the concept of declarative configs. The idea that I can set every option in a text file (.nix file) and take it with me to rebuild my system sounds like a dream. The reality though is not as nice as the dream.
It’s easy to make a basic configuration.nix that defines what programs you want installed, define the users on the system, and even define the SSH keys for computers that can connect to your system. I really love how I can strip down a base GNOME install and uninstall annoying apps like Tour and GNOME Connections.
This settings I really want to define are the tiny little details in GNOME but those are difficult define in configuration.nix. I want to define my keyboard shortcuts, my Gnome Tweak settings, set my system to dark mode, and define passwords for my Nextcloud client. These are done with dconf settings it seems from what I have read but they aren’t easy to define or find information about. It seems that a lot of these are locked into home-manager as well. That’s another thing to learn which really makes the new user experience overwhelming.
Flatpaks are so Clunky
I mostly use Flatpaks but they aren’t well integrated with NixOS. Why can’t we define a list of Flatpaks to install like we can system packages? I was having a major issue getting Chinese fonts to work in Flatpak. It seems to be a long term issue that hasn’t been fixed since 2021 when this issue was posted. There seem to be some hacks and work arounds, but if I wanted jank like that, I’d just run vanilla Debian.
If I have the choice between trying to install apps by reading the NixOS Wiki, or just installing a Flatpak, I’d pick a Flatpak everytime. For new users, the learning curve of NixOS becomes hard to justify when it’s so easy to just grab a Flatpak and you get a lot of the benefits of Nix.
How to Make NixOS Better for Newbies on the Desktop
The documentation is of varying quality. You really have to hunt around, read forum posts, and generally do some trial-and-error to get things working. I probably did sudo nixos-rebuild switch about 30 times in 3 days to try and troubleshoot my CJK Flatpak problem. When you build it and it works, it’s great but there is a lot of disapointment and fiddling to get it to work.
Opinionated & Super Detailed Default Starter Configs
- Have a default
configuration.nixfile for GNOME and Plasma. It should be filled to the brim with lots of options defined. Even if a lot of the extra options are commented out. It should have inline comments that explain each part of the - Ask new users in NixOS GUI what type of user are they: a developer? an illustrator? a streamer? Have custom configuration files for each type of user with good defaults. Enable Tailscale and SSH for developers. Install Krita and GIMP for illustrators. Install OBS for streamers.
Better Documentation
- I spent the past 3 days trawling Google to fix my Flatpak CJK problem. It was exhausting. It was exasperating. And it really ticked me off and made me feel like I was useless at computering.
- What is the difference between NixOS Manual and NixOS Wiki? Shouldn’t there be one ‘source of truth’?
NixOS is Built for Servers
For my server, I think NixOS is a great fit! NixOS seems like a good base instead of Debian for a mainly Docker machine. I am experimenting with it right now.
- Clear division between the operating system and apps.
- Can ‘boot’ into a new system without rebooting, unlike
rpm-ostreetype systems - Can declare options like Wifi SSID/passwords, and authorized SSH keys
- Can create a nix configuration that could be used to create multiple servers that could be configured exactly the same.
Things I don’t like in NixOS on the server:
- No native handling of docker-compose files. There are workarounds like compose2nix but it’s a lot of friction to use it.
- Tailscale version is really, really old. NixOS is using 1.58.2 but my other Fedora Bazzite system is on 1.68.1. I’m not sure why this is the case. (EDIT: It was pointed out to me on Mastodon that I didn’t upgrade and get the newest packages. If packages seem too old do this ->
sudo nixos-build switch --upgrade)
NixOS Has Potential
It feels like it has lots of the pieces in place to become great for the desktop but they really, really, really need to improve the experience for new users and get that documentation much, much better.
I’ll continue to use it on the server and an old laptop to learn more about it. (I use it on my super old laptop because it only has 4 GB of RAM, so I run NixOS XFCE on it.)
Follow Up to Comments on Mastodon
I always get comments when I post about NixOS and they are always super helpful. People offer to help me and debug my setup. There are some really cool people who use Nix, so if you’re interested in trying out NixOS, give it a shot. There are lots of people willing to pitch in and help you understand, but it will require dedication on your part, too.