{ config, pkgs, ... }: { # Delete all system generations except the 7 most recent ones. # Then delete all unreachable store objects. # # Based on https://github.com/NixOS/nixpkgs/blob/nixos-23.11/nixos/modules/services/misc/nix-gc.nix # Alternative: Delete generations older than 7 days and then delete unreachable store objects # https://nixos.wiki/wiki/Storage_optimization#Automation #nix.gc = { # automatic = true; # dates = "weekly"; # options = "--delete-older-than 7d"; #}; assertions = [{ assertion = config.nix.enable; message = ''nix-gc-7 requires nix.enable''; }]; systemd.timers."nix-gc-7" = { wantedBy = [ "timers.target" ]; partOf = [ "nix-gc-7.service" ]; timerConfig = { OnCalendar = "weekly"; Persistent = true; AccuracySec = "2d"; RandomizedDelaySec = "1d"; }; }; # View generated systemd service config with: # cat "$(systemctl show -P FragmentPath nix-gc-7.service)" | grep ExecStart systemd.services."nix-gc-7" = { description = "rm old system generations and unreachable store objects"; conflicts = [ "shutdown.target" "sleep.target" ]; before = [ "shutdown.target" "sleep.target" ]; serviceConfig = { Type = "oneshot"; PrivateTmp = true; Nice = 19; IOSchedulingClass = "idle"; }; script = '' ${config.nix.package.out}/bin/nix-env --delete-generations +7 --profile /nix/var/nix/profiles/system ${config.nix.package.out}/bin/nix-collect-garbage ''; }; }