{ lib, namespace, ... }: with lib; let inherit (lib.mjallen) mkOpt; in { options.${namespace}.impermanence = { enable = mkEnableOption "enable impermanence"; persistencePath = mkOption { type = types.str; default = "/nix/persist/system"; description = "Path to the persistence directory"; }; # extraDirectories = mkOpt (types.listOf types.path) [ ] "Extra directory paths to add to impermanence"; extraDirectories = mkOpt (types.listOf (types.either types.str (types.submodule { options = { directory = mkOption { type = types.str; description = "Directory path"; }; user = mkOption { type = types.str; default = "root"; description = "Directory owner"; }; group = mkOption { type = types.str; default = "root"; description = "Directory group"; }; mode = mkOption { type = types.str; default = "u=rwx,g=rx,o="; description = "Directory permissions"; }; }; }))) [ ] "Extra directory paths to add to impermanence"; extraFiles = mkOpt (types.listOf types.path) [ ] "Extra file paths to add to impermanence"; }; }