{ config, pkgs, ... }:

let
  configPath =
    if config.machine.isGeneric then
      "${config.home.homeDirectory}/.config/home-manager"
    else
      "${config.home.homeDirectory}/.nixos-config";
in
{
  programs.topgrade = {
    enable = true;
    settings = {
      misc = {
        assume_yes = true;
        ignore_failures = [ "git_repos" ];
        no_retry = true;
        pre_sudo = if (config.machine.isGeneric) then false else true;
        cleanup = if (config.machine.isGeneric) then true else false;
        skip_notify = true;
        disable = [
          "bun"
          "tldr"
          "flutter"
          "nix"
          "uv"
        ];
      };
      git.repos = [ configPath ];
      firmware = {
        upgrade = true;
      };
      pre_commands = {
        flakeUpgrade = "cd ${configPath} && ${pkgs.nixVersions.latest}/bin/nix flake update --commit-lock-file --verbose --repair";
      };
      post_commands =
        {
          dockerPrune = "docker system prune -f";
        }
        // (
          if (config.machine.isGeneric) then
            {
              nixCollectGarbage = "nix-collect-garbage -d";
            }
          else
            {
            }
        );
    };
  };
}