NixOS is surely what I’d recommend.
I like to tinker with an Arch Linux install using a VM to iterate quickly then translate almost ALL of the home dotfiles and preferences to deterministic nix code that absolutely LOCKS everything into place.
Some essential features/projects to incorporate into a decent nix config:
- nix flakes
- home-manager
- content-addressed and dynamic derivations (Eelco’s original paper writes about CA derivations as the holy grail)
- cachix (local cache) and community substituters
- forgejo (local forge with local CI to test nix flake updates for breakage and warm the local cache) I call it my “update canary”)
- nixos-anywhere/netboot/initrd boot scripting influenced by NixOS-anywhere but extended
- disko
- impermanance (lots of work up front declaring what persists between boots but this one is ESSENTIAL. This module makes it virtually impossible for a compromised package or virus to survive a reboot if things are done right.)
- sops-nix
- nixos-needs-reboot
- devenv/direnv












It’s really powerful.
As a proponent of better, faster, more foolproof, and more elegant, I’m often jealous of some of the features that our brothers in GUIX are building with the benefit of hindsight. Also, I will admit that it really feels like NixOS is doing the hard work exploring a paradigm (and its inherent rough edges) that will effectively obsolete FHS entirely in the Linux world someday.