summary refs log tree commit diff
diff options
context:
space:
mode:
authorEdmund Wu <fangkazuto@gmail.com>2022-12-06 20:41:22 -0800
committerJonathan Ringer <jonringer@users.noreply.github.com>2022-12-15 21:48:19 -0800
commit66a6cd1d5191af8d3ad3dfd7c31f49d930696b68 (patch)
tree27ebb74aaf5446d354539201a9f6927ed9e87550
parent41de073c824749f1ede71943f5a94a6af325ae1b (diff)
downloadnixpkgs-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.nix10
-rw-r--r--pkgs/applications/editors/vscode/with-extensions.nix41
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