From e24a734076ea21365bb618d63f5c9a70006dd196 Mon Sep 17 00:00:00 2001 From: ZHAO Jin-Xiang Date: Sun, 23 Nov 2025 17:01:37 +0800 Subject: [PATCH] vscode-utils: add unpackVsixSetupHook --- .../default.nix | 9 +-------- .../editors/vscode/extensions/default.nix | 15 ++------------- .../vscode/extensions/eamodio.gitlens/default.nix | 2 +- .../extensions/kilocode.kilo-code/default.nix | 8 -------- .../vscode/extensions/mktplcExtRefToFetchArgs.nix | 6 +++--- .../myriad-dreamin.tinymist/default.nix | 4 ++-- .../rooveterinaryinc.roo-cline/default.nix | 2 +- .../rust-lang.rust-analyzer/default.nix | 6 +++--- .../vscode/extensions/unpack-vsix-setup-hook.sh | 11 +++++++++++ .../vscode-icons-team.vscode-icons/default.nix | 2 +- .../editors/vscode/extensions/vscode-utils.nix | 10 +++++++++- 11 files changed, 34 insertions(+), 41 deletions(-) create mode 100644 pkgs/applications/editors/vscode/extensions/unpack-vsix-setup-hook.sh diff --git a/pkgs/applications/editors/vscode/extensions/Google.gemini-cli-vscode-ide-companion/default.nix b/pkgs/applications/editors/vscode/extensions/Google.gemini-cli-vscode-ide-companion/default.nix index cc8fbb270ddd..2c9be2011e26 100644 --- a/pkgs/applications/editors/vscode/extensions/Google.gemini-cli-vscode-ide-companion/default.nix +++ b/pkgs/applications/editors/vscode/extensions/Google.gemini-cli-vscode-ide-companion/default.nix @@ -13,6 +13,7 @@ vscode-utils.buildVscodeExtension (finalAttrs: { src = gemini-cli.overrideAttrs (oldAttrs: { pname = "gemini-cli-vscode-ide-companion-vsix"; + name = "${finalAttrs.pname}-${finalAttrs.version}.vsix"; installPhase = '' runHook preInstall @@ -23,14 +24,6 @@ vscode-utils.buildVscodeExtension (finalAttrs: { ''; }); - unpackPhase = '' - runHook preUnpack - - unzip $src - - runHook postUnpack - ''; - meta = { description = "Enable Gemini CLI with direct access to your IDE workspace"; homepage = "https://github.com/google-gemini/gemini-cli"; diff --git a/pkgs/applications/editors/vscode/extensions/default.nix b/pkgs/applications/editors/vscode/extensions/default.nix index 94c5364d113e..ad1d96ec7625 100644 --- a/pkgs/applications/editors/vscode/extensions/default.nix +++ b/pkgs/applications/editors/vscode/extensions/default.nix @@ -2302,18 +2302,6 @@ let }; }; - influxdata.flux = buildVscodeMarketplaceExtension { - mktplcRef = { - publisher = "influxdata"; - name = "flux"; - version = "1.0.5"; - hash = "sha256-KIKROyfkosBS1Resgl+s3VENVg4ibaeIgKjermXESoA="; - }; - meta = { - license = lib.licenses.mit; - }; - }; - intellsmi.comment-translate = buildVscodeMarketplaceExtension { mktplcRef = { publisher = "intellsmi"; @@ -4913,7 +4901,7 @@ let }; vsix = fetchurl { - name = "${mktplcRef.publisher}-${mktplcRef.name}.zip"; + name = "${mktplcRef.publisher}-${mktplcRef.name}.vsix"; url = "https://github.com/valentjn/vscode-ltex/releases/download/${mktplcRef.version}/vscode-ltex-${mktplcRef.version}-offline-linux-x64.vsix"; sha256 = "1nlrijjwc35n1xgb5lgnr4yvlgfcxd0vdj93ip8lv2xi8x1ni5f6"; }; @@ -5545,6 +5533,7 @@ let dendron.dendron-markdown-preview-enhanced = throw "dendron.dendron-markdown-preview-enhanced has been removed from the VSCode marketplace."; # Added 2025-08-21 equinusocio.vsc-material-theme = throw "'equinusocio.vsc-material-theme' has been removed due to security concerns. The extension contained potentially malicious code and was taken down."; # Added 2025-02-28 equinusocio.vsc-material-theme-icons = throw "'equinusocio.vsc-material-theme-icons' has been removed due to security concerns. The extension contained potentially malicious code and was taken down."; # Added 2025-02-28 + influxdata.flux = throw "'influxdata.flux' has been removed due to being unmaintained upstream"; # Added 2025-12-09 jakebecker.elixir-ls = throw "jakebecker.elixir-ls is deprecated in favor of elixir-lsp.vscode-elixir-ls"; # Added 2024-05-29 jpoissonnier.vscode-styled-components = throw "jpoissonnier.vscode-styled-components is deprecated in favor of styled-components.vscode-styled-components"; # Added 2024-05-29 matklad.rust-analyzer = throw "matklad.rust-analyzer is deprecated in favor of rust-lang.rust-analyzer"; # Added 2024-05-29 diff --git a/pkgs/applications/editors/vscode/extensions/eamodio.gitlens/default.nix b/pkgs/applications/editors/vscode/extensions/eamodio.gitlens/default.nix index f442f4e034fb..58b4d0d6b75e 100644 --- a/pkgs/applications/editors/vscode/extensions/eamodio.gitlens/default.nix +++ b/pkgs/applications/editors/vscode/extensions/eamodio.gitlens/default.nix @@ -11,7 +11,7 @@ let vsix = stdenv.mkDerivation (finalAttrs: { - name = "gitlens-${finalAttrs.version}.zip"; + name = "gitlens-${finalAttrs.version}.vsix"; pname = "gitlens-vsix"; version = "17.7.1"; diff --git a/pkgs/applications/editors/vscode/extensions/kilocode.kilo-code/default.nix b/pkgs/applications/editors/vscode/extensions/kilocode.kilo-code/default.nix index 6d9b8bd185fd..5d5be77b0683 100644 --- a/pkgs/applications/editors/vscode/extensions/kilocode.kilo-code/default.nix +++ b/pkgs/applications/editors/vscode/extensions/kilocode.kilo-code/default.nix @@ -60,14 +60,6 @@ vscode-utils.buildVscodeExtension (finalAttrs: { src = vsix; - unpackPhase = '' - runHook preUnpack - - unzip $src - - runHook postUnpack - ''; - passthru = { vsix = finalAttrs.src; updateScript = nix-update-script { diff --git a/pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix b/pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix index 4f947a493542..20f21cf9e2e0 100644 --- a/pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix +++ b/pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix @@ -12,7 +12,7 @@ in { url = "https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publisher}/extension/${name}/${version}/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage${archurl}"; inherit sha256 hash; - # The `*.vsix` file is in the end a simple zip file. Change the extension - # so that existing `unzip` hooks takes care of the unpacking. - name = "${publisher}-${name}.zip"; + # The `*.vsix` file is in the end a simple zip file. Force it using .vsix extension + # so that existing `unpackVsixSetupHook` hooks takes care of the unpacking. + name = "${publisher}-${name}.vsix"; } diff --git a/pkgs/applications/editors/vscode/extensions/myriad-dreamin.tinymist/default.nix b/pkgs/applications/editors/vscode/extensions/myriad-dreamin.tinymist/default.nix index 9da4e7c000ae..d1d34b3b2b8c 100644 --- a/pkgs/applications/editors/vscode/extensions/myriad-dreamin.tinymist/default.nix +++ b/pkgs/applications/editors/vscode/extensions/myriad-dreamin.tinymist/default.nix @@ -10,8 +10,8 @@ vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { name = "tinymist"; publisher = "myriad-dreamin"; - inherit (tinymist) version; - hash = "sha256-7BHkRM9HcD5VDMCcAh2GFvGz+OSb7l/Ki3+V3v/RYSo="; + version = "0.14.4"; + hash = "sha256-Y8yIAIT0TrrM8ZQSZl4QnVG6uE0F+AwWFvmhLe0ZPto="; }; nativeBuildInputs = [ diff --git a/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix b/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix index 2dfc0bcd53ca..411e2563a079 100644 --- a/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix +++ b/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix @@ -10,7 +10,7 @@ let vsix = stdenvNoCC.mkDerivation (finalAttrs: { - name = "roo-code-${finalAttrs.version}.zip"; + name = "roo-code-${finalAttrs.version}.vsix"; pname = "roo-code-vsix"; version = "3.36.2"; diff --git a/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/default.nix b/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/default.nix index 3de3817de808..a8b771567541 100644 --- a/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/default.nix +++ b/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/default.nix @@ -32,6 +32,7 @@ let vsix = buildNpmPackage { inherit pname releaseTag; + name = "${pname}-${version}.vsix"; version = lib.trim (lib.readFile ./version.txt); src = "${src}/editors/code"; npmDepsHash = "sha256-fV4Z3jj+v56A7wbIEYhVAPVuAMqMds5xSe3OetWAsbw="; @@ -57,15 +58,14 @@ let walk(del(.["$generated-start"]?) | del(.["$generated-end"]?)) ' package.json | sponge package.json - mkdir -p $out - npx vsce package -o $out/${pname}.zip + npm exec --package=@vscode/vsce -- vsce package --out $out ''; }; in vscode-utils.buildVscodeExtension { inherit version vsix pname; - src = "${vsix}/${pname}.zip"; + src = vsix; vscodeExtUniqueId = "${publisher}.${pname}"; vscodeExtPublisher = publisher; vscodeExtName = pname; diff --git a/pkgs/applications/editors/vscode/extensions/unpack-vsix-setup-hook.sh b/pkgs/applications/editors/vscode/extensions/unpack-vsix-setup-hook.sh new file mode 100644 index 000000000000..168972726f91 --- /dev/null +++ b/pkgs/applications/editors/vscode/extensions/unpack-vsix-setup-hook.sh @@ -0,0 +1,11 @@ +unpackCmdHooks+=(_tryUnpackVsix) +_tryUnpackVsix() { + if ! [[ "$curSrc" =~ \.vsix$ ]]; then return 1; fi + + # UTF-8 locale is needed for unzip on glibc to handle UTF-8 symbols: + # https://github.com/NixOS/nixpkgs/issues/176225#issuecomment-1146617263 + # Otherwise unzip unpacks escaped file names as if '-U' options was in effect. + # + # Pick en_US.UTF-8 as most possible to be present on glibc, musl and darwin. + LANG=en_US.UTF-8 @unzip@ -qq "$curSrc" +} diff --git a/pkgs/applications/editors/vscode/extensions/vscode-icons-team.vscode-icons/default.nix b/pkgs/applications/editors/vscode/extensions/vscode-icons-team.vscode-icons/default.nix index 698c58cfc28d..d5ff476819f0 100644 --- a/pkgs/applications/editors/vscode/extensions/vscode-icons-team.vscode-icons/default.nix +++ b/pkgs/applications/editors/vscode/extensions/vscode-icons-team.vscode-icons/default.nix @@ -12,7 +12,7 @@ let vsix = stdenvNoCC.mkDerivation (finalAttrs: { - name = "vscode-icons-${finalAttrs.version}.zip"; + name = "vscode-icons-${finalAttrs.version}.vsix"; pname = "vscode-icons-vsix"; version = "12.15.0"; diff --git a/pkgs/applications/editors/vscode/extensions/vscode-utils.nix b/pkgs/applications/editors/vscode/extensions/vscode-utils.nix index 4719b4ab97dc..3805fd0af1c6 100644 --- a/pkgs/applications/editors/vscode/extensions/vscode-utils.nix +++ b/pkgs/applications/editors/vscode/extensions/vscode-utils.nix @@ -6,10 +6,18 @@ fetchurl, vscode, unzip, + makeSetupHook, + writeScript, jq, vscode-extension-update-script, }: let + unpackVsixSetupHook = makeSetupHook { + name = "unpack-vsix-setup-hook"; + substitutions = { + unzip = "${unzip}/bin/unzip"; + }; + } ./unpack-vsix-setup-hook.sh; buildVscodeExtension = lib.extendMkDerivation { constructDrv = stdenv.mkDerivation; excludeDrvArgNames = [ @@ -63,7 +71,7 @@ let # This cannot be removed, it is used by some extensions. installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}"; - nativeBuildInputs = [ unzip ] ++ nativeBuildInputs; + nativeBuildInputs = [ unpackVsixSetupHook ] ++ nativeBuildInputs; installPhase = args.installPhase or ''