Add garbage-collect for home-manager

This commit is contained in:
2026-03-13 07:51:57 +01:00
parent 977aa539a3
commit 54e0f94af5
4 changed files with 68 additions and 0 deletions

View File

@@ -35,6 +35,13 @@
# systemd.user.startServices = "sd-switch"; # TODO: what is this # systemd.user.startServices = "sd-switch"; # TODO: what is this
# Expire old hm generations
hm-expire = {
enable = true;
dates = "weekly";
expire = "-30 days";
};
programs = { programs = {
home-manager.enable = true; home-manager.enable = true;
git.enable = true; git.enable = true;

View File

@@ -39,6 +39,20 @@
"ca-derivations" "ca-derivations"
]; ];
# Expire old hm generations
hm-expire = {
enable = true;
dates = "weekly";
expire = "-30 days";
};
# Remove unused packets
services.nix-gc = {
enable = true;
automatic = true;
frequency = "weekly";
persistent = true;
};
# nix.settings. # warn-dirty = false; # TODO: do I want this # nix.settings. # warn-dirty = false; # TODO: do I want this
# #
# Ensure we can still build when missing-server is not accessible # Ensure we can still build when missing-server is not accessible

View File

@@ -5,4 +5,5 @@
colors = import ./colors.nix; colors = import ./colors.nix;
hostname = import ./hostname.nix; hostname = import ./hostname.nix;
non-nixos = import ./non-nixos.nix; non-nixos = import ./non-nixos.nix;
hm-expire = import ./hm-expire.nix;
} }

View File

@@ -0,0 +1,46 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.hm-expire;
in {
options.hm-expire = {
enable = lib.mkEnableOption "Whether to enable hm-expire";
dates = lib.mkOption {
type = lib.types.str;
default = "weekly";
};
expire = lib.mkOption {
type = lib.types.str;
default = "-30 days";
};
};
config = lib.mkIf cfg.enable {
# This creates a user-level systemd service
systemd.user.services.cleanup-home-manager = {
Unit = {
Description = "Cleanup old Home Manager generations";
};
Service = {
Type = "oneshot";
ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.home-manager}/bin/home-manager expire-generations \"${cfg.expire}\"'";
};
};
systemd.user.timers.cleanup-home-manager = {
Unit = {
Description = "Weekly cleanup of Home Manager generations";
};
Timer = {
OnCalendar = cfg.dates;
Persistent = true;
};
Install = {
WantedBy = ["timers.target"];
};
};
};
}