Fully configurable desktop recommended?

New to NixOS. I configured my first GNOME desktop without too much trouble and was wondering if the idea is to have a fully configured desktop, or if I am taking this too far.

I learned Firefox’s settings and add-ons can be defined with the Firefox Extended Support Release (ESR) version for example (nice, although I would have preferred to use the normal FF version, not the ESR one). This isn’t a fully configured desktop yet, since I still have to configure the add-ons after installation (think uBlock custom block lists, for example).

It seems there will always be something that can not be configured by NixOS and needs manual setup. At which point I wonder if it’s a good idea to try to configure 80% when I still need to configure 20% “the old way”?

Am I trying to be too purist about the whole “build the full system from configuration” idea? Maybe desktops are just not there yet and NixOS’ power is on the server?

1 Like

You may find it helpful to think separately about the OS and your user config. NixOS is mostly about OS config; although it includes many bits for configuring users.

With nix, each user can manage their own installation of apps, separate from the apps globally installed for the OS. Adding and removing user apps does not require rebuilding the OS. Furthermore, temporarily loading an app (maybe just to try it) is quite easy with nix shell.

Many people here use Home Manager to manage some or all of a user’s config.

My approach has been to make the OS 100% configured – to the point that the root filesystem is recreated at every boot from the nixos configuration. Then my user home directory is attached as a bind-mount.


This is tricky, but in theory possible by writing to files in the firefox profile just right. Some add-ons even have support for doing this less hackily. Look around some people’s home-manager configs, I’ve at least seen uBlock configured declaratively once.

Personally, I love having everything as declarative as possible. Means I can spin things up on multiple machines easily, and can figure out what I’ve done too. I do end up with one or two declarative things still (currently flatpaks), but the fewer the easier using my system gets.

It can be a massive time sink, too, but hey, everyone needs a hobby.

1 Like