summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSandro <sandro.jaeckel@gmail.com>2022-12-24 02:59:12 +0100
committerGitHub <noreply@github.com>2022-12-24 02:59:12 +0100
commit3c7c12745589792365f9e6aa89033f5b90d431e5 (patch)
tree39cf646b989cd73d8f3cea13d4282231d9159022
parentb20fb264cc9fca26d19693b6b30da46c6ce664cb (diff)
parent1addcfec040474857680572e0ecc9e128d10a700 (diff)
Merge pull request #192679 from Enzime/vsce/remote-ssh-node
-rw-r--r--pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix69
1 files changed, 55 insertions, 14 deletions
diff --git a/pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix b/pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix
index ae9cbb7fb095..ee2f8dbec9a6 100644
--- a/pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/remote-ssh/default.nix
@@ -9,28 +9,69 @@
let
inherit (vscode-utils) buildVscodeMarketplaceExtension;
- # patch runs on remote machine hence use of which
- # links to local node if version is 12
+ nodeVersion = "16";
+
+ # As VS Code executes this code on the remote machine
+ # we test to see if we can build Node from Nixpkgs
+ # otherwise we check if the globally installed Node
+ # is usable.
patch = ''
- f="$HOME/.vscode-server/bin/$COMMIT_ID/node"
- localNodePath=''$(which node)
- if [ -x "''$localNodePath" ]; then
- localNodeVersion=''$(node -v)
- if [ "\''${localNodeVersion:1:2}" = "12" ]; then
- echo PATCH: replacing ''$f with ''$localNodePath
- rm ''$f
- ln -s ''$localNodePath ''$f
+ # Use Node from nixpkgs for NixOS hosts
+ #
+
+ serverDir="$HOME/.vscode-server/bin/$COMMIT_ID"
+ serverNode="$serverDir/node"
+ echo "VS Code Node: $serverNode"
+
+ # Check if VS Code Server has a non-working Node or the wrong version of Node
+ if ! nodeVersion=$($serverNode -v) || [ "\''${nodeVersion:1:2}" != "${nodeVersion}" ]; then
+ echo "VS Code Node Version: $nodeVersion"
+
+ if nix-build "<nixpkgs>" -A nodejs-${nodeVersion}_x --out-link "$serverDir/nix" && [ -e "$serverDir/nix/bin/node" ]; then
+ nodePath="$serverDir/nix/bin/node"
+ fi
+
+ echo "Node from Nix: $nodePath"
+
+ nodeVersion=$($nodePath -v)
+ echo "Node from Nix Version: $nodeVersion"
+
+ if [ "\''${nodeVersion:1:2}" != "${nodeVersion}" ]; then
+ echo "Getting Node from Nix failed, use Local Node instead"
+ nodePath=$(which node)
+ echo "Local Node: $nodePath"
+ nodeVersion=$($nodePath -v)
+ echo "Local Node Version: $nodeVersion"
fi
+
+ if [ "\''${nodeVersion:1:2}" == "${nodeVersion}" ]; then
+ echo PATCH: replacing $serverNode with $nodePath
+ ln -sf $nodePath $serverNode
+ fi
+ fi
+
+ nodeVersion=$($serverNode -v)
+ echo "VS Code Node Version: $nodeVersion"
+
+ if [ "\''${nodeVersion:1:2}" != "${nodeVersion}" ]; then
+ echo "Unsupported VS Code Node version: $nodeVersion", quitting
+ fail_with_exitcode ''${o.InstallExitCode.ServerTransferFailed}
fi
+
${lib.optionalString useLocalExtensions ''
# Use local extensions
if [ -d $HOME/.vscode/extensions ]; then
- if ! test -L "$HOME/.vscode-server/extensions"; then
- mkdir -p $HOME/.vscode-server
- ln -s $HOME/.vscode/extensions $HOME/.vscode-server/
+ if [ -e $HOME/.vscode-server/extensions ]; then
+ mv $HOME/.vscode-server/extensions $HOME/.vscode-server/extensions.bak
fi
+
+ mkdir -p $HOME/.vscode-server
+ ln -s $HOME/.vscode/extensions $HOME/.vscode-server/extensions
fi
''}
+
+ #
+ # Start the server
'';
in
buildVscodeMarketplaceExtension {
@@ -43,7 +84,7 @@ buildVscodeMarketplaceExtension {
postPatch = ''
substituteInPlace "out/extension.js" \
- --replace "# install extensions" '${patch}'
+ --replace '# Start the server\n' '${patch}'
'';
meta = with lib; {