{
  config,
  lib,
  namespace,
  ...
}:
{
  nix = {
    settings = {
      extra-sandbox-paths = [ config.programs.ccache.cacheDir ];
      substituters = [
        "https://cache.mjallen.dev/nas-cache"
        "https://nixos-apple-silicon.cachix.org"
        "https://nixos-raspberrypi.cachix.org"
        "https://nix-community.cachix.org"
        "https://cache.nixos.org/"
      ];
      trusted-public-keys = [
        "nas-cache:Y7PR+XTLr1bLIL85PKb9Tk9/BnE5HndTKvZYWVP1/48="
        "nixos-apple-silicon.cachix.org-1:8psDu5SA5dAD7qA0zMy5UT292TxeEPzIz8VVEr2Js20="
        "nixos-raspberrypi.cachix.org-1:4iMO9LXa8BqhU+Rpg6LQKiGa2lsNh/j2oiYLNOQ5sPI="
        "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
      ];
      warn-dirty = lib.mkForce false;
      experimental-features = lib.mkForce [
        "nix-command"
        "flakes"
      ];
      trusted-users = [ "@wheel" ];

      builders-use-substitutes = true;
      connect-timeout = lib.mkDefault 5;
      fallback = true;
      log-lines = lib.mkDefault 25;

      max-free = lib.mkDefault (3000 * 1024 * 1024);
      min-free = lib.mkDefault (512 * 1024 * 1024);
    };

    daemonCPUSchedPolicy = lib.mkDefault "idle";
    daemonIOSchedClass = lib.mkDefault "idle";
    daemonIOSchedPriority = lib.mkDefault 7;

    # Garbage collect automatically every week
    gc = {
      automatic = lib.mkDefault true;
      options = lib.mkDefault "--delete-older-than 30d";
    };

    optimise.automatic = lib.mkDefault true;
  };

  systemd.services.nix-gc.serviceConfig = {
    CPUSchedulingPolicy = "batch";
    IOSchedulingClass = "idle";
    IOSchedulingPriority = 7;
  };

  nixpkgs = {
    config = {
      cudaSupport = lib.mkDefault config.${namespace}.hardware.nvidia.enable;
      rocmSupport = lib.mkDefault config.${namespace}.hardware.amd.enable;
      allowUnsupportedSystem = true;
    };
  };
}
