diff options
author | Edmund Wu <fangkazuto@gmail.com> | 2022-12-06 20:41:22 -0800 |
---|---|---|
committer | Jonathan Ringer <jonringer@users.noreply.github.com> | 2022-12-15 21:48:19 -0800 |
commit | 66a6cd1d5191af8d3ad3dfd7c31f49d930696b68 (patch) | |
tree | 27ebb74aaf5446d354539201a9f6927ed9e87550 | |
parent | 41de073c824749f1ede71943f5a94a6af325ae1b (diff) | |
download | nixpkgs-66a6cd1d5191af8d3ad3dfd7c31f49d930696b68.tar nixpkgs-66a6cd1d5191af8d3ad3dfd7c31f49d930696b68.tar.gz nixpkgs-66a6cd1d5191af8d3ad3dfd7c31f49d930696b68.tar.bz2 nixpkgs-66a6cd1d5191af8d3ad3dfd7c31f49d930696b68.tar.lz nixpkgs-66a6cd1d5191af8d3ad3dfd7c31f49d930696b68.tar.xz nixpkgs-66a6cd1d5191af8d3ad3dfd7c31f49d930696b68.tar.zst nixpkgs-66a6cd1d5191af8d3ad3dfd7c31f49d930696b68.zip |
vscode-with-extensions: define extensions.json
https://github.com/microsoft/vscode/commit/23b25e9d4d3aad79f59a087f25bffb859afea88e
-rw-r--r-- | pkgs/applications/editors/vscode/extensions/vscode-utils.nix | 10 | ||||
-rw-r--r-- | pkgs/applications/editors/vscode/with-extensions.nix | 41 |
2 files changed, 47 insertions, 4 deletions
diff --git a/pkgs/applications/editors/vscode/extensions/vscode-utils.nix b/pkgs/applications/editors/vscode/extensions/vscode-utils.nix index 8f0112e5f60..a9f66d8e9d4 100644 --- a/pkgs/applications/editors/vscode/extensions/vscode-utils.nix +++ b/pkgs/applications/editors/vscode/extensions/vscode-utils.nix @@ -5,6 +5,8 @@ let src, # Same as "Unique Identifier" on the extension's web page. # For the moment, only serve as unique extension dir. + vscodeExtPublisher, + vscodeExtName, vscodeExtUniqueId, configurePhase ? '' runHook preConfigure @@ -23,7 +25,10 @@ let name = "vscode-extension-${name}"; - inherit vscodeExtUniqueId; + passthru = { + inherit vscodeExtPublisher vscodeExtName vscodeExtUniqueId; + }; + inherit configurePhase buildPhase dontPatchELF dontStrip; installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}"; @@ -54,9 +59,12 @@ let }: assert "" == name; assert null == src; buildVscodeExtension ((removeAttrs a [ "mktplcRef" "vsix" ]) // { name = "${mktplcRef.publisher}-${mktplcRef.name}-${mktplcRef.version}"; + version = mktplcRef.version; src = if (vsix != null) then vsix else fetchVsixFromVscodeMarketplace mktplcRef; + vscodeExtPublisher = mktplcRef.publisher; + vscodeExtName = mktplcRef.name; vscodeExtUniqueId = "${mktplcRef.publisher}.${mktplcRef.name}"; }); diff --git a/pkgs/applications/editors/vscode/with-extensions.nix b/pkgs/applications/editors/vscode/with-extensions.nix index 1c9c4be4563..b748a8dee97 100644 --- a/pkgs/applications/editors/vscode/with-extensions.nix +++ b/pkgs/applications/editors/vscode/with-extensions.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, runCommand, buildEnv, vscode, makeWrapper +{ lib, stdenv, runCommand, buildEnv, vscode, makeWrapper, writeText , vscodeExtensions ? [] }: /* @@ -46,12 +46,47 @@ let wrappedPkgVersion = lib.getVersion vscode; wrappedPkgName = lib.removeSuffix "-${wrappedPkgVersion}" vscode.name; + toExtensionJsonEntry = drv: rec { + identifier = { + id = "${drv.vscodeExtPublisher}.${drv.vscodeExtName}"; + uuid = ""; + }; + + version = drv.version; + + location = { + "$mid" = 1; + fsPath = drv.outPath + "/share/vscode/extensions/${drv.vscodeExtUniqueId}"; + path = location.fsPath; + scheme = "file"; + }; + + metadata = { + id = identifier.uuid; + publisherId = ""; + publisherDisplayName = drv.vscodeExtPublisher; + targetPlatform = "undefined"; + isApplicationScoped = false; + updated = false; + isPreReleaseVersion = false; + installedTimestamp = 0; + preRelease = false; + }; + }; + + extensionJson = builtins.toJSON (map toExtensionJsonEntry vscodeExtensions); + extensionJsonFile = writeText "extensions.json" extensionJson; + extensionJsonOutput = runCommand "vscode-extensions-json" {} '' + mkdir -p $out/share/vscode/extensions + cp ${extensionJsonFile} $out/share/vscode/extensions/extensions.json + ''; + combinedExtensionsDrv = buildEnv { name = "vscode-extensions"; - paths = vscodeExtensions; + paths = vscodeExtensions ++ [ extensionJsonOutput ]; }; - extensionsFlag = lib.optionalString (vscodeExtensions != []) '' + extensionsFlag = '' --add-flags "--extensions-dir ${combinedExtensionsDrv}/share/vscode/extensions" ''; in |