{ config, inputs, lib, ... }: with lib; let cfg = config.nixfiles.modules.ark; in { imports = [ (mkAliasOptionModule [ "ark" ] [ "nixfiles" "modules" "ark" ]) inputs.impermanence.nixosModules.impermanence ]; options.nixfiles.modules.ark = let mkListOfAnythingOption = mkOption { type = with types; listOf anything; # Assumed to be matching with the upstream type. default = [ ]; }; in { enable = mkEnableOption "persistent storage support via impermanence"; path = mkOption { type = types.str; default = "/ark"; }; directories = mkListOfAnythingOption; files = mkListOfAnythingOption; # hm = { # directories = mkListOfAnythingOption; # files = mkListOfAnythingOption; # }; }; config = mkIf cfg.enable { environment.persistence.${cfg.path} = { hideMounts = true; enableDebugging = false; inherit (cfg) directories files; }; # NOTE We can't reliably[1] use this, so for the time being, this will stay # commented out. Probably forever. # # [1]: https://github.com/nix-community/impermanence/issues/18 # # hm = { # imports = [inputs.impermanence.nixosModules.home-manager.impermanence]; # home.persistence."${cfg.path}/${config.my.home}" = { # allowOther = false; # inherit (cfg.hm) directories files; # }; # }; }; }