ephemeral
System state starts clean.
Before / is mounted, the initrd deletes the root subvolume and makes a new one from an empty, read-only snapshot. Whatever a program left outside the kept paths is gone by the next login.
NixOS · LUKS2 · btrfs · impermanence
Ephemeral Nix is an opinionated, declarative NixOS desktop. Its root filesystem is recreated empty at every boot; your home folder and the paths you declare are kept, on an encrypted disk, with careful security defaults.
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
Before / is mounted, the initrd deletes the root subvolume and makes a new one from an empty, read-only snapshot. 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. Your answers live in settings.json. Every feature is one module file, so the same release builds the same system.
hardened
Full-disk encryption, a closed firewall, outbound connections that need your approval, kernel hardening and sandboxed services. Each one is documented together with what it doesn't cover.
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" ];
};
}Keeping more is a module like this one, followed by ephemeral-update. ephemeral-doctor kept lists every kept path on a machine.
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.1.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.1.0 | 2026-11-13 | Patch release each Monday with the newest nixpkgs, after the boot tests pass |
| ephemeral-nixos | v3.7.6 | 2026-11-13 | Each Tuesday it moves to the newest config release once the install test passes; installs config v4.0.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.