diff --git a/home-manager/common/services/clean-home-manager.nix b/home-manager/common/services/clean-home-manager.nix new file mode 100644 index 00000000..305971c4 --- /dev/null +++ b/home-manager/common/services/clean-home-manager.nix @@ -0,0 +1,26 @@ +{ pkgs, ... }: { + systemd.user.services.cleanup-generations = { + Unit = { + Description = "Cleanup old home-manager generations"; + }; + Service = { + Type = "oneshot"; + ExecStart = "${pkgs.writeShellScript "cleanup-generations" '' + home-manager generations | tail -n +6 | awk '{print $5}' | xargs -I {} home-manager remove-generations {} + ''}"; + }; + }; + + systemd.user.timers.cleanup-generations = { + Unit = { + Description = "Timer for cleaning up old home-manager generations"; + }; + Timer = { + OnCalendar = "weekly"; + Persistent = true; + }; + Install = { + WantedBy = [ "timers.target" ]; + }; + }; +} diff --git a/home-manager/default.nix b/home-manager/default.nix index f38ff7e9..5987e019 100644 --- a/home-manager/default.nix +++ b/home-manager/default.nix @@ -3,6 +3,9 @@ # Common configs ./common/software/cli + # Services + ./common/services/clean-home-manager.nix + # User configs ./users/${username} @@ -25,15 +28,6 @@ homeDirectory = "/home/${username}"; sessionPath = [ "$HOME/.local/bin" ]; }; - - # Clean up all but the most recent 5 home-manager configs - services.cron = { - enable = true; - crontab = '' - # Cleanup all but last 5 home-manager generations weekly on Sunday at midnight - 0 0 * * 0 home-manager generations | tail -n +6 | awk '{print $5}' | xargs -I {} home-manager remove-generations {} - ''; - }; nixpkgs = { overlays = [ diff --git a/home-manager/small.nix b/home-manager/small.nix index 597dc892..501b1976 100644 --- a/home-manager/small.nix +++ b/home-manager/small.nix @@ -1,7 +1,6 @@ { lib, inputs, hostname, username, desktop, hmStateVersion, ... }: { imports = [ # Common configs - # ./common/software/cli/bash.nix ./common/software/cli/fish.nix ./common/software/cli/git.nix ./common/software/cli/nixvim/base.nix @@ -13,6 +12,9 @@ ./common/software/cli/gpg.nix ./common/software/cli/zoxide.nix + # Services + ./common/services/clean-home-manager.nix + # User configs ./users/${username} @@ -35,16 +37,6 @@ homeDirectory = "/home/${username}"; sessionPath = [ "$HOME/.local/bin" ]; }; - - # Clean up all but the most recent 2 home-manager configs - services.cron = { - enable = true; - crontab = '' - # Cleanup all but last 5 home-manager generations weekly on Sunday at midnight - 0 0 * * 0 home-manager generations | tail -n +3 | awk '{print $5}' | xargs -I {} home-manager remove-generations {} - ''; - }; - nixpkgs = { overlays = [