What We Found Useful About NixOS
Curling IO used to run on Debian configured with Ansible. That setup worked. It installed packages, configured Caddy and the firewall, created systemd services, and prepared our blue-green deployment slots.
The problem was not that Ansible couldn't describe the server. The problem was
that a working, mutable server let us get away with an incomplete description.
Old files remained under /etc. Build tools had been installed through a
different path. Provider choices about disks and RAID lived outside the
playbook. A provisioning run could succeed because an earlier run had already
left the right thing behind.
NixOS is much less tolerant of these gaps. This strictness is occasionally annoying, but it is also the main benefit. It forces us to decide who owns a file, a service, a secret, a package, or a recovery input.
Moving from Ansible to NixOS taught us how much validation and cleanup the old approach had been missing. It exposed the difference between a server that continues to work and one we can recreate from declared inputs.
This is what we found useful while rebuilding an OVH bare-metal server from empty disks, restoring its state, and making the process safe enough to repeat.