From 6a870ca0ff03a1a80a5fa74c8f2f3b30b67924fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey?= Date: Sat, 7 Mar 2026 08:28:44 -0800 Subject: [PATCH 1/3] feat(base): add nix store garbage collection and boot entry limits Configure automatic weekly GC across all platforms with --delete-older-than 30d. Limits systemd-boot entries to 10 on NixOS. Co-Authored-By: Claude Opus 4.6 --- modules/base/default.nix | 1 + modules/base/gc.nix | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 modules/base/gc.nix diff --git a/modules/base/default.nix b/modules/base/default.nix index 60554aed..10462a0b 100644 --- a/modules/base/default.nix +++ b/modules/base/default.nix @@ -1,6 +1,7 @@ # Base configuration shared across all systems { imports = [ + ./gc.nix ./nix-config.nix ./unfree-packages.nix ]; diff --git a/modules/base/gc.nix b/modules/base/gc.nix new file mode 100644 index 00000000..d883f1b1 --- /dev/null +++ b/modules/base/gc.nix @@ -0,0 +1,20 @@ +# Nix store garbage collection and boot entry limits +{ + lib, + pkgs, + ... +}: { + nix.gc = + { + automatic = true; + options = "--delete-older-than 30d"; + } + // lib.optionalAttrs pkgs.stdenv.isLinux { + dates = "weekly"; + } + // lib.optionalAttrs pkgs.stdenv.isDarwin { + interval = {Weekday = 0;}; + }; + + boot.loader.systemd-boot.configurationLimit = lib.mkIf pkgs.stdenv.isLinux 10; +} From 6fcc7c94861ad1b7d0de28bd51af6d8a0c93b406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey=20=28they/them=29?= Date: Sat, 7 Mar 2026 08:37:09 -0800 Subject: [PATCH 2/3] fix(base): use optionalAttrs for boot config to fix darwin builds mkIf only guards the value, not the option definition, so the boot option was still being defined on darwin where it doesn't exist. Co-Authored-By: Claude Opus 4.6 --- modules/base/gc.nix | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/base/gc.nix b/modules/base/gc.nix index d883f1b1..8e8bbcbf 100644 --- a/modules/base/gc.nix +++ b/modules/base/gc.nix @@ -3,7 +3,8 @@ lib, pkgs, ... -}: { +}: +{ nix.gc = { automatic = true; @@ -15,6 +16,7 @@ // lib.optionalAttrs pkgs.stdenv.isDarwin { interval = {Weekday = 0;}; }; - - boot.loader.systemd-boot.configurationLimit = lib.mkIf pkgs.stdenv.isLinux 10; +} +// lib.optionalAttrs pkgs.stdenv.isLinux { + boot.loader.systemd-boot.configurationLimit = 10; } From ad2bd7bcadb34e16c138174b361d8ef6e34abd49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey=20=28they/them=29?= Date: Sat, 7 Mar 2026 08:41:25 -0800 Subject: [PATCH 3/3] fix(base): move boot config to nixos module to fix infinite recursion Using pkgs at the module top level (via //) forces eager evaluation during module structure resolution, causing infinite recursion. Move boot.loader config to a NixOS-specific module where it belongs. Co-Authored-By: Claude Opus 4.6 --- modules/base/gc.nix | 8 ++------ modules/nixos/boot.nix | 4 ++++ modules/nixos/default.nix | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 modules/nixos/boot.nix diff --git a/modules/base/gc.nix b/modules/base/gc.nix index 8e8bbcbf..96c1fe9f 100644 --- a/modules/base/gc.nix +++ b/modules/base/gc.nix @@ -1,10 +1,9 @@ -# Nix store garbage collection and boot entry limits +# Nix store garbage collection { lib, pkgs, ... -}: -{ +}: { nix.gc = { automatic = true; @@ -17,6 +16,3 @@ interval = {Weekday = 0;}; }; } -// lib.optionalAttrs pkgs.stdenv.isLinux { - boot.loader.systemd-boot.configurationLimit = 10; -} diff --git a/modules/nixos/boot.nix b/modules/nixos/boot.nix new file mode 100644 index 00000000..7a3fb95a --- /dev/null +++ b/modules/nixos/boot.nix @@ -0,0 +1,4 @@ +# Limit boot entries to prevent /boot from filling up +{ + boot.loader.systemd-boot.configurationLimit = 10; +} diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 6486c9c3..4dd83c1a 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -3,6 +3,7 @@ imports = [ ./llm ./web + ./boot.nix ./filebrowser-quantum.nix ./restic-backup.nix ./users.nix