about summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorhacker1024 <hacker1024@users.sourceforge.net>2022-11-17 03:43:20 +1100
committerSandro Jäckel <sandro.jaeckel@gmail.com>2023-06-29 13:18:08 +0200
commitde7d05b9f6c9fb837642431200291d8ae4367315 (patch)
treed3a130ec3fc14959ee355ca5543c4a65fb45677d /pkgs
parent930b1f473b505e326843cc1e7d989661364a9921 (diff)
github-copilot-intellij-agent: init at 1.2.8.2631
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/tools/github-copilot-intellij-agent/default.nix82
-rw-r--r--pkgs/top-level/all-packages.nix2
2 files changed, 84 insertions, 0 deletions
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 0000000000000..a1f2bc950198a
--- /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 753c5d237ff02..e240b9994ed1d 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; };
   };