# Ephemeral root configuration { config, inputs, lib, ... }: let cfg = config.my.system.persist; in { imports = [ inputs.impermanence.nixosModules.impermanence ]; options.my.system.persist = with lib; { enable = mkEnableOption "stateless system configuration"; mountPoint = lib.mkOption { type = types.str; default = "/persistent"; example = "/etc/nix/persist"; description = '' Which mount point should be used to persist this system's files and directories. ''; }; files = lib.mkOption { type = with types; listOf str; default = [ ]; example = [ "/etc/nix/id_rsa" ]; description = '' Additional files in the root to link to persistent storage. ''; }; directories = lib.mkOption { type = with types; listOf str; default = [ ]; example = [ "/var/lib/libvirt" ]; description = '' Additional directories in the root to link to persistent storage. ''; }; }; config = lib.mkIf cfg.enable { environment.persistence."${cfg.mountPoint}" = { files = [ "/etc/machine-id" ] ++ cfg.files ; directories = [ "/etc/nixos" "/var/log" "/var/lib/systemd/coredump" ] ++ (lib.optionals config.virtualisation.docker.enable [ "/var/lib/docker" ]) # FIXME: podman ++ cfg.directories ; }; }; }