{ pkgs, config, inputs, ... }:

let
  builder = {
    systems = [ "x86_64-linux" "i686-linux" ];
    speedFactor = 500;
    supportedFeatures = [ "benchmark" "nixos-test" ];
    sshKey = config.age.secrets.nixBuilderKey.path;
  };
  bigBuilder = builder // {
    speedFactor = 1000;
    supportedFeatures = builder.supportedFeatures ++ [ "kvm" "big-parallel" ];
  };
in {
  age.secrets.nixBuilderKey = {
    file = ../../secrets/builder_key.age;
    mode = "0400";
  };
  nixpkgs.overlays = [
    (self: super: {
      nixSuperUnstable = inputs.self.packages.x86_64-linux.nix-super-unstable;
    })
  ];
  nix = {
    package = pkgs.nixSuperUnstable;

    trustedUsers = [ "root" "@wheel" ];

    extraOptions = ''
      experimental-features = nix-command flakes ca-references
      warn-dirty = false
      builders-use-substitutes = true
      flake-registry = ${
        pkgs.writeText "null-registry.json" ''{"flakes":[],"version":2}''
      }
    '';

    binaryCaches = [ "https://cache.privatevoid.net" ];
    binaryCachePublicKeys = [ "cache.privatevoid.net:SErQ8bvNWANeAvtsOESUwVYr2VJynfuc9JRwlzTTkVg=" ];

    autoOptimiseStore = true;

    gc = {
      automatic = true;
      dates = "weekly";
      options = "--delete-older-than 30d";
    };

    distributedBuilds = true;

    buildMachines = [
      (bigBuilder // {
        sshUser = "root";
        hostName = "styx.services.private.void";
        speedFactor = 2000;
        maxJobs = 2;
      })
      (bigBuilder // {
        sshUser = "nix";
        hostName = "wired.titan.find.private.void";
        maxJobs = 12;
      })
      (bigBuilder // {
        sshUser = "nixbuilder";
        hostName = "animus.com";
        speedFactor = 3000;
        maxJobs = 4;
      })
    ];
  };
}