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

with lib;
let
  cfg = config.my.nix;
in
{
  options.my.nix = {
    gc = {
      enable = mkEnableOption "nix-gc";
      minimumFreedGB = mkOption {
        default = 32;
        type = types.int;
        apply = number: toString (number * 1024 * 1024 * 1024);
      };
    };
    optimise.enable = mkEnableOption "nix-optimise";
  };

  config.nix = {
    gc = {
      automatic = cfg.gc.enable;
      options = "--max-freed ${cfg.gc.minimumFreedGB} --delete-older-than 14d";
      dates = "weekly";
    };

    optimise = {
      automatic = cfg.optimise.enable;
      dates = [ "weekly" ];
    };

    registry = {
      master-upstream.to = {
        type = "github";
        owner = "nixos";
        repo = "nixpkgs";
      };
      master.flake = inputs.master;
      nixpkgs.flake = inputs.nixpkgs;
      stable.flake = inputs.stable;
    };

    settings = {
      substituters = [
        "https://cache.nixos.org/"
        "https://jupyterwith.cachix.org"
        "https://nix-community.cachix.org"
        "https://pre-commit-hooks.cachix.org"
        "https://hyprland.cachix.org"
      ];
      trusted-public-keys = [
        "jupyterwith.cachix.org-1:/kDy2B6YEhXGJuNguG1qyqIodMyO4w8KwWH4/vAc7CI="
        "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
        "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
        "pre-commit-hooks.cachix.org-1:Pkk3Panw5AW24TOv6kz3PvLhlH8puAsJTBbOPmBo7Rc="
        "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
      ];

      trusted-users = [ "root" "@wheel" ];
    };
  };
}
