Commit f0bd696
Changed files (2)
modules
core
impermanence
modules/core/impermanence/default.nix
@@ -38,16 +38,64 @@
];
};
- nixos = {lib, ...}: {
+ nixos = {
+ pkgs,
+ lib,
+ config,
+ ...
+ }: {
imports = [inputs.impermanence.nixosModules.impermanence];
- environment.persistence."/persist" = {
- enable = true;
- hideMounts = lib.mkDefault true;
+ options = {
+ users.users = lib.mkOption {
+ type = lib.types.attrsOf (lib.types.submodule ({name, ...}: {
+ options = {
+ persistence = let
+ userName = name;
+ outConfig = config;
+ in
+ lib.mkOption {
+ type = lib.types.attrsOf (lib.types.submodule ({
+ name,
+ config,
+ ...
+ }:
+ lib.modules.importApply "${inputs.impermanence}/submodule-options.nix" {
+ inherit pkgs lib name;
+ config = outConfig.environment.persistence.${name} // config;
+ usersOpts = true;
+ user = userName;
+ group = outConfig.users.users.${userName}.group;
+ homeDir = outConfig.users.users.${userName}.home;
+ }));
+ default = {};
+ };
+ };
+ }));
+ };
};
- environment.persistence."/cache" = {
- enable = true;
- hideMounts = lib.mkDefault true;
+
+ config = let
+ filterRemovedOptions = attrs:
+ (removeAttrs attrs ["home"])
+ // {directories = map (dir: removeAttrs dir ["method"]) attrs.directories;};
+ in {
+ environment.persistence.persist = {
+ enable = true;
+ persistentStoragePath = "/persist";
+ hideMounts = lib.mkDefault true;
+ users =
+ lib.mapAttrs (_: u: filterRemovedOptions (u.persistence.persist or {}))
+ (lib.filterAttrs (_: u: u.persistence ? persist) config.users.users);
+ };
+ environment.persistence.cache = {
+ enable = true;
+ persistentStoragePath = "/cache";
+ hideMounts = lib.mkDefault true;
+ users =
+ lib.mapAttrs (_: u: filterRemovedOptions (u.persistence.cache or {}))
+ (lib.filterAttrs (_: u: u.persistence ? cache) config.users.users);
+ };
};
};
};
modules/core/impermanence/quirks.nix
@@ -23,8 +23,16 @@
files = lib.unique (lib.concatMap (e: removeHomePrefixes (e.files or [])) entries);
};
in {
- home.persistence."/persist" = mergePersist persistHome;
- home.persistence."/cache" = mergePersist cacheHome;
+ home.persistence.persist =
+ (mergePersist persistHome)
+ // {
+ persistentStoragePath = "/persist";
+ };
+ home.persistence.cache =
+ (mergePersist cacheHome)
+ // {
+ persistentStoragePath = "/cache";
+ };
};
in {
den.quirks.persist.description = "Persistent directories/files collected from aspects (host)";
@@ -45,13 +53,13 @@ in {
files = lib.unique (lib.concatMap (e: e.files or []) entries);
};
in {
- environment.persistence."/persist" = mergePersist persist;
- environment.persistence."/cache" = mergePersist cache;
+ environment.persistence.persist = mergePersist persist;
+ environment.persistence.cache = mergePersist cache;
};
};
- den.aspects.core.impermanence.persist-user-collector = {user, ...}: {
- nixos = {
+ den.aspects.core.impermanence.persist-user-collector = {
+ user = {
persistUser,
cacheUser,
...
@@ -61,8 +69,8 @@ in {
files = lib.unique (lib.concatMap (e: e.files or []) entries);
};
in {
- environment.persistence."/persist".users.${user.userName} = mergePersist persistUser;
- environment.persistence."/cache".users.${user.userName} = mergePersist cacheUser;
+ persistence.persist = mergePersist persistUser;
+ persistence.cache = mergePersist cacheUser;
};
};