diff --git a/modules/module-list.nix b/modules/module-list.nix index f80d4d6a5869..d793c715202e 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -54,6 +54,7 @@ ./services/misc/disnix.nix ./services/misc/gpsd.nix ./services/misc/nix-daemon.nix + ./services/misc/nix-gc.nix ./services/misc/nixos-manual.nix ./services/misc/rogue.nix ./services/misc/synergy.nix diff --git a/modules/services/misc/nix-gc.nix b/modules/services/misc/nix-gc.nix new file mode 100644 index 000000000000..942e7996da02 --- /dev/null +++ b/modules/services/misc/nix-gc.nix @@ -0,0 +1,54 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + nix = config.environment.nix; + cfg = config.nix.gc; +in + +{ + + ###### interface + + options = { + nix.gc = { + + automatic = mkOption { + default = false; + example = true; + description = " + Automatically run the garbage collector at specified dates. + "; + }; + + dates = mkOption { + default = "15 03 * * *"; + description = " + Run the garbage collector at specified dates to avoid full + hard-drives. + "; + }; + + options = mkOption { + default = ""; + example = "--max-freed $((64 * 1024**3))"; + description = " + Options given to nix-collect-garbage when the + garbage collector is run automatically. + "; + }; + + }; + }; + + + ###### implementation + + config = mkIf cfg.automatic { + services.cron.systemCronJobs = [ + "${cfg.dates} root ${nix}/bin/nix-collect-garbage ${cfg.options} > /var/log/gc.log 2>&1" + ]; + }; + +}