about summary refs log tree commit diff
path: root/pkgs/by-name/ba
diff options
context:
space:
mode:
authorDoron Behar <doron.behar@gmail.com>2024-05-26 08:26:16 +0300
committerDoron Behar <doron.behar@gmail.com>2024-06-13 12:11:32 +0300
commit43f62ef3d03338b959a26ba28222058fa3153dc1 (patch)
tree56d8b0e93aeecf7eb83705fd78b549faedabca50 /pkgs/by-name/ba
parent21d22ef2ea511a82e20654d20ed493cef5690084 (diff)
bash-language-server: use pnpm.fetchDeps instead of node2nix
Diffstat (limited to 'pkgs/by-name/ba')
-rw-r--r--pkgs/by-name/ba/bash-language-server/package.nix73
1 files changed, 73 insertions, 0 deletions
diff --git a/pkgs/by-name/ba/bash-language-server/package.nix b/pkgs/by-name/ba/bash-language-server/package.nix
new file mode 100644
index 0000000000000..0e66b1e268763
--- /dev/null
+++ b/pkgs/by-name/ba/bash-language-server/package.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pnpm_8
+, nodejs
+, npmHooks
+, makeBinaryWrapper
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bash-language-server";
+  version = "5.4.0";
+
+  src = fetchFromGitHub {
+    owner = "bash-lsp";
+    repo = "bash-language-server";
+    rev = "server-${finalAttrs.version}";
+    hash = "sha256-yJ81oGd9aNsWQMLvDSgMVVH1//Mw/SVFYFIPsJTQYzE=";
+  };
+
+  pnpmDeps = pnpm_8.fetchDeps {
+    inherit (finalAttrs) pname version src;
+    hash = "sha256-W25xehcxncBs9QgQBt17F5YHK0b+GDEmt27XzTkyYWg=";
+  };
+
+  nativeBuildInputs = [
+    nodejs
+    pnpm_8.configHook
+    npmHooks.npmBuildHook
+    makeBinaryWrapper
+  ];
+  npmBuildScript = "compile";
+  # We are only interested in the bash-language-server executable, which is
+  # part of the `./server` directory. From some reason, the `./vscode-client`
+  # directory is not included in upstream's `pnpm-workspace.yaml`, so perhaps
+  # that's why our ${pnpmDeps} don't include the dependencies required for it.
+  preBuild = ''
+    rm -r vscode-client
+    substituteInPlace tsconfig.json \
+      --replace-fail '{ "path": "./vscode-client" },' ""
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    pnpm --offline \
+      --frozen-lockfile --ignore-script \
+      --filter=bash-language-server \
+      deploy $out/lib/bash-language-server
+    # Cleanup directory a bit, to save space, and make fixup phase a bit faster
+    rm -r $out/lib/bash-language-server/src
+    find $out/lib/bash-language-server -name '*.ts' -delete
+    rm -r \
+      $out/lib/bash-language-server/node_modules/.bin \
+      $out/lib/bash-language-server/node_modules/*/bin
+
+    # Create the executable, based upon what happens in npmHooks.npmInstallHook
+    makeWrapper ${lib.getExe nodejs} $out/bin/bash-language-server \
+      --inherit-argv0 \
+      --add-flags $out/lib/bash-language-server/out/cli.js
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A language server for Bash";
+    homepage = "https://github.com/bash-lsp/bash-language-server";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "bash-language-server";
+    platforms = platforms.all;
+  };
+})