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).
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
'';
systemd.timers.profile-gc-log-active = {
wantedBy = [ "timers.target" ];
- timerConfig.OnUnitActiveSec = "1 hour";
+ timerConfig.OnUnitActiveSec = cfg.activeMeasurementGranularity;
};
systemd.services.profile-gc-log-active = {
description =