{ config, lib, osConfig, ... }: let cfg = config.impermanence; in { options.impermanence = { enable = lib.mkEnableOption "impermanence for home directory"; fallbackPersistence.enable = lib.mkOption { type = lib.types.bool; default = true; }; }; config = lib.mkMerge [ (lib.mkIf config.impermanence.enable { assertions = [ { assertion = osConfig.host.impermanence.enable; message = "impermanence can not be enabled for a user when it is not enabled for the system"; } ]; }) # If impermanence is not enabled for this user but system impermanence is enabled, # persist the entire home directory as fallback (lib.mkIf (osConfig.host.impermanence.enable && !cfg.enable && cfg.fallbackPersistence.enable) { home.persistence."/persist/home/${config.home.username}" = { directories = ["."]; allowOther = true; }; }) ]; }