summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorMilan Svoboda <milan.svoboda@centrum.cz>2020-12-30 11:59:20 +0100
committertomberek <tomberek@users.noreply.github.com>2021-02-28 04:21:21 -0500
commitdf3d5609998e47a98138259816a0db774d901189 (patch)
tree5a8bd213426e45bce2fffcfc003506df9536f5c7 /nixos
parentf3ae13d608d05500e2d932a41ac859ca4ae4d618 (diff)
nixos/nix-gc: add persistent and randomizeDelaySec options
Diffstat (limited to 'nixos')
-rw-r--r--nixos/doc/manual/release-notes/rl-2105.xml7
-rw-r--r--nixos/modules/services/misc/nix-gc.nix53
2 files changed, 53 insertions, 7 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2105.xml b/nixos/doc/manual/release-notes/rl-2105.xml
index e03142d3d043..6a0eb13eac9c 100644
--- a/nixos/doc/manual/release-notes/rl-2105.xml
+++ b/nixos/doc/manual/release-notes/rl-2105.xml
@@ -738,6 +738,13 @@ self: super:
terminology has been deprecated and should be replaced with Far/Near in the configuration file.
</para>
</listitem>
+ <listitem>
+ <para>
+ The nix-gc service now accepts randomizedDelaySec (default: 0) and persistent (default: true) parameters.
+ By default nix-gc will now run immediately if it would have been triggered at least
+ once during the time when the timer was inactive.
+ </para>
+ </listitem>
</itemizedlist>
</section>
</section>
diff --git a/nixos/modules/services/misc/nix-gc.nix b/nixos/modules/services/misc/nix-gc.nix
index 12bed05757ad..a7a6a3b59644 100644
--- a/nixos/modules/services/misc/nix-gc.nix
+++ b/nixos/modules/services/misc/nix-gc.nix
@@ -21,13 +21,45 @@ in
};
dates = mkOption {
+ type = types.str;
default = "03:15";
+ example = "weekly";
+ description = ''
+ How often or when garbage collection is performed. For most desktop and server systems
+ a sufficient garbage collection is once a week.
+
+ The format is described in
+ <citerefentry><refentrytitle>systemd.time</refentrytitle>
+ <manvolnum>7</manvolnum></citerefentry>.
+ '';
+ };
+
+ randomizedDelaySec = mkOption {
+ default = "0";
type = types.str;
+ example = "45min";
description = ''
- Specification (in the format described by
+ Add a randomized delay before each automatic upgrade.
+ The delay will be chosen between zero and this value.
+ This value must be a time span in the format specified by
<citerefentry><refentrytitle>systemd.time</refentrytitle>
- <manvolnum>7</manvolnum></citerefentry>) of the time at
- which the garbage collector will run.
+ <manvolnum>7</manvolnum></citerefentry>
+ '';
+ };
+
+ persistent = mkOption {
+ default = true;
+ type = types.bool;
+ example = false;
+ description = ''
+ Takes a boolean argument. If true, the time when the service
+ unit was last triggered is stored on disk. When the timer is
+ activated, the service unit is triggered immediately if it
+ would have been triggered at least once during the time when
+ the timer was inactive. Such triggering is nonetheless
+ subject to the delay imposed by RandomizedDelaySec=. This is
+ useful to catch up on missed runs of the service when the
+ system was powered down.
'';
};
@@ -50,11 +82,18 @@ in
config = {
- systemd.services.nix-gc =
- { description = "Nix Garbage Collector";
- script = "exec ${config.nix.package.out}/bin/nix-collect-garbage ${cfg.options}";
- startAt = optional cfg.automatic cfg.dates;
+ systemd.services.nix-gc = {
+ description = "Nix Garbage Collector";
+ script = "exec ${config.nix.package.out}/bin/nix-collect-garbage ${cfg.options}";
+ startAt = optional cfg.automatic cfg.dates;
+ };
+
+ systemd.timers.nix-gc = lib.mkIf cfg.automatic {
+ timerConfig = {
+ RandomizedDelaySec = cfg.randomizedDelaySec;
+ Persistent = cfg.persistent;
};
+ };
};