diff --git a/pkgs/development/tools/github-copilot-intellij-agent/default.nix b/pkgs/development/tools/github-copilot-intellij-agent/default.nix new file mode 100644 index 000000000000..a1f2bc950198 --- /dev/null +++ b/pkgs/development/tools/github-copilot-intellij-agent/default.nix @@ -0,0 +1,82 @@ +{ stdenv, lib, fetchurl, unzip }: + +stdenv.mkDerivation rec { + pname = "github-copilot-intellij-agent"; + version = "1.2.8.2631"; + + src = fetchurl { + name = "${pname}-${version}-plugin.zip"; + url = "https://plugins.jetbrains.com/plugin/download?updateId=341846"; + hash = "sha256-0nnSMdx9Vb2WyNHreOJMP15K1+AII/kCEAOiFK5Mhik="; + }; + + nativeBuildInputs = [ unzip ]; + + dontUnpack = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + unzip -p $src github-copilot-intellij/copilot-agent/bin/copilot-agent-${ + if stdenv.isDarwin then (if stdenv.isAarch64 then "macos-arm64" else "macos") else "linux" + } | install -m755 /dev/stdin $out/bin/copilot-agent + + runHook postInstall + ''; + + # https://discourse.nixos.org/t/unrelatable-error-when-working-with-patchelf/12043 + # https://github.com/NixOS/nixpkgs/blob/db0d8e10fc1dec84f1ccb111851a82645aa6a7d3/pkgs/development/web/now-cli/default.nix + preFixup = let + binaryLocation = "$out/bin/copilot-agent"; + libPath = lib.makeLibraryPath [ stdenv.cc.cc ]; + in '' + orig_size=$(stat --printf=%s ${binaryLocation}) + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" ${binaryLocation} + patchelf --set-rpath ${libPath} ${binaryLocation} + chmod +x ${binaryLocation} + + new_size=$(stat --printf=%s ${binaryLocation}) + + var_skip=20 + var_select=22 + shift_by=$(expr $new_size - $orig_size) + + function fix_offset { + location=$(grep -obUam1 "$1" ${binaryLocation} | cut -d: -f1) + location=$(expr $location + $var_skip) + value=$(dd if=${binaryLocation} iflag=count_bytes,skip_bytes skip=$location \ + bs=1 count=$var_select status=none) + value=$(expr $shift_by + $value) + echo -n $value | dd of=${binaryLocation} bs=1 seek=$location conv=notrunc + } + + fix_offset PAYLOAD_POSITION + fix_offset PRELUDE_POSITION + ''; + + dontStrip = true; + + meta = rec { + description = "The GitHub copilot IntelliJ plugin's native component"; + longDescription = '' + The GitHub copilot IntelliJ plugin's native component. + bin/copilot-agent must be symlinked into the plugin directory, replacing the existing binary. + + For example: + + ```shell + ln -fs /run/current-system/sw/bin/copilot-agent ~/.local/share/JetBrains/IntelliJIdea2022.2/github-copilot-intellij/copilot-agent/bin/copilot-agent-linux + ``` + ''; + homepage = "https://plugins.jetbrains.com/plugin/17718-github-copilot"; + downloadPage = homepage; + changelog = homepage; + license = lib.licenses.unfree; + maintainers = with lib.maintainers; [ hacker1024 ]; + mainProgram = "copilot-agent"; + platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ]; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 753c5d237ff0..e240b9994ed1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2665,6 +2665,8 @@ with pkgs; github-commenter = callPackage ../development/tools/github-commenter { }; + github-copilot-intellij-agent = callPackage ../development/tools/github-copilot-intellij-agent { }; + github-desktop = callPackage ../applications/version-management/github-desktop { curl = curl.override { openssl = openssl_1_1; }; };