{ lib, config, ... }: let inherit (lib) mkEnableOption mkIf mkOption types ; cfg = config.impermanence; in { imports = []; options.impermanence = { enable = mkEnableOption "impermanence"; storagePath = mkOption { type = types.path; default = "/persist"; description = "The path where persistent data is stored"; }; name = mkOption { type = types.str; default = "persist"; description = "the name of the persistent data store"; }; }; config = mkIf cfg.enable { environment.persistence.${cfg.name} = { persistentStoragePath = cfg.storagePath; directories = [ "/var/log" "/var/lib/nixos" ]; files = [ "/etc/ssh/ssh_host_ed25519_key" "/etc/ssh/ssh_host_ed25519_key.pub" "/etc/ssh/ssh_host_rsa_key" "/etc/ssh/ssh_host_rsa_key.pub" ]; }; environment.etc.machine-id.source = "${cfg.storagePath}/machine-id"; }; }