I want to split configuration of my desktop PC into multiple modules but I was not able to come up with a consistent system that makes sense. It is a hard problem.
I am not particularly convinced system.nix
× packages.nix
dichotomy is a good idea since the line between user space and system is bit blurry. For example, does services.xserver.desktopManager.gnome.enable = true;
go to system? What about environment.systemPackages = [pkgs.gnomeExtensions.dash-to-dock];
? And most software is distributed as a package, yet sometimes it needs to be installed using a module – like programs.wireshark.enable = true;
which also creates the necessary user group.
The cleanest I have seen were concern-based categories (e.g. desktop-environment.nix
, development-tools.nix
…), rather than grouping by type (e.g. services.nix
, programs.nix
…).
It is a bit easier on servers, since there I can split the configuration hierarchically based on domain name. Although some services like nginx are still stuck in top-level configuration.nix
.
Related discussions
Other templates
- Nixos configuration template recommends https://github.com/divnix/digga/tree/main/examples/devos and ~misterio/nix-config - My pretty nice NixOS/home-manager configuration - sourcehut git
- DevOS: template repo for NixOS configurations using flakes!