{ pkgs, lib, ... }: let
  goose-unwrapped = (pkgs.flake-compat {
    src = pkgs.applyPatches {
      name = "patched-goose-source";
      src = pkgs.npinsed.ai.goose;
      patches = [
        # fix(flake): #8514 - added output hashes to flake.nix ...#9319
        (builtins.fetchurl {
          url = "https://github.com/aaif-goose/goose/pull/9319.patch";
          sha256 = "0ca1bnn680br8i98c27h9w3ppyqqpscbxhm8mprxyd7chw40xj2a";
        })
        # feat: add /model slash command to CLI for session model switching#8747
        # Cons: only support change model, cannot change provider, cannot auto completion
        (builtins.fetchurl {
          url = "https://github.com/aaif-goose/goose/pull/8747.patch";
          sha256 = "1d68gwhz2037abkri5kgl6a1fgafcribw7iz8r6ln6si02qqvlqi";
        })
      ];
    };
  }).defaultNix.packages.${pkgs.stdenv.system}.default;
  goose-wrapped = pkgs.runCommand "goose-wrapped" {
    nativeBuildInputs = [pkgs.makeWrapper];
    passthru.unwrapped = goose-unwrapped;
  } ''
    mkdir -p $out
    ${pkgs.xorg.lndir}/bin/lndir -silent ${goose-unwrapped} $out
    for bin in $out/bin/*; do
      wrapProgram $bin \
        --set GOOSE_DISABLE_KEYRING 1
    done
  '';
in {
  home.packages = [ goose-wrapped ];
  cachix_packages = [ goose-unwrapped ];
  programs.zsh.initContent = lib.mkAfter ''
    eval "$(goose completion zsh)"
    eval "$(goose term init zsh)"
  '';
}