I teach at a high school in Italy, and manage a few computer labs with about 30 PCs each.
Our PCs can’t access the Internet until someone logs into the school network, which made installing and updating them a pain. Two years ago I switched the labs to NixOS and started building tools to deal with it. That’s how Nixorium started.
Now only one machine (the controller) needs Internet. It builds and signs the systems, serves them from a local Harmonia cache, and installs clients over PXE or USB + SSH. Updates happen over SSH, and student homes reset at every boot, with Btrfs snapshots kept for recovery.
Each lab is a private repo using lib.mkLab, and there’s a Go TUI so colleagues can manage things without knowing Nix.
It’s still a one-person project, GNOME-only, and release testing is done in VMs, so other hardware may surface things my labs didn’t. A substantial part of the code was written with coding agents and reviewed by me. The core is MIT and fully usable without the optional paid Assistant.
Yes, I considered using impermanence, and I believe it could have been a valid approach.
However, for this lab, I preferred to keep the system simpler to manage and maintain. Currently, student home directories are restored to a clean state, and snapshots are available for recovery. This already prevents unnecessary files from building up on lab computers, without introducing the additional complexity of a fully ephemeral system that only preserves selected data.