diff options
author | Raymond Gauthier <jraygauthier@users.noreply.github.com> | 2020-10-16 04:13:12 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-16 10:13:12 +0200 |
commit | 8b4db57358c57873a3baa6fe5ebfe1cb7b6ccc03 (patch) | |
tree | 0071e038971aa12004b26195bb422672c2e7c0e5 /pkgs/misc/vscode-extensions | |
parent | b8fdd08e260f24bfab1928c906b8b7251dab3449 (diff) |
vscx/ms-vsliveshare-vsliveshare: Init at 1.0.2902 (#100583)
Diffstat (limited to 'pkgs/misc/vscode-extensions')
3 files changed, 141 insertions, 0 deletions
diff --git a/pkgs/misc/vscode-extensions/default.nix b/pkgs/misc/vscode-extensions/default.nix index 90ab030263cd6..70c68abe313a6 100644 --- a/pkgs/misc/vscode-extensions/default.nix +++ b/pkgs/misc/vscode-extensions/default.nix @@ -194,6 +194,8 @@ in lldb = llvmPackages_latest.lldb; }; + ms-vsliveshare.vsliveshare = callPackage ./ms-vsliveshare-vsliveshare {}; + vscodevim.vim = buildVscodeMarketplaceExtension { mktplcRef = { name = "vim"; diff --git a/pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/default.nix b/pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/default.nix new file mode 100644 index 0000000000000..446fedeffec41 --- /dev/null +++ b/pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/default.nix @@ -0,0 +1,138 @@ +# Baseed on previous attempts: +# - <https://github.com/msteen/nixos-vsliveshare/blob/master/pkgs/vsliveshare/default.nix> +# - <https://github.com/NixOS/nixpkgs/issues/41189> +{ lib, gccStdenv, vscode-utils, autoPatchelfHook, bash, file, makeWrapper, dotnet-sdk_3 +, curl, gcc, icu, libkrb5, libsecret, libunwind, libX11, lttng-ust, openssl, utillinux, zlib +, desktop-file-utils, xprop +}: + +with lib; + +let + # https://docs.microsoft.com/en-us/visualstudio/liveshare/reference/linux#install-prerequisites-manually + libs = [ + # .NET Core + openssl + libkrb5 + zlib + icu + + # Credential Storage + libsecret + + # NodeJS + libX11 + + # https://github.com/flathub/com.visualstudio.code.oss/issues/11#issuecomment-392709170 + libunwind + lttng-ust + curl + + # General + gcc.cc.lib + utillinux # libuuid + ]; + +in ((vscode-utils.override { stdenv = gccStdenv; }).buildVscodeMarketplaceExtension { + mktplcRef = { + name = "vsliveshare"; + publisher = "ms-vsliveshare"; + version = "1.0.2902"; + sha256 = "0fx2vi0wxamcwqcgcx7wpg8hi7f1c2pibrmd2qy2whilpsv3gzmb"; + }; +}).overrideAttrs(attrs: { + buildInputs = attrs.buildInputs ++ libs ++ [ autoPatchelfHook bash file makeWrapper ]; + + # Using a patch file won't work, because the file changes too often, causing the patch to fail on most updates. + # Rather than patching the calls to functions, we modify the functions to return what we want, + # which is less likely to break in the future. + postPatch = '' + sed -i \ + -e 's/updateExecutablePermissionsAsync() {/& return;/' \ + -e 's/isInstallCorrupt(traceSource, manifest) {/& return false;/' \ + out/prod/extension-prod.js + + declare ext_unique_id + ext_unique_id="$(basename "$out")" + + # Fix extension attempting to write to 'modifiedInternalSettings.json'. + # Move this write to the tmp directory indexed by the nix store basename. + sed -i \ + -E -e $'s/path\.resolve\(constants_1\.EXTENSION_ROOT_PATH, \'\.\/modifiedInternalSettings\.json\'\)/path.join\(os.tmpdir(), "'$ext_unique_id'" + "-modifiedInternalSettings.json"\)/g' \ + out/prod/extension-prod.js + + # Fix extension attempting to write to 'vsls-agent.lock'. + # Move this write to the tmp directory indexed by the nix store basename. + sed -i \ + -E -e $'s/(Agent_1.getAgentPath\(\) \+ \'.lock\')/path.join\(os.tmpdir(), "'$ext_unique_id'" + "-vsls-agent.lock"\)/g' \ + out/prod/extension-prod.js + + # TODO: Under 'node_modules/@vsliveshare/vscode-launcher-linux' need to hardcode path to 'desktop-file-install' + # 'update-desktop-database' and 'xprop'. Might want to wrap the script instead. + ''; + + # Support for the `postInstall` hook was added only in nixos-20.03, + # so for backwards compatibility reasons lets not use it yet. + installPhase = attrs.installPhase + '' + # Support both the new and old directory structure of vscode extensions. + if [[ -d $out/ms-vsliveshare.vsliveshare ]]; then + cd $out/ms-vsliveshare.vsliveshare + elif [[ -d $out/share/vscode/extensions/ms-vsliveshare.vsliveshare ]]; then + cd $out/share/vscode/extensions/ms-vsliveshare.vsliveshare + else + echo "Could not find extension directory 'ms-vsliveshare.vsliveshare'." >&2 + exit 1 + fi + + bash -s <<ENDSUBSHELL + shopt -s extglob + + # A workaround to prevent the journal filling up due to diagnostic logging. + # See: https://github.com/MicrosoftDocs/live-share/issues/1272 + # See: https://unix.stackexchange.com/questions/481799/how-to-prevent-a-process-from-writing-to-the-systemd-journal + gcc -fPIC -shared -ldl -o dotnet_modules/noop-syslog.so ${./noop-syslog.c} + + # Normally the copying of the right executables is done externally at a later time, + # but we want it done at installation time. + cp dotnet_modules/exes/linux-x64/* dotnet_modules + + # The required executables are already copied over, + # and the other runtimes won't be used and thus are just a waste of space. + rm -r dotnet_modules/exes dotnet_modules/runtimes/!(linux-x64) + + # Not all executables and libraries are executable, so make sure that they are. + find . -type f ! -executable -exec file {} + | grep -w ELF | cut -d ':' -f1 | xargs -rd'\n' chmod +x + + # Not all scripts are executed by passing them to a shell, so they need to be executable as well. + find . -type f -name '*.sh' ! -executable -exec chmod +x {} + + + # Lock the extension downloader. + touch install-linux.Lock externalDeps-linux.Lock + ENDSUBSHELL + ''; + + rpath = makeLibraryPath libs; + + postFixup = '' + # We cannot use `wrapProgram`, because it will generate a relative path, + # which will break when copying over the files. + mv dotnet_modules/vsls-agent{,-wrapped} + makeWrapper $PWD/dotnet_modules/vsls-agent{-wrapped,} \ + --prefix LD_LIBRARY_PATH : "$rpath" \ + --set LD_PRELOAD $PWD/dotnet_modules/noop-syslog.so \ + --set DOTNET_ROOT ${dotnet-sdk_3} + + for bn in check-reqs.sh install.sh uninstall.sh; do + wrapProgram "$PWD/node_modules/@vsliveshare/vscode-launcher-linux/$bn" \ + --prefix PATH : "${makeBinPath [desktop-file-utils xprop]}" + done + ''; + + meta = { + description = "Live Share lets you achieve greater confidence at speed by streamlining collaborative editing, debugging, and more in real-time during development"; + homepage = "https://aka.ms/vsls-docs"; + license = licenses.unfree; + maintainers = with maintainers; [ jraygauthier ]; + platforms = [ "x86_64-linux" ]; + }; +}) diff --git a/pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/noop-syslog.c b/pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/noop-syslog.c new file mode 100644 index 0000000000000..c76ec57a38204 --- /dev/null +++ b/pkgs/misc/vscode-extensions/ms-vsliveshare-vsliveshare/noop-syslog.c @@ -0,0 +1 @@ +void syslog(int priority, const char *format, ...) { } |