graphene-hardened-malloc: 2024123000 -> 2025012700 (#378307)
[NixPkgs.git] / pkgs / applications / editors / vscode / extensions / vscodeExts2nix.nix
blobed2e32bd0c0837dfe11f061b2df2259639237383
1 # based on the passed vscode will stdout a nix expression with the installed vscode extensions
3   lib,
4   vscodeDefault,
5   writeShellScriptBin,
6 }:
8 ##User input
10   vscode ? vscodeDefault,
11   extensionsToIgnore ? [ ],
12   # will use those extensions to get sha256 if still exists when executed.
13   extensions ? [ ],
15 let
16   mktplcExtRefToFetchArgs = import ./mktplcExtRefToFetchArgs.nix;
18 writeShellScriptBin "vscodeExts2nix" ''
19   echo '['
21   for line in $(${vscode}/bin/code --list-extensions --show-versions \
22     ${lib.optionalString (extensionsToIgnore != [ ]) ''
23       | grep -v -i '^\(${
24         lib.concatMapStringsSep "\\|" (e: "${e.publisher}.${e.name}") extensionsToIgnore
25       }\)'
26     ''}
27   ) ; do
28     [[ $line =~ ([^.]*)\.([^@]*)@(.*) ]]
29     name=''${BASH_REMATCH[2]}
30     publisher=''${BASH_REMATCH[1]}
31     version=''${BASH_REMATCH[3]}
33     extensions="${lib.concatMapStringsSep "." (e: "${e.publisher}${e.name}@${e.sha256}") extensions}"
34     reCurrentExt=$publisher$name"@([^.]*)"
35     if [[ $extensions =~ $reCurrentExt ]]; then
36       sha256=''${BASH_REMATCH[1]}
37     else
38       sha256=$(
39         nix-prefetch-url "${
40           (mktplcExtRefToFetchArgs {
41             publisher = ''"$publisher"'';
42             name = ''"$name"'';
43             version = ''"$version"'';
44           }).url
45         }" 2> /dev/null
46       )
47     fi
49     echo "{ name = \"''${name}\"; publisher = \"''${publisher}\"; version = \"''${version}\"; sha256 = \"''${sha256}\";  }"
50   done
53   echo ']'