{impermanence, ...}: { # Impermanence in NixOS is where the root directory isn't permanent, but gets # wiped every reboot (such as by mounting it as tmpfs). Such a setup is # possible because NixOS only needs /boot and /nix in order to boot, all # other system files are simply links to files in /nix. # The impermanence module bind-mounts persistent files and directories, # stored in /nix/persist, into the tmpfs root partition on startup. For # example: /nix/persist/etc/machine-id is mounted to /etc/machine-id. # https://github.com/nix-community/impermanence # https://nixos.wiki/wiki/Impermanence # https://elis.nu/blog/2020/05/nixos-tmpfs-as-root/ imports = [ impermanence.nixosModules.impermanence ]; # Each module will configure the paths they need persisted. Here we define # some general system paths that don't really fit anywhere else. environment.persistence."/nix/persist" = { hideMounts = true; directories = [ # The uid and gid maps for entities without a static id is saved in # /var/lib/nixos. Persist to ensure they aren't changed between reboots. { directory = "/var/lib/nixos"; user = "root"; group = "root"; mode = "0755"; } # Save the last run time of persistent timers so systemd knows if they were missed { directory = "/var/lib/systemd/timers"; user = "root"; group = "root"; mode = "0755"; } { directory = "/var/log"; user = "root"; group = "root"; mode = "0755"; } # /var/tmp is meant for temporary files that are preserved across # reboots. Some programs might store files too big for in-memory /tmp # there. Files older than 10 days are cleaned by systemd. { directory = "/var/tmp"; user = "root"; group = "root"; mode = "1777"; } ]; files = [ "/etc/machine-id" # needed for /var/log ]; users.caspervk = { directories = [ "/" # entire home directory (TODO?) ]; }; }; }