ephemeral
System state starts clean.
/ is recreated from an empty snapshot on every boot. Whatever a program left outside the kept paths is gone by the next login.
NixOS · LUKS2 · btrfs · impermanence
Ephemeral Nix installs an opinionated NixOS desktop on an encrypted btrfs disk and wipes the root filesystem on every boot. Your home folder and a short list of declared paths live on /persist; everything else comes back from the config.
x86_64 · UEFI · erases the whole disk · read first
sudo touch /ephemeral-test # outside what’s keptecho hello > ~/notes.txt # in /home, keptsystemctl rebootreboot · / is recreated from root-blankls /ephemeral-testls: cannot access '/ephemeral-test': No such file or directorycat ~/notes.txthello/ is gone after a reboot; one in your home folder is still there. From the installer's README.
01Principles
ephemeral
/ is recreated from an empty snapshot on every boot. Whatever a program left outside the kept paths is gone by the next login.
declarative
A short flake.nix pins a tested release of the config, and settings.json holds your answers. The lock file pins everything else, so the same release builds the same system. Each feature is one module file.
hardened
Full-disk encryption, a closed firewall, OpenSnitch asking before programs connect out (on the full profile), kernel hardening and sandboxed services, without turning the desktop into a chore. The security page lists what each one doesn't cover, too.
02How it works
systemd-boot loads the kernel from /boot. You type the passphrase and the LUKS2 volume opens.
The rollback unit deletes the root subvolume and snapshots root-blank in its place.
/nix, /persist and /var/log are mounted, and kept paths are bound from /persist into place.
root-reset-check confirms the reset happened on this boot. If it didn't, ephemeral-doctor says so and how to fix it.
03Persistence
Your files are kept. What's wiped is everything else on /: the state programs scatter across /etc and /var that nobody asked to keep.
Gone at every boot
/ outside the kept list/etc/var/lib nobody declared/tmp, which is a tmpfsKept on /persist
/home, all of it{
flake.modules.nixos.pc.environment.persistence."/persist" = {
directories = [ "/var/lib/postgresql" ];
files = [ "/etc/machine-info" ];
};
}To keep something else, add a module like this one and run ephemeral-update. ephemeral-doctor kept lists everything a machine keeps.
04Security
wheel only/boot is not encrypted05Configuration
ephemeral-nixos is the installer and nothing else. ephemeral-nixos-config holds every module a machine gets, organized with the dendritic pattern: each file is one feature, loaded automatically, adding to a few shared modules.
Your machine's flake in /persist/etc/nixos is four lines. It pins a release; nothing builds from a branch.
{
inputs.ephemeral.url = "github:the-wittch/ephemeral-nixos-config/v4.2.0";
outputs = inputs: inputs.ephemeral.lib.mkFlake { inherit inputs; root = ./.; };
}06Installation
SHA256SUMS and its attestation.07Documentation
08Status
| Repository | Latest | Released | Cadence |
|---|---|---|---|
| ephemeral-nixos-config | v4.2.0 | 2026-11-13 | Patch release each Monday with the newest nixpkgs, after the boot tests pass |
| ephemeral-nixos | v3.7.7 | 2026-11-13 | Each Tuesday it moves to the newest config release once the install test passes; installs config v4.2.0 |
Tracks nixos-unstable, and moves to the stable 26.11 channel once it's released. Releases are immutable. See the changelog and the roadmap.