Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 106 lines 3.6 kB view raw
1{ 2 lib, 3 stdenv, 4 runCommand, 5 buildEnv, 6 vscode, 7 vscode-utils, 8 makeWrapper, 9 writeTextFile, 10 vscodeExtensions ? [ ], 11}: 12 13/* 14 `vscodeExtensions` 15 : A set of vscode extensions to be installed alongside the editor. Here's a an 16 example: 17 18 ~~~ 19 vscode-with-extensions.override { 20 21 # When the extension is already available in the default extensions set. 22 vscodeExtensions = with vscode-extensions; [ 23 bbenoist.nix 24 ] 25 26 # Concise version from the vscode market place when not available in the default set. 27 ++ vscode-utils.extensionsFromVscodeMarketplace [ 28 { 29 name = "code-runner"; 30 publisher = "formulahendry"; 31 version = "0.6.33"; 32 sha256 = "166ia73vrcl5c9hm4q1a73qdn56m0jc7flfsk5p5q41na9f10lb0"; 33 } 34 ]; 35 } 36 ~~~ 37 38 This expression should fetch 39 - the *nix* vscode extension from whatever source defined in the 40 default nixpkgs extensions set `vscodeExtensions`. 41 42 - the *code-runner* vscode extension from the marketplace using the 43 following url: 44 45 ~~~ 46 https://bbenoist.gallery.vsassets.io/_apis/public/gallery/publisher/bbenoist/extension/nix/1.0.1/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage 47 ~~~ 48 49 The original `code` executable will be wrapped so that it uses the set of pre-installed / unpacked 50 extensions as its `--extensions-dir`. 51*/ 52 53let 54 inherit (vscode) executableName longName; 55 wrappedPkgVersion = lib.getVersion vscode; 56 wrappedPkgName = lib.removeSuffix "-${wrappedPkgVersion}" vscode.name; 57 58 extensionJsonFile = writeTextFile { 59 name = "vscode-extensions-json"; 60 destination = "/share/vscode/extensions/extensions.json"; 61 text = vscode-utils.toExtensionJson vscodeExtensions; 62 }; 63 64 combinedExtensionsDrv = buildEnv { 65 name = "vscode-extensions"; 66 paths = vscodeExtensions ++ [ extensionJsonFile ]; 67 }; 68 69 extensionsFlag = '' 70 --add-flags "--extensions-dir ${combinedExtensionsDrv}/share/vscode/extensions" 71 ''; 72in 73 74runCommand "${wrappedPkgName}-with-extensions-${wrappedPkgVersion}" 75 { 76 nativeBuildInputs = [ makeWrapper ]; 77 buildInputs = [ vscode ]; 78 dontPatchELF = true; 79 dontStrip = true; 80 meta = vscode.meta; 81 } 82 ( 83 if stdenv.hostPlatform.isDarwin then 84 '' 85 mkdir -p $out/bin/ 86 mkdir -p "$out/Applications/${longName}.app/Contents/MacOS" 87 88 for path in PkgInfo Frameworks Resources _CodeSignature Info.plist; do 89 ln -s "${vscode}/Applications/${longName}.app/Contents/$path" "$out/Applications/${longName}.app/Contents/" 90 done 91 92 makeWrapper "${vscode}/bin/${executableName}" "$out/bin/${executableName}" ${extensionsFlag} 93 makeWrapper "${vscode}/Applications/${longName}.app/Contents/MacOS/Electron" "$out/Applications/${longName}.app/Contents/MacOS/Electron" ${extensionsFlag} 94 '' 95 else 96 '' 97 mkdir -p "$out/bin" 98 mkdir -p "$out/share/applications" 99 mkdir -p "$out/share/pixmaps" 100 101 ln -sT "${vscode}/share/pixmaps/vs${executableName}.png" "$out/share/pixmaps/vs${executableName}.png" 102 ln -sT "${vscode}/share/applications/${executableName}.desktop" "$out/share/applications/${executableName}.desktop" 103 ln -sT "${vscode}/share/applications/${executableName}-url-handler.desktop" "$out/share/applications/${executableName}-url-handler.desktop" 104 makeWrapper "${vscode}/bin/${executableName}" "$out/bin/${executableName}" ${extensionsFlag} 105 '' 106 )