{ 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.str; default = [ "/etc/nixos" "/var/log" "/var/lib/systemd" ] ++ lib.optional config.networking.networkmanager.enable "/etc/NetworkManager" ++ lib.optional config.boot.lanzaboote.enable "/etc/secureboot" ++ lib.optional config.hardware.bluetooth.enable "/var/lib/bluetooth" ++ lib.optional config.virtualisation.waydroid.enable "/var/lib/waydroid" ++ lib.optional config.services.postgresql.enable "/var/lib/postgresql"; defaultText = lib.literalExpression '' [ "/etc/nixos" "/var/log" "/var/lib/systemd" ] ++ lib.optional config.networking.networkmanager.enable "/etc/NetworkManager" ++ lib.optional config.boot.lanzaboote.enable "/etc/secureboot" ++ lib.optional config.hardware.bluetooth.enable "/var/lib/bluetooth" ++ lib.optional config.virtualisation.waydroid.enable "/var/lib/waydroid" ++ lib.optional config.services.postgresql.enable "/var/lib/postgresql" ''; description = "The directories to persist"; }; }; config = lib.mkIf cfg.enable { # needed for the hm impermanence config programs.fuse.userAllowOther = true; environment.persistence = { "/srv" = { hideMounts = true; inherit (cfg) directories; files = [ "/etc/machine-id" ]; }; }; }; }