# Baseed on previous attempts: # - # - { 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 <