X-Git-Url: http://git.scottworley.com/nix-profile-gc/blobdiff_plain/10533fbd6bdf5046f36e41c7848dbc6a324eb4cd..646f1750db86c674874f2b1ba75d5c949c14d5ab:/modules/profile-gc.nix diff --git a/modules/profile-gc.nix b/modules/profile-gc.nix index 8e69301..1452e8f 100644 --- a/modules/profile-gc.nix +++ b/modules/profile-gc.nix @@ -14,7 +14,7 @@ in { dryRun = lib.mkOption { description = "Say what would have been deleted rather than actually deleting profiles"; type = lib.types.bool; - default = true; + default = false; }; keepLast = lib.mkOption { description = '' @@ -49,16 +49,23 @@ in { awhile (so keepLatest won't protect them) generates a bunch of broken profiles (so keepLast won't protect them) while trying to get up to date. - This is approximate and has a useful granularity of an hour - (config.systemd.timers.profile-gc-log-active.timerConfig.OnUnitActiveSec). - Do not set less than this. + This threshold is approximate, see activeMeasurementGranularity. + Do not set less than activeMeasurementGranularity! ''; - # We admonish the user "Do not set less than this." and check it at runtime rather - # than verifying this with an assertion now because parsing these durations at - # configuration-time requires import-from-derivation, which we want to avoid. :( + # We admonish the user "Do not set less than activeMeasurementGranularity!" and check + # it at runtime rather than verifying this with an assertion at evaluation time because + # parsing these durations at evaluation-time requires import-from-derivation, which we + # want to avoid. :( type = lib.types.str; default = "5 days"; }; + activeMeasurementGranularity = lib.mkOption { + description = '' + How often to make a note of the currently-active profiles. This is the useful + granularity and minimum value of activeThreshold. + ''; + default = "1 hour"; + }; keepLatest = lib.mkOption { description = '' Keep all profiles younger than this duration (systemd.time format). @@ -98,7 +105,7 @@ in { fi alive_threshold="$(< ${parse-duration cfg.activeThreshold})" - alive_loginterval="$(< ${parse-duration config.systemd.timers.profile-gc-log-active.timerConfig.OnUnitActiveSec})" + alive_loginterval="$(< ${parse-duration cfg.activeMeasurementGranularity})" if (( alive_threshold < alive_loginterval ));then echo "Liveness threshold is too low. Not doing any profile garbage collection." >&2 exit 0 @@ -161,11 +168,11 @@ in { echo "Keeeping current profile $p" >&2 continue fi - if [[ "''${active_targets[$(${pkgs.coreutils}/bin/readlink "$p")]}" ]];then + if [[ "''${active_targets[$(${pkgs.coreutils}/bin/readlink "$p")]:-}" ]];then echo "Keeeping active system/boot profile $p" >&2 continue fi - if [[ "''${active[$p]}" ]];then + if [[ "''${active[$p]:-}" ]];then echo "Keeeping active profile $p" >&2 continue fi @@ -190,7 +197,8 @@ in { ''; systemd.timers.profile-gc-log-active = { wantedBy = [ "timers.target" ]; - timerConfig.OnUnitActiveSec = "1 hour"; + timerConfig.OnActiveSec = cfg.activeMeasurementGranularity; + timerConfig.OnUnitActiveSec = cfg.activeMeasurementGranularity; }; systemd.services.profile-gc-log-active = { description =