{ pkgs, config, lib, ... }: let
  forgecode = (pkgs.flake-compat {src = pkgs.npinsed.ai.forgecode;}).defaultNix.default
    # The version and APP_VERSION is 0.1.0-dev, which is out-of-date
    .overrideAttrs (_old: rec {
      # Forge skips update checks when version contains "dev", avoiding prompts like:
      # `Confirm upgrade from v2.9.9 -> v2.10.0 (latest)? Y/n:`
      # See: crates/forge_main/src/update.rs
      version = "${pkgs.npinsed.ai.forgecode.version}-dev";
      APP_VERSION=version;
      __intentionallyOverridingVersion=true;
      patches = [./agents-skills-upward-discovery.patch];
      # see ./is_terminal_bug.md
      postPatch = ''
        pattern='std::io::stdin().is_terminal()'
        for file in $(grep $pattern -rl); do
          substituteInPlace $file --replace-fail $pattern 'true'
        done
      '';
    });
in {
  imports = [
    ./mcp
  ];
  home.packages = [ forgecode ];
  cachix_packages = [ forgecode ];
  yq-merge.".forge/.credentials.json" = {
    generator = builtins.toJSON;
    expr = [{
      id = "minimax";
      auth_details.api_key = config.ai.minimax-china.api_key;
      url_params.HOSTNAME = "api.minimaxi.com";
    }{
      id = "kimi_coding";
      auth_details.api_key = config.ai.kimi.api_key;
    }{
      id = "deepseek";
      auth_details.api_key = config.ai.deepseek.api_key;
    }];
  };
  programs.zsh.initContent = lib.mkAfter ''
    . ${pkgs.npinsed.ai.forgecode}/shell-plugin/forge.setup.zsh
  '';
}