{ pkgs, lib, config, ... }:
let
  # Pi's extension loader injects its own copies of pi-ai, pi-tui, and typebox
  # via jiti aliases, so the extension doesn't need its own copies (~130 MiB saved).
  slimSrc = pkgs.applyPatches {
    name = "pi-mcp-adapter-slim";
    src = pkgs.npinsed.ai.pi.mcp-adapter;
    nativeBuildInputs = [ pkgs.jq ];
    patches = [
      ./status-color.patch
    ];
    postPatch = ''
      jq 'del(.dependencies["@earendil-works/pi-ai","@earendil-works/pi-tui","typebox"]) | del(.devDependencies) | del(.scripts.prepare)' \
        package.json > package.json.tmp && mv package.json.tmp package.json
      cp ${./package-lock.json} package-lock.json
    '';
  };
in
{
  home.file = {
    ".pi/agent/extensions/pi-mcp-adapter" = {
      source = pkgs.buildNpmPackage {
        name = "pi-mcp-adapter";
        src = slimSrc;
        npmDepsHash = "sha256-c/VdxR9f7HljsLNu4kVa0JxvvphEQ7wmAxaz2Iq/Eio=";
        dontNpmBuild = true;
        npmRebuildFlags = [ "--ignore-scripts" ];
      } + /lib/node_modules/pi-mcp-adapter;
    };
  };

  yq-merge.".pi/agent/mcp.json" = {
    generator = builtins.toJSON;
    expr = {
      mcpServers = {
        ddgs = { inherit (config.ai.mcp.ddgs) command args; };
      };
    };
  };
}