{ config, lib, pkgs, ... }: with lib; let cfg = config.sydnix.impermanence; in { options = { sydnix.impermanence = { enable = mkOption { description = "Enable Impermanence"; type = types.bool; default = false; }; directories = mkOption { description = ""; type = with types; listOf (coercedTo str (d: { directory = d; }) userDir); default = []; }; files = mkOption { description = ""; type = with types; listOf (coercedTo str (f: { file = f; }) userFile); default = []; }; }; }; config = mkIf cfg.enable { systemd.services.erase-home-darlings = let service = { description = "Rollback home to a blank state on boot"; wantedBy = [ "multi-user.target" ]; after = [ "home.mount" ]; path = [ pkgs.zfs pkgs.babashka ]; # unitConfig.DefaultDependencies = "no"; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStart = let script = ./erase-home-darlings.clj; in ''${pkgs.babashka}/bin/bb "${script}" 3''; }; stopIfChanged = false; restartIfChanged = false; }; in if config.boot.initrd.systemd.enable then service else throw "sydnix.impermanence currently requires config.boot.initrd.systemd.enable'!"; }; }