{lib, pkgs, config, ...}:
let 
  cfg = config.nixGc;
in
{
  options.nixGc = {
    enable = lib.mkEnableOption "enable nix gc default settings";
  };

  config = lib.mkIf cfg.enable {
    # Limit the number of generations to keep
    boot.loader.systemd-boot.configurationLimit = 5;

    # Perform garbage collection weekly to maintain low disk usage
    nix.gc = {
      automatic = true;
      dates = "weekly";
      options = "--delete-older-than 1w";
    };

    # Optimize storage
    # You can also manually optimize the store via:
    #    nix-store --optimise
    # Refer to the following link for more details:
    # https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-auto-optimise-store
    nix.settings.auto-optimise-store = true;
  };
}