diff --git a/flake.nix b/flake.nix
index 339c0d4..76b531a 100644
--- a/flake.nix
+++ b/flake.nix
@@ -144,6 +144,7 @@
         flake.darwinModules = {
           common = ./modules/darwin/common;
 
+          builder = ./modules/darwin/builder.nix;
           hercules-ci = ./modules/darwin/hercules-ci;
           remote-builder = ./modules/darwin/remote-builder.nix;
         };
@@ -151,6 +152,7 @@
         flake.nixosModules = {
           common = ./modules/nixos/common;
 
+          builder = ./modules/nixos/builder.nix;
           cachix-deploy = ./modules/nixos/cachix-deploy;
           community-builder = ./modules/nixos/community-builder;
           github-org-backup = ./modules/nixos/github-org-backup.nix;
diff --git a/hosts/build01/configuration.nix b/hosts/build01/configuration.nix
index 4f662dd..2763b70 100644
--- a/hosts/build01/configuration.nix
+++ b/hosts/build01/configuration.nix
@@ -13,6 +13,7 @@
   imports = [
     inputs.srvos.nixosModules.hardware-hetzner-online-amd
     inputs.self.nixosModules.common
+    inputs.self.nixosModules.builder
     inputs.self.nixosModules.zfs
     inputs.self.nixosModules.community-builder
   ];
diff --git a/hosts/build02/configuration.nix b/hosts/build02/configuration.nix
index d2e6c68..bf5b20e 100644
--- a/hosts/build02/configuration.nix
+++ b/hosts/build02/configuration.nix
@@ -7,6 +7,7 @@
     ./nixpkgs-update.nix
     ./nixpkgs-update-backup.nix
     inputs.self.nixosModules.common
+    inputs.self.nixosModules.builder
     inputs.self.nixosModules.hercules-ci
     inputs.self.nixosModules.zfs
   ];
diff --git a/hosts/build03/configuration.nix b/hosts/build03/configuration.nix
index 87e5acd..b3f444d 100644
--- a/hosts/build03/configuration.nix
+++ b/hosts/build03/configuration.nix
@@ -13,6 +13,7 @@
     inputs.srvos.nixosModules.mixins-nginx
     inputs.srvos.nixosModules.hardware-hetzner-online-amd
     inputs.self.nixosModules.common
+    inputs.self.nixosModules.builder
     inputs.self.nixosModules.hercules-ci
     inputs.self.nixosModules.watch-store
     inputs.self.nixosModules.zfs
diff --git a/hosts/build04/configuration.nix b/hosts/build04/configuration.nix
index c573e94..3391cd2 100644
--- a/hosts/build04/configuration.nix
+++ b/hosts/build04/configuration.nix
@@ -4,6 +4,7 @@
     inputs.disko.nixosModules.disko
     ./hardware-configuration.nix
     inputs.self.nixosModules.common
+    inputs.self.nixosModules.builder
     inputs.self.nixosModules.hercules-ci
     inputs.self.nixosModules.remote-builder
   ];
diff --git a/hosts/darwin02/configuration.nix b/hosts/darwin02/configuration.nix
index 7f0fc58..447dda0 100644
--- a/hosts/darwin02/configuration.nix
+++ b/hosts/darwin02/configuration.nix
@@ -3,6 +3,7 @@
 {
   imports = [
     inputs.self.darwinModules.common
+    inputs.self.darwinModules.builder
     inputs.self.darwinModules.hercules-ci
     inputs.self.darwinModules.remote-builder
   ];
diff --git a/hosts/darwin03/configuration.nix b/hosts/darwin03/configuration.nix
index 2a82ab8..d303b67 100644
--- a/hosts/darwin03/configuration.nix
+++ b/hosts/darwin03/configuration.nix
@@ -3,6 +3,7 @@
 {
   imports = [
     inputs.self.darwinModules.common
+    inputs.self.darwinModules.builder
     inputs.self.darwinModules.hercules-ci
     inputs.self.darwinModules.remote-builder
   ];
diff --git a/modules/darwin/builder.nix b/modules/darwin/builder.nix
new file mode 100644
index 0000000..8a531c8
--- /dev/null
+++ b/modules/darwin/builder.nix
@@ -0,0 +1,7 @@
+{
+  imports = [
+    ../shared/builder.nix
+  ];
+
+  nix.gc.interval = { Minute = 15; };
+}
diff --git a/modules/nixos/builder.nix b/modules/nixos/builder.nix
new file mode 100644
index 0000000..d509dfa
--- /dev/null
+++ b/modules/nixos/builder.nix
@@ -0,0 +1,7 @@
+{
+  imports = [
+    ../shared/builder.nix
+  ];
+
+  nix.gc.dates = "hourly";
+}
diff --git a/modules/shared/builder.nix b/modules/shared/builder.nix
new file mode 100644
index 0000000..0eec9d7
--- /dev/null
+++ b/modules/shared/builder.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }:
+let
+  asGB = size: toString (size * 1024 * 1024 * 1024);
+in
+{
+  nix.gc.options = ''
+    --max-freed "$((${asGB 50} * 1024**3 - 1024 * $(df -P -k /nix/store | tail -n 1 | ${pkgs.gawk}/bin/awk '{ print $4 }')))"
+  '';
+}
diff --git a/modules/shared/nix-daemon.nix b/modules/shared/nix-daemon.nix
index 5e16bee..9eaf009 100644
--- a/modules/shared/nix-daemon.nix
+++ b/modules/shared/nix-daemon.nix
@@ -25,6 +25,6 @@ in
     nixPath = pkgs.lib.mkForce [ "nixpkgs=${pkgs.path}" ];
 
     gc.automatic = true;
-    gc.options = "--delete-older-than 14d";
+    gc.options = pkgs.lib.mkDefault "--delete-older-than 14d";
   };
 }