{ config, lib, ... }: let cfg = config.soispha.impermanence; in { options.soispha.impermanence = { enable = lib.mkEnableOption "persisting directories and files with impermanence"; directories = lib.mkOption { type = lib.types.listOf (lib.types.either lib.types.str (lib.types.submodule { options = { directory = lib.mkOption { type = lib.types.str; }; mode = lib.mkOption { type = lib.types.str; }; }; })); description = "The directories to persist"; }; }; config = lib.mkIf cfg.enable { environment.persistence = { "/srv" = { hideMounts = true; inherit (cfg) directories; users.soispha = { directories = [ # TODO: These should all be moved to their respective modules <2024-12-08> ".local/share" ".local/state/nvim" ".local/state/mpv" ".local/state/wireplumber" ".config/Signal" ".config/Element" ".config/iamb/profiles" ".cache" ".mozilla" "media" "repos" "school" ]; }; files = [ "/etc/machine-id" ]; }; }; }; }