about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/editors/vscode/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/editors/vscode/extensions')
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/WakaTime.vscode-wakatime/default.nix22
-rwxr-xr-xnixpkgs/pkgs/applications/editors/vscode/extensions/_maintainers/update-bin-srcs-lib.sh158
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/rescript-editor-analysis.nix34
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/contextmapper.context-mapper-vscode-extension/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/default.nix3681
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/fix-terraform-ls.patch19
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/jebbs.plantuml/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/language-packs.nix88
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix11
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix136
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/ms-python.python/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/ms-toolsai.jupyter/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode-remote.remote-ssh/default.nix95
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/default.nix90
-rwxr-xr-xnixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/missing_elf_deps.sh51
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/package-activation-events.json25
-rwxr-xr-xnixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/update_helper.sh165
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vsliveshare.vsliveshare/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/build-deps/package.json23
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/default.nix90
-rwxr-xr-xnixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/update.sh51
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/sumneko.lua/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/sumneko.lua/remove-chmod.patch14
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/updateSettings.nix39
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/updateSettingsTest.nix6
-rwxr-xr-xnixpkgs/pkgs/applications/editors/vscode/extensions/update_installed_exts.sh90
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/cmake-build-extension-only.patch52
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix143
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/fix-python-installation.patch13
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/lldb.nix35
-rwxr-xr-xnixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/update.sh48
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vscode-utils.nix140
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeEnv.nix85
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeEnvTest.nix11
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeExts2nix.nix44
-rw-r--r--nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix54
38 files changed, 5835 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/WakaTime.vscode-wakatime/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/WakaTime.vscode-wakatime/default.nix
new file mode 100644
index 000000000000..a58a17f2a6fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/WakaTime.vscode-wakatime/default.nix
@@ -0,0 +1,22 @@
+{ lib
+, vscode-utils }:
+
+let
+  inherit (vscode-utils) buildVscodeMarketplaceExtension;
+in
+  buildVscodeMarketplaceExtension {
+    mktplcRef = {
+      name = "vscode-wakatime";
+      publisher = "WakaTime";
+      version = "18.0.5";
+      sha256 = "sha256-vWqGxMbxKqd4UgKK0sOKadMTDf6Y3TQxfWsc93MHjFs=";
+    };
+
+    meta = {
+      description = ''
+        Visual Studio Code plugin for automatic time tracking and metrics generated
+        from your programming activity
+      '';
+      license = lib.licenses.bsd3;
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/_maintainers/update-bin-srcs-lib.sh b/nixpkgs/pkgs/applications/editors/vscode/extensions/_maintainers/update-bin-srcs-lib.sh
new file mode 100755
index 000000000000..4b0ca54da362
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/_maintainers/update-bin-srcs-lib.sh
@@ -0,0 +1,158 @@
+#!/usr/bin/env bash
+
+prefetchExtensionZip() {
+  declare publisher="${1?}"
+  declare name="${2?}"
+  declare version="${3?}"
+
+  1>&2 echo
+  1>&2 echo "------------- Downloading extension ---------------"
+
+  declare extZipStoreName="${publisher}-${name}.zip"
+  declare extUrl="https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publisher}/extension/${name}/${version}/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage";
+  1>&2 echo "extUrl='$extUrl'"
+  declare nixPrefetchArgs=( --name "$extZipStoreName" --print-path "$extUrl" )
+
+  1>&2 printf "$ nix-prefetch-url"
+  1>&2 printf " %q" "${nixPrefetchArgs[@]}"
+  1>&2 printf " 2> /dev/null\n"
+  declare zipShaWStorePath
+  zipShaWStorePath=$(nix-prefetch-url "${nixPrefetchArgs[@]}" 2> /dev/null)
+
+  1>&2 echo "zipShaWStorePath='$zipShaWStorePath'"
+  echo "$zipShaWStorePath"
+}
+
+
+prefetchExtensionUnpacked() {
+  declare publisher="${1?}"
+  declare name="${2?}"
+  declare version="${3?}"
+
+  declare zipShaWStorePath
+  zipShaWStorePath="$(prefetchExtensionZip "$publisher" "$name" "$version")"
+
+  declare zipStorePath
+  zipStorePath="$(echo "$zipShaWStorePath" | tail -n1)"
+  1>&2 echo "zipStorePath='$zipStorePath'"
+
+  function rm_tmpdir() {
+    1>&2 printf "rm -rf %q\n" "$tmpDir"
+    rm -rf "$tmpDir"
+  }
+  function make_trapped_tmpdir() {
+    tmpDir=$(mktemp -d)
+    trap rm_tmpdir EXIT
+  }
+
+  1>&2 echo
+  1>&2 echo "------------- Unpacking extension ---------------"
+
+  make_trapped_tmpdir
+  declare unzipArgs=( -q -d "$tmpDir" "$zipStorePath" )
+  1>&2 printf "$ unzip"
+  1>&2 printf " %q" "${unzipArgs[@]}"
+  1>&2 printf "\n"
+  unzip "${unzipArgs[@]}"
+
+  declare unpackedStoreName="${publisher}-${name}"
+
+  declare unpackedStorePath
+  unpackedStorePath="$(nix add-to-store -n "$unpackedStoreName" "$tmpDir")"
+  declare unpackedSha256
+  unpackedSha256="$(nix hash-path --base32 --type sha256 "$unpackedStorePath")"
+  1>&2 echo "unpackedStorePath='$unpackedStorePath'"
+  1>&2 echo "unpackedSha256='$unpackedSha256'"
+
+  rm_tmpdir
+
+  echo "$unpackedSha256"
+  echo "$unpackedStorePath"
+}
+
+
+prefetchExtensionJson() {
+  declare publisher="${1?}"
+  declare name="${2?}"
+  declare version="${3?}"
+
+  declare unpackedShaWStorePath
+  unpackedShaWStorePath="$(prefetchExtensionUnpacked "$publisher" "$name" "$version")"
+
+  declare unpackedStorePath
+  unpackedStorePath="$(echo "$unpackedShaWStorePath" | tail -n1)"
+  1>&2 echo "unpackedStorePath='$unpackedStorePath'"
+
+  declare jsonShaWStorePath
+  jsonShaWStorePath=$(nix-prefetch-url --print-path "file://${unpackedStorePath}/extension/package.json" 2> /dev/null)
+
+  1>&2 echo "jsonShaWStorePath='$jsonShaWStorePath'"
+  echo "$jsonShaWStorePath"
+}
+
+
+formatExtRuntimeDeps() {
+  declare publisher="${1?}"
+  declare name="${2?}"
+  declare version="${3?}"
+
+  declare jsonShaWStorePath
+  jsonShaWStorePath="$(prefetchExtensionJson "$publisher" "$name" "$version")"
+
+  declare jsonStorePath
+  jsonStorePath="$(echo "$jsonShaWStorePath" | tail -n1)"
+  1>&2 echo "jsonStorePath='$jsonStorePath'"
+
+  # Assume packages without an architectures are for x86_64 and remap arm64 to aarch64.
+  declare jqQuery
+  jqQuery=$(cat <<'EOF'
+.runtimeDependencies
+| map(select(.platforms[] | in({"linux": null, "darwin": null})))
+| map(select(.architectures == null).architectures |= ["x86_64"])
+| map(del(.architectures[] | select(. | in({"x86_64": null, "arm64": null}) | not)))
+| map((.architectures[] | select(. == "arm64")) |= "aarch64")
+| map(select(.architectures != []))
+| .[] | {
+  (.id + "__" + (.architectures[0]) + "-" + (.platforms[0])):
+    {installPath, binaries, urls: [.url, .fallbackUrl] | map(select(. != null))}
+}
+EOF
+)
+
+  1>&2 printf "$ cat %q | jq '%s'\n" "$jsonStorePath" "$jqQuery"
+  cat "$jsonStorePath" | jq "$jqQuery"
+}
+
+
+computeExtRtDepChecksum() {
+  declare rtDepJsonObject="${1?}"
+  declare url
+  url="$(echo "$rtDepJsonObject" | jq -j '.[].urls[0]')"
+  declare sha256
+  1>&2 printf "$ nix-prefetch-url '%s'\n" "$url"
+  sha256="$(nix-prefetch-url "$url")"
+  1>&2 echo "$sha256"
+  echo "$sha256"
+}
+
+
+computeAndAttachExtRtDepsChecksums() {
+  while read -r rtDepJsonObject; do
+    declare sha256
+    sha256="$(computeExtRtDepChecksum "$rtDepJsonObject")"
+    echo "$rtDepJsonObject" | jq --arg sha256 "$sha256" '.[].sha256 = $sha256'
+  done < <(cat - | jq  -c '.')
+}
+
+
+jqStreamToJson() {
+  cat - | jq --slurp '. | add'
+}
+
+
+jsonToNix() {
+  # TODO: Replacing this non functional stuff with a proper json to nix
+  # implementation would allow us to produce a 'rt-deps-bin-srcs.nix' file instead.
+  false
+  cat - | sed -E -e 's/": /" = /g' -e 's/,$/;/g' -e 's/  }$/  };/g'  -e 's/  ]$/  ];/g'
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/default.nix
new file mode 100644
index 000000000000..8bb4a5f5ce1a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, vscode-utils, callPackage }:
+let
+  version = "1.16.0";
+  rescript-editor-analysis = callPackage ./rescript-editor-analysis.nix { inherit version; };
+  arch =
+    if stdenv.isLinux then "linux"
+    else if stdenv.isDarwin then "darwin"
+    else throw "Unsupported platform";
+  analysisDir = "server/analysis_binaries/${arch}";
+in
+vscode-utils.buildVscodeMarketplaceExtension rec {
+  mktplcRef = {
+    name = "rescript-vscode";
+    publisher = "chenglou92";
+    inherit version;
+    sha256 = "sha256-JoC9+NkbLAZXkOKDDMB0Xgzmn+w90pHcokerMrdACi4=";
+  };
+  postPatch = ''
+    rm -r ${analysisDir}
+    ln -s ${rescript-editor-analysis}/bin ${analysisDir}
+  '';
+
+  meta = {
+    description = "The official VSCode plugin for ReScript";
+    homepage = "https://github.com/rescript-lang/rescript-vscode";
+    maintainers = [ lib.maintainers.dlip lib.maintainers.jayesh-bhoot ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/rescript-editor-analysis.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/rescript-editor-analysis.nix
new file mode 100644
index 000000000000..125dfa0041bb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/chenglou92.rescript-vscode/rescript-editor-analysis.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, bash, ocaml, ocamlPackages, dune_3, version }:
+
+stdenv.mkDerivation {
+  pname = "rescript-editor-analysis";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "rescript-lang";
+    repo = "rescript-vscode";
+    rev = version;
+    sha256 = "sha256-+Ht8qWwxtFWHFMiV/aoZIs2S3SxkOWgdwSKN+akp/LU=";
+  };
+
+  nativeBuildInputs = [ ocaml dune_3 ocamlPackages.cppo ];
+
+  # Skip testing phases because they need to download and install node modules
+  postPatch = ''
+    cd analysis
+    substituteInPlace Makefile \
+      --replace "build: build-analysis-binary build-reanalyze build-tests" "build: build-analysis-binary" \
+      --replace "test: test-analysis-binary test-reanalyze" "test: test-analysis-binary"
+  '';
+
+  installPhase = ''
+    install -D -m0555 rescript-editor-analysis.exe $out/bin/rescript-editor-analysis.exe
+  '';
+
+  meta = {
+    description = "Analysis binary for the ReScript VSCode plugin";
+    homepage = "https://github.com/rescript-lang/rescript-vscode";
+    maintainers = [ lib.maintainers.dlip lib.maintainers.jayesh-bhoot ];
+    license = lib.licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/contextmapper.context-mapper-vscode-extension/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/contextmapper.context-mapper-vscode-extension/default.nix
new file mode 100644
index 000000000000..077b522b59e2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/contextmapper.context-mapper-vscode-extension/default.nix
@@ -0,0 +1,36 @@
+{ graphviz
+, jre
+, lib
+, makeWrapper
+, vscode-utils
+}:
+
+vscode-utils.buildVscodeMarketplaceExtension rec {
+  mktplcRef = {
+    name = "context-mapper-vscode-extension";
+    publisher = "contextmapper";
+    version = "6.7.0";
+    sha256 = "sha256-vlDVqn1Je0eo5Nf2gyotSvhIa07tWCINe79RZSyMzcA=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    graphviz
+  ];
+
+  postInstall = ''
+    wrapProgram $out/share/vscode/extensions/contextmapper.context-mapper-vscode-extension/lsp/bin/context-mapper-lsp \
+      --set JAVA_HOME "${jre}"
+  '';
+
+  meta = {
+    description = "A VSCode extension for Context Mapper";
+    downloadPage = "https://marketplace.visualstudio.com/items?itemName=${mktplcRef.publisher}.${mktplcRef.name}";
+    homepage = "https://github.com/ContextMapper/vscode-extension";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.rhoriguchi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/default.nix
new file mode 100644
index 000000000000..25d7012651df
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/default.nix
@@ -0,0 +1,3681 @@
+{ config
+, lib
+, fetchurl
+, callPackage
+, vscode-utils
+, asciidoctor
+, nodePackages
+, python3Packages
+, jdk
+, llvmPackages_8
+, llvmPackages_14
+, nixpkgs-fmt
+, protobuf
+, jq
+, shellcheck
+, moreutils
+, racket
+, clojure-lsp
+, alejandra
+, millet
+, shfmt
+, typst-lsp
+, autoPatchelfHook
+, zlib
+, stdenv
+}:
+
+let
+  inherit (vscode-utils) buildVscodeMarketplaceExtension;
+
+  #
+  # Unless there is a good reason not to, we attempt to use the lowercase
+  # version of the extension's unique identifier. The unique identifier can be
+  # found on the marketplace extension page, and is the name under which the
+  # extension is installed by VSCode under `~/.vscode`.
+  #
+  # This means an extension should be located at
+  # ${lib.strings.toLower mktplcRef.publisher}.${lib.string.toLower mktplcRef.name}
+  #
+  baseExtensions = self: lib.mapAttrs (_n: lib.recurseIntoAttrs)
+    {
+      "1Password".op-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "1Password";
+          name = "op-vscode";
+          version = "1.0.4";
+          sha256 = "sha256-s6acue8kgFLf5fs4A7l+IYfhibdY76cLcIwHl+54WVk=";
+        };
+        meta = {
+          changelog = "https://github.com/1Password/op-vscode/releases";
+          description = "A VSCode extension that integrates your development workflow with 1Password service";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=1Password.op-vscode";
+          homepage = "https://github.com/1Password/op-vscode";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers._2gn ];
+        };
+      };
+
+      "2gua".rainbow-brackets = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "2gua";
+          name = "rainbow-brackets";
+          version = "0.0.6";
+          sha256 = "TVBvF/5KQVvWX1uHwZDlmvwGjOO5/lXbgVzB26U8rNQ=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension providing rainbow brackets";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=2gua.rainbow-brackets";
+          homepage = "https://github.com/lcultx/rainbow-brackets";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.CompEng0001 ];
+        };
+      };
+
+      "4ops".terraform = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "4ops";
+          name = "terraform";
+          version = "0.2.5";
+          sha256 = "sha256-y5LljxK8V9Fir9EoG8g9N735gISrlMg3czN21qF/KjI=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      a5huynh.vscode-ron = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-ron";
+          publisher = "a5huynh";
+          version = "0.10.0";
+          sha256 = "sha256-DmyYE7RHOX/RrbIPYCq/x0l081SzmyBAd7yHSUOPkOA=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      adpyke.codesnap = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "codesnap";
+          publisher = "adpyke";
+          version = "1.3.4";
+          sha256 = "sha256-dR6qODSTK377OJpmUqG9R85l1sf9fvJJACjrYhSRWgQ=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      alanz.vscode-hie-server = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-hie-server";
+          publisher = "alanz";
+          version = "0.0.27"; # see the note above
+          sha256 = "1mz0h5zd295i73hbji9ivla8hx02i4yhqcv6l4r23w3f07ql3i8h";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      alefragnani.bookmarks = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "bookmarks";
+          publisher = "alefragnani";
+          version = "13.3.1";
+          sha256 = "sha256-CZSFprI8HMQvc8P9ZH+m0j9J6kqmSJM1/Ik24ghif2A=";
+        };
+        meta = {
+          license = lib.licenses.gpl3;
+        };
+      };
+
+      alefragnani.project-manager = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "project-manager";
+          publisher = "alefragnani";
+          version = "12.7.0";
+          sha256 = "sha256-rBMwvm7qUI6zBrXdYntQlY8WvH2fDBhEuQ1pHDl9fQg=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      alexdima.copy-relative-path = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "copy-relative-path";
+          publisher = "alexdima";
+          version = "0.0.2";
+          sha256 = "06g601n9d6wyyiz659w60phgm011gn9jj5fy0gf5wpi2bljk3vcn";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      alygin.vscode-tlaplus = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-tlaplus";
+          publisher = "alygin";
+          version = "1.5.4";
+          sha256 = "0mf98244z6wzb0vj6qdm3idgr2sr5086x7ss2khaxlrziif395dx";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      angular.ng-template = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "ng-template";
+          publisher = "Angular";
+          version = "15.2.0";
+          sha256 = "sha256-ho3DtXAAafY/mpUcea2OPhy8tpX+blJMyVxbFVUsspk=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/Angular.ng-template/changelog";
+          description = "Editor services for Angular templates";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=Angular.ng-template";
+          homepage = "https://github.com/angular/vscode-ng-language-service";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+      };
+
+      antfu.icons-carbon = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "icons-carbon";
+          publisher = "antfu";
+          version = "0.2.6";
+          sha256 = "sha256-R8eHLuebfgHaKtHPKBaaYybotluuH9WrUBpgyuIVOxc=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      antfu.slidev = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "antfu";
+          name = "slidev";
+          version = "0.4.1";
+          sha256 = "sha256-MNQMOT9LaEVZqelvikBTpUPTsSIA2z5qvLxw51aJw1w=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      antyos.openscad = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "openscad";
+          publisher = "Antyos";
+          version = "1.1.1";
+          sha256 = "1adcw9jj3npk3l6lnlfgji2l529c4s5xp9jl748r9naiy3w3dpjv";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/Antyos.openscad/changelog";
+          description = "OpenSCAD highlighting, snippets, and more for VSCode";
+          homepage = "https://github.com/Antyos/vscode-openscad";
+          license = lib.licenses.gpl3;
+        };
+      };
+
+      apollographql.vscode-apollo = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-apollo";
+          publisher = "apollographql";
+          version = "1.19.11";
+          sha256 = "sha256-EixefDuJiw/p5yAR/UQLK1a1RXJLXlTmOlD34qpAN+U=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/apollographql.vscode-apollo/changelog";
+          description = "Rich editor support for GraphQL client and server development that seamlessly integrates with the Apollo platform";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=apollographql.vscode-apollo";
+          homepage = "https://github.com/apollographql/vscode-graphql";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      arcticicestudio.nord-visual-studio-code = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "nord-visual-studio-code";
+          publisher = "arcticicestudio";
+          version = "0.19.0";
+          sha256 = "sha256-awbqFv6YuYI0tzM/QbHRTUl4B2vNUdy52F4nPmv+dRU=";
+        };
+        meta = {
+          description = "An arctic, north-bluish clean and elegant Visual Studio Code theme.";
+          downloadPage =
+            "https://marketplace.visualstudio.com/items?itemName=arcticicestudio.nord-visual-studio-code";
+          homepage = "https://github.com/arcticicestudio/nord-visual-studio-code";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.imgabe ];
+        };
+      };
+
+      arjun.swagger-viewer = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "Arjun";
+          name = "swagger-viewer";
+          version = "3.1.2";
+          sha256 = "1cjvc99x1q5w3i2vnbxrsl5a1dr9gb3s6s9lnwn6mq5db6iz1nlm";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      arrterian.nix-env-selector = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "nix-env-selector";
+          publisher = "arrterian";
+          version = "1.0.9";
+          sha256 = "sha256-TkxqWZ8X+PAonzeXQ+sI9WI+XlqUHll7YyM7N9uErk0=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      asciidoctor.asciidoctor-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "asciidoctor-vscode";
+          publisher = "asciidoctor";
+          version = "2.8.9";
+          sha256 = "1xkxx5i3nhd0dzqhhdmx0li5jifsgfhv0p5h7xwsscz3gzgsdcyb";
+        };
+
+        postPatch = ''
+          substituteInPlace dist/src/text-parser.js \
+            --replace "get('asciidoctor_command', 'asciidoctor')" \
+                      "get('asciidoctor_command', '${asciidoctor}/bin/asciidoctor')"
+          substituteInPlace dist/src/commands/exportAsPDF.js \
+            --replace "get('asciidoctorpdf_command', 'asciidoctor-pdf')" \
+                      "get('asciidoctorpdf_command', '${asciidoctor}/bin/asciidoctor-pdf')"
+        '';
+
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      asdine.cue = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "cue";
+          publisher = "asdine";
+          version = "0.3.2";
+          sha256 = "sha256-jMXqhgjRdM3UG/9NtiwWAg61mBW8OYVAKDWgb4hzhA4=";
+        };
+        meta = {
+          description = "Cue language support for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=asdine.cue";
+          homepage = "https://github.com/asdine/vscode-cue";
+          changelog = "https://marketplace.visualstudio.com/items/asdine.cue/changelog";
+          license = lib.licenses.mit;
+          maintainers = [lib.maintainers.matthewpi];
+        };
+      };
+
+      astro-build.astro-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "astro-vscode";
+          publisher = "astro-build";
+          version = "1.0.6";
+          sha256 = "sha256-/gpZtOO8MA/MJ1o9eG4qmPqhWRZ5E+elA9Rr/kpOprI=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/astro-build.astro-vscode/changelog";
+          description = "Astro language support for VSCode";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=astro-build.astro-vscode";
+          homepage = "https://github.com/withastro/language-tools";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.wackbyte ];
+        };
+      };
+
+      asvetliakov.vscode-neovim = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-neovim";
+          publisher = "asvetliakov";
+          version = "0.0.97";
+          sha256 = "sha256-rNGW8WB3jBSjThiB0j4/ORKMRAaxFiMiBfaa+dbGu/w=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      attilabuti.brainfuck-syntax = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "brainfuck-syntax";
+          publisher = "attilabuti";
+          version = "0.0.1";
+          sha256 = "sha256-ZcZlHoa2aoCeruMWbUUgfFHsPqyWmd2xFY6AKxJysYE=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/attilabuti.brainfuck-syntax/changelog";
+          description = "VSCode extension providing syntax highlighting support for Brainfuck";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=attilabuti.brainfuck-syntax";
+          homepage = "https://github.com/attilabuti/brainfuck-syntax";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      azdavis.millet = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "Millet";
+          publisher = "azdavis";
+          version = "0.3.5";
+          sha256 = "sha256-lQ7EMs6nsTEgP9BESMpyoZG7QVOe7DXzfg/iZr1+DCQ=";
+        };
+        nativeBuildInputs = [ jq moreutils ];
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration.properties."millet.server.path".default = "${millet}/bin/lang-srv"' package.json | sponge package.json
+        '';
+        meta = {
+          description = "Standard ML support for VS Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=azdavis.millet";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.smasher164 ];
+        };
+      };
+
+      b4dm4n.vscode-nixpkgs-fmt = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "nixpkgs-fmt";
+          publisher = "B4dM4n";
+          version = "0.0.1";
+          sha256 = "sha256-vz2kU36B1xkLci2QwLpl/SBEhfSWltIDJ1r7SorHcr8=";
+        };
+        nativeBuildInputs = [ jq moreutils ];
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration.properties."nixpkgs-fmt.path".default = "${nixpkgs-fmt}/bin/nixpkgs-fmt"' package.json | sponge package.json
+        '';
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      baccata.scaladex-search = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "scaladex-search";
+          publisher = "baccata";
+          version = "0.3.3";
+          sha256 = "sha256-+793uA+cSBHV6t4wAM4j4GeWggLJTl2GENkn8RFIwr0=";
+        };
+        meta = {
+          license = lib.licenses.asl20;
+        };
+      };
+
+      badochov.ocaml-formatter = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "ocaml-formatter";
+          publisher = "badochov";
+          version = "2.0.5";
+          sha256 = "sha256-D04EJButnam/l4aAv1yNbHlTKMb3x1yrS47+9XjpCLI=";
+        };
+        meta = {
+          description = "VSCode Extension Formatter for OCaml language";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=badochov.ocaml-formatter";
+          homepage = "https://github.com/badochov/ocamlformatter-vscode";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      ban.spellright = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "ban";
+          name = "spellright";
+          version = "3.0.112";
+          sha256 = "sha256-79Yg4I0OkfG7PaDYnTA8HK8jrSxre4FGriq0Baiq7wA=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension for Spellchecker";
+          changelog = "https://marketplace.visualstudio.com/items/ban.spellright/changelog";
+          homepage = "https://github.com/bartosz-antosik/vscode-spellright";
+          license = lib.licenses.mit;
+          maintainers = with lib.maintainers; [ onedragon ];
+        };
+      };
+
+      bbenoist.nix = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "Nix";
+          publisher = "bbenoist";
+          version = "1.0.1";
+          sha256 = "0zd0n9f5z1f0ckzfjr38xw2zzmcxg1gjrava7yahg5cvdcw6l35b";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      benfradet.vscode-unison = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-unison";
+          publisher = "benfradet";
+          version = "0.4.0";
+          sha256 = "sha256-IDM9v+LWckf20xnRTj+ThAFSzVxxDVQaJkwO37UIIhs=";
+        };
+        meta = {
+          license = lib.licenses.asl20;
+        };
+      };
+
+      betterthantomorrow.calva = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "calva";
+          publisher = "betterthantomorrow";
+          version = "2.0.205";
+          sha256 = "sha256-umnG1uLB42fUNKjANaKcABjVmqbdOQakd/6TPsEpF9c";
+        };
+        nativeBuildInputs = [ jq moreutils ];
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration[0].properties."calva.clojureLspPath".default = "${clojure-lsp}/bin/clojure-lsp"' package.json | sponge package.json
+        '';
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      bierner.emojisense = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "emojisense";
+          publisher = "bierner";
+          version = "0.9.1";
+          sha256 = "sha256-bfhImi2qMHWkgKqkoStS0NtbXTfj6GpcLkI0PSMjuvg=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      bierner.markdown-checkbox = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "markdown-checkbox";
+          publisher = "bierner";
+          version = "0.4.0";
+          sha256 = "sha256-AoPcdN/67WOzarnF+GIx/nans38Jan8Z5D0StBWIbkk=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      bierner.markdown-emoji = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "markdown-emoji";
+          publisher = "bierner";
+          version = "0.3.0";
+          sha256 = "sha256-rw8/HeDA8kQuiPVDpeOGw1Mscd6vn4utw1Qznsd8lVI=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      bierner.markdown-mermaid = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "markdown-mermaid";
+          publisher = "bierner";
+          version = "1.17.7";
+          sha256 = "sha256-WKe7XxBeYyzmjf/gnPH+5xNOHNhMPAKjtLorYyvT76U=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      bmalehorn.vscode-fish = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-fish";
+          publisher = "bmalehorn";
+          version = "1.0.33";
+          sha256 = "sha256-ZQlG+HrjU4DFfpyiY8o0/ayDms6MGEObW8pV1Lmr5/Y=";
+        };
+        meta.license = lib.licenses.mit;
+      };
+
+      bmewburn.vscode-intelephense-client = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-intelephense-client";
+          publisher = "bmewburn";
+          version = "1.9.5";
+          sha256 = "sha256-KqWSQ+p5KqRVULwjoWuNE+lIEYkaUVkeOwMpXUxccqw=";
+        };
+        meta = {
+          description = "PHP code intelligence for Visual Studio Code";
+          license = lib.licenses.mit;
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client";
+          maintainers = [ lib.maintainers.drupol ];
+        };
+      };
+
+      bodil.file-browser = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "file-browser";
+          publisher = "bodil";
+          version = "0.2.11";
+          sha256 = "sha256-yPVhhsAUZxnlhj58fXkk+yhxop2q7YJ6X4W9dXGKJfo=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      bradlc.vscode-tailwindcss = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-tailwindcss";
+          publisher = "bradlc";
+          version = "0.9.9";
+          sha256 = "sha256-QyB6DtKe9KH2UizLZQfP4YlHz2yF8H9Ehj+M+OdIYe4=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      brettm12345.nixfmt-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "nixfmt-vscode";
+          publisher = "brettm12345";
+          version = "0.0.1";
+          sha256 = "07w35c69vk1l6vipnq3qfack36qcszqxn8j3v332bl0w6m02aa7k";
+        };
+        meta = {
+          license = lib.licenses.mpl20;
+        };
+      };
+
+      bungcip.better-toml = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "better-toml";
+          publisher = "bungcip";
+          version = "0.3.2";
+          sha256 = "sha256-g+LfgjAnSuSj/nSmlPdB0t29kqTmegZB5B1cYzP8kCI=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/bungcip.better-toml/changelog";
+          description = "Better TOML Language support";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=bungcip.better-toml";
+          homepage = "https://github.com/bungcip/better-toml/blob/master/README.md";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      catppuccin = {
+        catppuccin-vsc = buildVscodeMarketplaceExtension {
+          mktplcRef = {
+            name = "catppuccin-vsc";
+            publisher = "catppuccin";
+            version = "2.6.1";
+            sha256 = "sha256-B56b7PeuVnkxEqvd4vL9TYO7s8fuA+LOCTbJQD9e7wY=";
+          };
+          meta = {
+            description = "Soothing pastel theme for VSCode";
+            license = lib.licenses.mit;
+            downloadPage = "https://marketplace.visualstudio.com/items?itemName=Catppuccin.catppuccin-vsc";
+            maintainers = [ lib.maintainers.nullx76 ];
+          };
+        };
+        catppuccin-vsc-icons = buildVscodeMarketplaceExtension {
+          mktplcRef = {
+            name = "catppuccin-vsc-icons";
+            publisher = "catppuccin";
+            version = "0.12.0";
+            sha256 = "sha256-i47tY6DSVtV8Yf6AgZ6njqfhaUFGEpgbRcBF70l2Xe0=";
+          };
+          meta = {
+            description = "Soothing pastel icon theme for VSCode";
+            license = lib.licenses.mit;
+            downloadPage = "https://marketplace.visualstudio.com/items?itemName=Catppuccin.catppuccin-vsc-icons";
+            maintainers = [ lib.maintainers.laurent-f1z1 ];
+          };
+        };
+      };
+
+      charliermarsh.ruff = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "ruff";
+          publisher = "charliermarsh";
+          version = "2023.16.0";
+          sha256 = "sha256-MCRfG2CmGXLX15Qv/cxuH8VE1lJLPs4tXlCNnFqm5lc=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          changelog = "https://github.com/charliermarsh/ruff-vscode/releases";
+          description = "Ruff extension for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff";
+          homepage = "https://github.com/charliermarsh/ruff-vscode/";
+          maintainers = [ lib.maintainers.azd325 ];
+        };
+      };
+
+      chenglou92.rescript-vscode = callPackage ./chenglou92.rescript-vscode { };
+
+      chris-hayes.chatgpt-reborn = buildVscodeMarketplaceExtension {
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/chris-hayes.chatgpt-reborn/changelog";
+          description = "A Visual Studio Code extension to support ChatGPT, GPT-3 and Codex conversations";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=chris-hayes.chatgpt-reborn";
+          homepage = "https://github.com/christopher-hayes/vscode-chatgpt-reborn";
+          license = lib.licenses.isc;
+          maintainers = [ lib.maintainers.drupol ];
+        };
+        mktplcRef = {
+          name = "chatgpt-reborn";
+          publisher = "chris-hayes";
+          version = "3.16.3";
+          sha256 = "wkitG5gmYKYKXRw/zVW04HN1dePiTjbnynFOY/bwxfI=";
+        };
+      };
+
+      christian-kohler.path-intellisense = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "path-intellisense";
+          publisher = "christian-kohler";
+          version = "2.8.4";
+          sha256 = "sha256-FEBYcjJHOwmxVHhhyxqOpk/V6hvtMkhkvLVpmJCMSZw=";
+        };
+        meta = {
+          description = "Visual Studio Code plugin that autocompletes filenames";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense";
+          homepage = "https://github.com/ChristianKohler/PathIntellisense";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.imgabe ];
+        };
+      };
+
+      cmschuetz12.wal = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "wal";
+          publisher = "cmschuetz12";
+          version = "0.1.0";
+          sha256 = "0q089jnzqzhjfnv0vlb5kf747s3mgz64r7q3zscl66zb2pz5q4zd";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      coder.coder-remote = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "coder-remote";
+          publisher = "coder";
+          version = "0.1.18";
+          sha256 = "soNGZuyvG5+haWRcwYmYB+0OcyDAm4UQ419UnEd8waA=";
+        };
+        meta = {
+          description = "An extension for Visual Studio Code to open any Coder workspace in VS Code with a single click.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=coder.coder-remote";
+          homepage = "https://github.com/coder/vscode-coder";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.drupol ];
+        };
+      };
+
+      codezombiech.gitignore = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "gitignore";
+          publisher = "codezombiech";
+          version = "0.9.0";
+          sha256 = "sha256-IHoF+c8Rsi6WnXoCX7x3wKyuMwLh14nbL9sNVJHogHM=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      w88975.code-translate = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "code-translate";
+          publisher = "w88975";
+          version = "1.0.20";
+          sha256 = "sha256-blqLK7S+RmEoyr9zktS5/SNC0GeSXnNpbhltyajoAfw=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension to provide purely hover translation";
+          longDescription = ''
+            Code Translate is a purely hover translation extension
+            - Non-intrusive display of translation results: perfectly integrated with VS Code code analysis.
+            - Powerful word splitting capabilities: supports various forms of word splitting such as camel case and underscore.
+            - Rich local vocabulary: includes 3.4+ million offline words, supporting various rare words.
+            - Based on a rich local vocabulary: Code Translate has super-fast query speed, with each word typically queried in less than 10ms.
+            - Multi-platform support: supports both the desktop version and online version of VS Code, and the plugin can be used on both versions.
+          '';
+          homepage = "https://github.com/w88975/code-translate-vscode";
+          changelog = "https://marketplace.visualstudio.com/items/w88975.code-translate/changelog";
+          license = lib.licenses.mit;
+          maintainers = with lib.maintainers; [ onedragon ];
+        };
+      };
+
+      colejcummins.llvm-syntax-highlighting = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "llvm-syntax-highlighting";
+          publisher = "colejcummins";
+          version = "0.0.3";
+          sha256 = "sha256-D5zLp3ruq0F9UFT9emgOBDLr1tya2Vw52VvCc40TtV0=";
+        };
+        meta = {
+          description = "Lightweight syntax highlighting for LLVM IR";
+          homepage = "https://github.com/colejcummins/llvm-syntax-highlighting";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=colejcummins.llvm-syntax-highlighting";
+          maintainers = [ lib.maintainers.inclyc ];
+          license = lib.licenses.mit;
+        };
+      };
+
+      contextmapper.context-mapper-vscode-extension = callPackage ./contextmapper.context-mapper-vscode-extension { };
+
+      coolbear.systemd-unit-file = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "coolbear";
+          name = "systemd-unit-file";
+          version = "1.0.6";
+          sha256 = "0sc0zsdnxi4wfdlmaqwb6k2qc21dgwx6ipvri36x7agk7m8m4736";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      cweijan.vscode-database-client2 = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-database-client2";
+          publisher = "cweijan";
+          version = "6.3.0";
+          sha256 = "sha256-BFTY3NZQd6XTE3UNO1bWo/LiM4sHujFGOSufDLD4mzM=";
+        };
+        meta = {
+          description = "Database Client For Visual Studio Code";
+          homepage = "https://marketplace.visualstudio.com/items?itemName=cweijan.vscode-mysql-client2";
+          license = lib.licenses.mit;
+        };
+      };
+
+      daohong-emilio.yash = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "daohong-emilio";
+          name = "yash";
+          version = "0.2.9";
+          sha256 = "sha256-5JX6Z7xVPoqGjD1/ySc9ObD14O1sWDpvBj9VbtGO1Cg=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      dart-code.dart-code = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "dart-code";
+          publisher = "dart-code";
+          version = "3.61.20230324";
+          sha256 = "sha256-VVQ32heyzLjM5HdeNAK5PwqB1NsSQ9iQJBwJiJXlu+g=";
+        };
+
+        meta.license = lib.licenses.mit;
+      };
+
+      dart-code.flutter = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "flutter";
+          publisher = "dart-code";
+          version = "3.61.20230301";
+          sha256 = "sha256-t4AfFgxVCl15YOz7NTULvNUcyuiQilEP6jPK4zMAAmc=";
+        };
+
+        meta.license = lib.licenses.mit;
+      };
+
+      davidanson.vscode-markdownlint = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-markdownlint";
+          publisher = "DavidAnson";
+          version = "0.50.0";
+          sha256 = "sha256-F+lryIhSudDz68t1eGrfqI8EuoUUOWU5LfWj0IRCQyY=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/DavidAnson.vscode-markdownlint/changelog";
+          description = "Markdown linting and style checking for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint";
+          homepage = "https://github.com/DavidAnson/vscode-markdownlint";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      davidlday.languagetool-linter = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "languagetool-linter";
+          publisher = "davidlday";
+          version = "0.19.0";
+          sha256 = "sha256-crq6CTXpzwHJL8FPIBneAGjDgUUNdpBt6rIaMCr1F1U=";
+        };
+        meta = {
+          description = "LanguageTool integration for VS Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=davidlday.languagetool-linter";
+          homepage = "https://github.com/davidlday/vscode-languagetool-linter";
+          license = lib.licenses.asl20;
+          maintainers = [ lib.maintainers.ebbertd ];
+        };
+      };
+
+      dbaeumer.vscode-eslint = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-eslint";
+          publisher = "dbaeumer";
+          version = "2.4.0";
+          sha256 = "sha256-7MUQJkLPOF3oO0kpmfP3bWbS3aT7J0RF7f74LW55BQs=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/dbaeumer.vscode-eslint/changelog";
+          description = "Integrates ESLint JavaScript into VS Code.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint";
+          homepage = "https://github.com/Microsoft/vscode-eslint";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      denoland.vscode-deno = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-deno";
+          publisher = "denoland";
+          version = "3.17.0";
+          sha256 = "sha256-ETwpUrYbPXHSkEBq2oM1aCBwt9ItLcXMYc3YWjHLiJE=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/denoland.vscode-deno/changelog";
+          description = "A language server client for Deno";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno";
+          homepage = "https://github.com/denoland/vscode_deno";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+      };
+
+      devsense.composer-php-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "composer-php-vscode";
+          publisher = "devsense";
+          version = "1.33.13032";
+          sha256 = "sha256-4SL7hPcnxN6Bq0Cclaszk2zlYF1xR2w/8zaJo16OT+U=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/DEVSENSE.composer-php-vscode/changelog";
+          description = "A visual studio code extension for full development integration for Composer, the PHP package manager.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=DEVSENSE.composer-php-vscode";
+          homepage = "https://github.com/DEVSENSE/phptools-docs";
+          license = lib.licenses.asl20;
+          maintainers = [ lib.maintainers.drupol ];
+        };
+      };
+
+      devsense.phptools-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = let
+          sources = {
+            "x86_64-linux" = {
+              arch = "linux-x64";
+              sha256 = "sha256-ccMkaXppkgdsN2XtSFaw85xLUCFMDF1z+XidP0KAHCA=";
+            };
+            "x86_64-darwin" = {
+              arch = "darwin-x64";
+              sha256 = "17lsf736jagw2q6dwxvpj2dspiqrlyvmmhv6p6cf81vxijpgmq9d";
+            };
+            "aarch64-linux" = {
+              arch = "linux-arm64";
+              sha256 = "1cnfzzpikcsp1l1a8amim0fz5r1pkszn231cfl745ggiksbjyhsp";
+            };
+            "aarch64-darwin" = {
+              arch = "darwin-arm64";
+              sha256 = "0jli6l9qrssnpm5a3m1g7g1dw2i5bv9wxd0gqg6vda7dwfs2f494";
+            };
+          };
+        in {
+          name = "phptools-vscode";
+          publisher = "devsense";
+          version = "1.33.13032";
+        } // sources.${stdenv.system};
+
+        nativeBuildInputs = [
+          autoPatchelfHook
+        ];
+
+        buildInputs = [
+          zlib
+          stdenv.cc.cc.lib
+        ];
+
+        postInstall = ''
+          chmod +x $out/share/vscode/extensions/devsense.phptools-vscode/out/server/devsense.php.ls
+        '';
+
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/DEVSENSE.phptools-vscode/changelog";
+          description = "A visual studio code extension for full development integration for the PHP language.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=DEVSENSE.phptools-vscode";
+          homepage = "https://github.com/DEVSENSE/phptools-docs";
+          license = lib.licenses.asl20;
+          maintainers = [ lib.maintainers.drupol ];
+          platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" "aarch64-linux" ];
+        };
+      };
+
+      devsense.profiler-php-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "profiler-php-vscode";
+          publisher = "devsense";
+          version = "1.33.13032";
+          sha256 = "sha256-P0lzZkCHtLHJI/gwB+wbrZPR3OOia5VxTMCC2ZQULBg=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/DEVSENSE.profiler-php-vscode/changelog";
+          description = "A visual studio code extension for PHP and XDebug profiling and inspecting.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=DEVSENSE.profiler-php-vscode";
+          homepage = "https://github.com/DEVSENSE/phptools-docs";
+          license = lib.licenses.asl20;
+          maintainers = [ lib.maintainers.drupol ];
+        };
+      };
+
+      dhall.dhall-lang = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "dhall-lang";
+          publisher = "dhall";
+          version = "0.0.4";
+          sha256 = "0sa04srhqmngmw71slnrapi2xay0arj42j4gkan8i11n7bfi1xpf";
+        };
+        meta = { license = lib.licenses.mit; };
+      };
+
+      dhall.vscode-dhall-lsp-server = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-dhall-lsp-server";
+          publisher = "dhall";
+          version = "0.0.4";
+          sha256 = "1zin7s827bpf9yvzpxpr5n6mv0b5rhh3civsqzmj52mdq365d2js";
+        };
+        meta = { license = lib.licenses.mit; };
+      };
+
+      disneystreaming.smithy = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "disneystreaming";
+          name = "smithy";
+          version = "0.0.8";
+          sha256 = "sha256-BQPiSxiPPjdNPtIJI8L+558DVKxngPAI9sscpcJSJUI=";
+        };
+        meta = { license = lib.licenses.asl20; };
+      };
+
+      divyanshuagrawal.competitive-programming-helper = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "competitive-programming-helper";
+          publisher = "DivyanshuAgrawal";
+          version = "5.10.0";
+          sha256 = "sha256-KALTldVaptKt8k2Y6PMqhJEMrayB4yn86x2CxHn6Ba0=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/DivyanshuAgrawal.competitive-programming-helper/changelog";
+          description = "Makes judging, compiling, and downloading problems for competitve programming easy. Also supports auto-submit for a few sites.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=DivyanshuAgrawal.competitive-programming-helper";
+          homepage = "https://github.com/agrawal-d/cph";
+          license = lib.licenses.gpl3;
+          maintainers = [ lib.maintainers.arcticlimer ];
+        };
+      };
+
+      donjayamanne.githistory = buildVscodeMarketplaceExtension {
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/donjayamanne.githistory/changelog";
+          description = "View git log, file history, compare branches or commits";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory";
+          homepage = "https://github.com/DonJayamanne/gitHistoryVSCode/";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+        mktplcRef = {
+          name = "githistory";
+          publisher = "donjayamanne";
+          version = "0.6.20";
+          sha256 = "sha256-nEdYS9/cMS4dcbFje23a47QBZr9eDK3dvtkFWqA+OHU=";
+        };
+      };
+
+      dotjoshjohnson.xml = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "xml";
+          publisher = "dotjoshjohnson";
+          version = "2.5.1";
+          sha256 = "1v4x6yhzny1f8f4jzm4g7vqmqg5bqchyx4n25mkgvw2xp6yls037";
+        };
+        meta = {
+          description = "XML Tools";
+          homepage = "https://github.com/DotJoshJohnson/vscode-xml";
+          license = lib.licenses.mit;
+        };
+      };
+
+      dracula-theme.theme-dracula = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "theme-dracula";
+          publisher = "dracula-theme";
+          version = "2.24.2";
+          sha256 = "sha256-YNqWEIvlEI29mfPxOQVdd4db9G2qNodhz8B0MCAAWK8=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/dracula-theme.theme-dracula/changelog";
+          description = "Dark theme for many editors, shells, and more";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=dracula-theme.theme-dracula";
+          homepage = "https://draculatheme.com/";
+          license = lib.licenses.mit;
+        };
+      };
+
+      eamodio.gitlens = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "gitlens";
+          publisher = "eamodio";
+          # Stable versions are listed on the GitHub releases page and use a
+          # semver scheme, contrary to preview versions which are listed on
+          # the VSCode Marketplace and use a calver scheme. We should avoid
+          # using preview versions, because they expire after two weeks.
+          version = "13.4.0";
+          sha256 = "sha256-CYI62sWPlJNRP2KIkg4vQutIMC6gaCxtTVoOWZIS8Lw=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/eamodio.gitlens/changelog";
+          description = "GitLens supercharges the Git capabilities built into Visual Studio Code.";
+          longDescription = ''
+            Supercharge the Git capabilities built into Visual Studio Code — Visualize code authorship at a glance via Git
+            blame annotations and code lens, seamlessly navigate and explore Git repositories, gain valuable insights via
+            powerful comparison commands, and so much more
+          '';
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens";
+          homepage = "https://gitlens.amod.io/";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+      };
+
+      editorconfig.editorconfig = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "EditorConfig";
+          publisher = "EditorConfig";
+          version = "0.16.4";
+          sha256 = "0fa4h9hk1xq6j3zfxvf483sbb4bd17fjl5cdm3rll7z9kaigdqwg";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/EditorConfig.EditorConfig/changelog";
+          description = "EditorConfig Support for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig";
+          homepage = "https://github.com/editorconfig/editorconfig-vscode";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.dbirks ];
+        };
+      };
+
+      edonet.vscode-command-runner = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-command-runner";
+          publisher = "edonet";
+          version = "0.0.123";
+          sha256 = "sha256-Fq0KgW5N6urj8hMUs6Spidy47jwIkpkmBUlpXMVnq7s=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      eg2.vscode-npm-script = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-npm-script";
+          publisher = "eg2";
+          version = "0.3.29";
+          sha256 = "sha256-k6DtmhYBj7mg8SUU3pg+ezRzWvhiECqYQVj9LDhhV4I=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      elixir-lsp.vscode-elixir-ls = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "elixir-ls";
+          publisher = "JakeBecker";
+          version = "0.14.7";
+          sha256 = "sha256-RkwgQqasBKMA+0293QhbZhgyGSqhJSic5DuIpBB+OEA=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/JakeBecker.elixir-ls/changelog";
+          description = "Elixir support with debugger, autocomplete, and more. Powered by ElixirLS.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=JakeBecker.elixir-ls";
+          homepage = "https://github.com/elixir-lsp/elixir-ls";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      elmtooling.elm-ls-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "elm-ls-vscode";
+          publisher = "Elmtooling";
+          version = "2.6.0";
+          sha256 = "sha256-iNFc7YJFl3d4/BJE9TPJfL0iqEkUtyEyVt4v1J2bXts=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/Elmtooling.elm-ls-vscode/changelog";
+          description = "Elm language server";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=Elmtooling.elm-ls-vscode";
+          homepage = "https://github.com/elm-tooling/elm-language-client-vscode";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.mcwitt ];
+        };
+      };
+
+      emmanuelbeziat.vscode-great-icons = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-great-icons";
+          publisher = "emmanuelbeziat";
+          version = "2.1.92";
+          sha256 = "sha256-cywFx33oTQZxFUxL9qCpV12pV2tP0ujR4osCdtSOOTc=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      equinusocio.vsc-material-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vsc-material-theme";
+          publisher = "Equinusocio";
+          version = "33.8.0";
+          sha256 = "sha256-+I4AUwsrElT62XNvmuAC2iBfHfjNYY0bmAqzQvfwUYM=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/Equinusocio.vsc-material-theme/changelog";
+          description = "The most epic theme now for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme";
+          homepage = "https://github.com/material-theme/vsc-material-theme";
+          license = lib.licenses.asl20;
+          maintainers = [ lib.maintainers.stunkymonkey ];
+        };
+      };
+
+      esbenp.prettier-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "prettier-vscode";
+          publisher = "esbenp";
+          version = "9.13.0";
+          sha256 = "sha256-Iqz1O6odSzAfojCgGDwDA1YtnWU5Ei7vx9Qt25/1SLw=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/esbenp.prettier-vscode/changelog";
+          description = "Code formatter using prettier";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode";
+          homepage = "https://github.com/prettier/prettier-vscode";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      ethansk.restore-terminals = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "restore-terminals";
+          publisher = "ethansk";
+          version = "1.1.8";
+          sha256 = "sha256-pZK/QNomQoFRsL6LRIKvWQj8/SYo2ZdVU47Gsmb9MXo=";
+        };
+      };
+
+      eugleo.magic-racket = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "magic-racket";
+          publisher = "evzen-wybitul";
+          version = "0.6.4";
+          sha256 = "sha256-Hxa4VPm3QvJICzpDyfk94fGHu1hr+YN9szVBwDB8X4U=";
+        };
+        nativeBuildInputs = [ jq moreutils ];
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration.properties."magicRacket.general.racketPath".default = "${racket}/bin/racket"' package.json | sponge package.json
+          jq '.contributes.configuration.properties."magicRacket.general.racoPath".default = "${racket}/bin/raco"' package.json | sponge package.json
+        '';
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/evzen-wybitul.magic-racket/changelog";
+          description = "The best coding experience for Racket in VS Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=evzen-wybitul.magic-racket";
+          homepage = "https://github.com/Eugleo/magic-racket";
+          license = lib.licenses.agpl3Only;
+        };
+      };
+
+      ExiaHuang.dictionary = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "ExiaHuang";
+          name = "dictionary";
+          version = "0.0.2";
+          sha256 = "sha256-caNcbDTB/F2mdlGpfIfJv13lzY5Wwj7p7r8dAte9+3A=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension of using chinese-english dictonary in right-click menu";
+          homepage = "https://github.com/exiahuang/fanyi-vscode";
+          changelog = "https://marketplace.visualstudio.com/items/ExiaHuang.dictionary/changelog";
+          license = lib.licenses.gpl3Only;
+          maintainers = with lib.maintainers; [ onedragon ];
+        };
+      };
+
+      file-icons.file-icons = buildVscodeMarketplaceExtension {
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/file-icons.file-icons/changelog";
+          description = "File-specific icons in VSCode for improved visual grepping.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=file-icons.file-icons";
+          homepage = "https://github.com/file-icons/vscode";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+        mktplcRef = {
+          name = "file-icons";
+          publisher = "file-icons";
+          version = "1.0.29";
+          sha256 = "05x45f9yaivsz8a1ahlv5m8gy2kkz71850dhdvwmgii0vljc8jc6";
+        };
+      };
+
+      firefox-devtools.vscode-firefox-debug = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-firefox-debug";
+          publisher = "firefox-devtools";
+          version = "2.9.8";
+          sha256 = "sha256-MCL562FPgEfhUM1KH5LMl7BblbjIkQ4UEwB67RlO5Mk=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/firefox-devtools.vscode-firefox-debug/changelog";
+          description = "A Visual Studio Code extension for debugging web applications and browser extensions in Firefox";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=firefox-devtools.vscode-firefox-debug";
+          homepage = "https://github.com/firefox-devtools/vscode-firefox-debug";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.felschr ];
+        };
+      };
+
+      foam.foam-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "foam-vscode";
+          publisher = "foam";
+          version = "0.21.1";
+          sha256 = "sha256-Ff1g+Qu4nUGR3g5PqOwP7W6S+3jje9gz1HK8J0+B65w=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/foam.foam-vscode/changelog";
+          description = "A personal knowledge management and sharing system for VSCode ";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=foam.foam-vscode";
+          homepage = "https://foambubble.github.io/";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+      };
+
+      formulahendry.auto-close-tag = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "auto-close-tag";
+          publisher = "formulahendry";
+          version = "0.5.14";
+          sha256 = "sha256-XYYHS2QTy8WYjtUYYWsIESzmH4dRQLlXQpJq78BolMw=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      formulahendry.auto-rename-tag = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "auto-rename-tag";
+          publisher = "formulahendry";
+          version = "0.1.10";
+          sha256 = "sha256-uXqWebxnDwaUVLFG6MUh4bZ7jw5d2rTHRm5NoR2n0Vs=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      formulahendry.code-runner = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "code-runner";
+          publisher = "formulahendry";
+          version = "0.12.0";
+          sha256 = "sha256-Q2gcuclG7NLR81HjKj/0RF0jM5Eqe2vZMbpoabp/osg=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      foxundermoon.shell-format = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "shell-format";
+          publisher = "foxundermoon";
+          version = "7.1.0";
+          sha256 = "09z72mdr5bfdcb67xyzlv7lb9vyjlc3k9ackj4jgixfk40c68cnj";
+        };
+
+        nativeBuildInputs = [ jq moreutils ];
+
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration.properties."shellformat.path".default = "${shfmt}/bin/shfmt"' package.json | sponge package.json
+        '';
+
+        meta = {
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format";
+          homepage = "https://github.com/foxundermoon/vs-shell-format";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.dbirks ];
+        };
+      };
+
+      freebroccolo.reasonml = buildVscodeMarketplaceExtension {
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/freebroccolo.reasonml/changelog";
+          description = "Reason support for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=freebroccolo.reasonml";
+          homepage = "https://github.com/reasonml-editor/vscode-reasonml";
+          license = lib.licenses.asl20;
+          maintainers = [ ];
+        };
+        mktplcRef = {
+          name = "reasonml";
+          publisher = "freebroccolo";
+          version = "1.0.38";
+          sha256 = "1nay6qs9vcxd85ra4bv93gg3aqg3r2wmcnqmcsy9n8pg1ds1vngd";
+        };
+      };
+
+      funkyremi.vscode-google-translate = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "funkyremi";
+          name = "vscode-google-translate";
+          version = "1.4.13";
+          sha256 = "sha256-9Vo6lwqD1eE3zY0Gi9ME/6lPwmwuJ3Iq9StHPvncnM4=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension using google translation to helping you quickly translate text right in your code rocket";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=funkyremi.vscode-google-translate";
+          homepage = "https://github.com/funkyremi/vscode-google-translate.git";
+          changelog = "https://marketplace.visualstudio.com/items/funkyremi.vscode-google-translate/changelog";
+          license = lib.licenses.mit;
+          maintainers = with lib.maintainers; [ onedragon ];
+        };
+      };
+
+      gencer.html-slim-scss-css-class-completion = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "html-slim-scss-css-class-completion";
+          publisher = "gencer";
+          version = "1.7.8";
+          sha256 = "18qws35qvnl0ahk5sxh4mzkw0ib788y1l97ijmpjszs0cd4bfsa6";
+        };
+        meta = {
+          description = "VSCode extension for SCSS";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=gencer.html-slim-scss-css-class-completion";
+          homepage = "https://github.com/gencer/SCSS-Everywhere";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      genieai.chatgpt-vscode = buildVscodeMarketplaceExtension {
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/genieai.chatgpt-vscode/changelog";
+          description = "A Visual Studio Code extension to support ChatGPT, GPT-3 and Codex conversations";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode";
+          homepage = "https://github.com/ai-genie/chatgpt-vscode";
+          license = lib.licenses.isc;
+          maintainers = [ lib.maintainers.drupol ];
+        };
+        mktplcRef = {
+          name = "chatgpt-vscode";
+          publisher = "genieai";
+          version = "0.0.8";
+          sha256 = "RKvmZkegFs4y+sEVaamPRO1F1E+k4jJyI0Q9XqKowrQ=";
+        };
+      };
+
+      github.codespaces = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "github";
+          name = "codespaces";
+          version = "1.14.7";
+          sha256 = "pcZGMxTVnMeD6rnNV0d9Wysk6MrYiYcJ+byuH9VR0ds=";
+        };
+        meta = { license = lib.licenses.unfree; };
+      };
+
+      github.copilot = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "github";
+          name = "copilot";
+          version = "1.86.82";
+          sha256 = "isaqjrAmu/08gnNKQPeMV4Xc8u0Hx8gB2c78WE54kYQ=";
+        };
+        meta = {
+          description = "GitHub Copilot uses OpenAI Codex to suggest code and entire functions in real-time right from your editor.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=GitHub.copilot";
+          homepage = "https://github.com/features/copilot";
+          license = lib.licenses.unfree;
+          maintainers = [ lib.maintainers.Zimmi48 ];
+        };
+      };
+
+      github.copilot-chat = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "github";
+          name = "copilot-chat";
+          version = "0.1.2023060101";
+          sha256 = "sha256-g3UIcy2TpD3m8EamxneUXYAV/bbCPvPhOWdcuXPkK9g=";
+        };
+        meta = {
+          description = "GitHub Copilot Chat is a companion extension to GitHub Copilot that houses experimental chat features";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat";
+          homepage = "https://github.com/features/copilot";
+          license = lib.licenses.unfree;
+          maintainers = [ lib.maintainers.laurent-f1z1 ];
+        };
+      };
+
+      github.github-vscode-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "github-vscode-theme";
+          publisher = "github";
+          version = "6.3.4";
+          sha256 = "sha256-JbI0B7jxt/2pNg/hMjAE5pBBa3LbUdi+GF0iEZUDUDM=";
+        };
+        meta = {
+          description = "GitHub theme for VS Code";
+          downloadPage =
+            "https://marketplace.visualstudio.com/items?itemName=GitHub.github-vscode-theme";
+          homepage = "https://github.com/primer/github-vscode-theme";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.hugolgst ];
+        };
+      };
+
+      github.vscode-github-actions = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-github-actions";
+          publisher = "github";
+          version = "0.25.6";
+          sha256 = "sha256-HRj/AQI9E6HDkZ2ok/h/+c9HHq1wVXQPAt5mb/Ij+BI=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension for GitHub Actions workflows and runs for github.com hosted repositories";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=github.vscode-github-actions";
+          homepage = "https://github.com/github/vscode-github-actions";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.drupol ];
+        };
+      };
+
+      github.vscode-pull-request-github = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-pull-request-github";
+          publisher = "github";
+          # Stable versions are listed on the GitHub releases page and use a
+          # semver scheme, contrary to preview versions which are listed on
+          # the VSCode Marketplace and use a calver scheme. We should avoid
+          # using preview versions, because they can require insider versions
+          # of VS Code
+          version = "0.64.0";
+          sha256 = "tgQD3o5uMbWofVx7FPyWT1yaeu2e4aPxterN4yXA33U=";
+        };
+        meta = { license = lib.licenses.mit; };
+      };
+
+      gitlab.gitlab-workflow = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "gitlab-workflow";
+          publisher = "gitlab";
+          version = "3.60.0";
+          sha256 = "sha256-rH0+6sQfBfI8SrKY9GGtTOONdzKus6Z62E8Qv5xY7Fw=";
+        };
+        meta = {
+          description = "GitLab extension for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=gitlab.gitlab-workflow";
+          homepage = "https://gitlab.com/gitlab-org/gitlab-vscode-extension#readme";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      golang.go = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "Go";
+          publisher = "golang";
+          version = "0.38.0";
+          sha256 = "sha256-wOWouVz4mE4BzmgQOLQyVWsMadMqeUkFWHnruxStU0Q=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      grapecity.gc-excelviewer = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "gc-excelviewer";
+          publisher = "grapecity";
+          version = "4.2.56";
+          sha256 = "sha256-lrKkxaqPDouWzDP1uUE4Rgt9mI61jUOi/xZ85A0mnrk=";
+        };
+        meta = {
+          description = "Edit Excel spreadsheets and CSV files in Visual Studio Code and VS Code for the Web";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=grapecity.gc-excelviewer";
+          homepage = "https://github.com/jjuback/gc-excelviewer";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      graphql.vscode-graphql = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-graphql";
+          publisher = "GraphQL";
+          version = "0.8.7";
+          sha256 = "sha256-u3VcpgLKiEeUr1I6w71wleKyaO6v0gmHiw5Ama6fv88=";
+        };
+        meta = {
+          description = "GraphQL extension for VSCode built with the aim to tightly integrate the GraphQL Ecosystem with VSCode for an awesome developer experience.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=GraphQL.vscode-graphql";
+          homepage = "https://github.com/graphql/graphiql/tree/main/packages/vscode-graphql";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.Enzime ];
+        };
+      };
+
+      graphql.vscode-graphql-syntax = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-graphql-syntax";
+          publisher = "GraphQL";
+          version = "1.1.0";
+          sha256 = "sha256-qazU0UyZ9de6Huj2AYZqqBo4jVW/ZQmFJhV7XXAblxo=";
+        };
+        meta = {
+          description = "Adds full GraphQL syntax highlighting and language support such as bracket matching.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=GraphQL.vscode-graphql-syntax";
+          homepage = "https://github.com/graphql/graphiql/tree/main/packages/vscode-graphql-syntax";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.Enzime ];
+        };
+      };
+
+      gruntfuggly.todo-tree = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "todo-tree";
+          publisher = "Gruntfuggly";
+          version = "0.0.224";
+          sha256 = "sha256-ObFmzAaOlbtWC31JRYR/1y+JK1h22SVDPPRWWqPzrQs=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      hashicorp.terraform = callPackage ./hashicorp.terraform { };
+
+      haskell.haskell = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "haskell";
+          publisher = "haskell";
+          version = "2.2.2";
+          sha256 = "sha256-zWdIVdz+kZg7KZQ7LeBCB4aB9wg8dUbkWfzGlM0Fq7Q=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      hookyqr.beautify = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "beautify";
+          publisher = "HookyQR";
+          version = "1.5.0";
+          sha256 = "1c0kfavdwgwham92xrh0gnyxkrl9qlkpv39l1yhrldn8vd10fj5i";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      humao.rest-client = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "humao";
+          name = "rest-client";
+          version = "0.25.1";
+          sha256 = "sha256-DSzZ9wGB0IVK8gYOzLLbT03WX3xSmR/IUVZkDzcczKc=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ibm.output-colorizer = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "output-colorizer";
+          publisher = "IBM";
+          version = "0.1.2";
+          sha256 = "0i9kpnlk3naycc7k8gmcxas3s06d67wxr3nnyv5hxmsnsx5sfvb7";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      iciclesoft.workspacesort = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "workspacesort";
+          publisher = "iciclesoft";
+          version = "1.6.2";
+          sha256 = "sha256-ZsjBgoTr4LGQW0kn+CtbdLwpPHmlYl5LKhwXIzcPe2o=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/iciclesoft.workspacesort/changelog";
+          description = "Sort workspace-folders alphabetically rather than in chronological order";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=iciclesoft.workspacesort";
+          homepage = "https://github.com/iciclesoft/workspacesort-for-VSCode";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.dbirks ];
+        };
+      };
+
+      influxdata.flux = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "influxdata";
+          name = "flux";
+          version = "1.0.4";
+          sha256 = "sha256-KIKROyfkosBS1Resgl+s3VENVg4ibaeIgKjermXESoA=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      intellsmi.comment-translate = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "intellsmi";
+          name = "comment-translate";
+          version = "2.2.4";
+          sha256 = "sha256-g6mlScxv8opZuqgWtTJ3k0Yo7W7WzIkwB+8lWf6cMiU=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension to translate the comments for computer language";
+          longDescription = ''
+            This plugin uses the Google Translate API to translate comments for the VSCode programming language.
+          '';
+          homepage = "https://github.com/intellism/vscode-comment-translate/blob/HEAD/doc/README.md";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=intellsmi.comment-translate";
+          changelog = "https://marketplace.visualstudio.com/items/intellsmi.comment-translate/changelog";
+          maintainers = with lib.maintainers; [ onedragon ];
+          license = lib.licenses.mit;
+        };
+      };
+
+      ionide.ionide-fsharp = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "Ionide-fsharp";
+          publisher = "Ionide";
+          version = "7.5.4";
+          sha256 = "sha256-cM3ssUzQnqt5WL8UaLYkrmfHscVa2sGa7/UWLXMIHGg=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/Ionide.Ionide-fsharp/changelog";
+          description = "Enhanced F# Language Features for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=Ionide.Ionide-fsharp";
+          homepage = "https://ionide.io";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+      };
+
+      irongeek.vscode-env = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-env";
+          publisher = "irongeek";
+          version = "0.1.0";
+          sha256 = "sha256-URq90lOFtPCNfSIl2NUwihwRQyqgDysGmBc3NG7o7vk=";
+        };
+        meta = {
+          description = "Adds formatting and syntax highlighting support for env files (.env) to Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=IronGeek.vscode-env";
+          homepage = "https://github.com/IronGeek/vscode-env.git";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      james-yu.latex-workshop = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "latex-workshop";
+          publisher = "James-Yu";
+          version = "9.10.0";
+          sha256 = "s0+8952svPSA69M4H29zuIxUWV6xNRpIqLNd8pzGJhY=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/James-Yu.latex-workshop/changelog";
+          description = "LaTeX Workshop Extension";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop";
+          homepage = "https://github.com/James-Yu/LaTeX-Workshop";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      janet-lang.vscode-janet = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-janet";
+          publisher = "janet-lang";
+          version = "0.0.2";
+          sha256 = "sha256-oj0e++z2BtadIXOnTlocIIHliYweZ1iyrV08DwatfLI=";
+        };
+        meta = {
+          description = "Janet language support for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=janet-lang.vscode-janet";
+          homepage = "https://github.com/janet-lang/vscode-janet";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.wackbyte ];
+        };
+      };
+
+      jdinhlife.gruvbox = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "gruvbox";
+          publisher = "jdinhlife";
+          version = "1.8.0";
+          sha256 = "sha256-P4FbbcRcKWbnC86TSnzQaGn2gHWkDM9I4hj4GiHNPS4=";
+        };
+        meta = {
+          description = "Gruvbox Theme";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=jdinhlife.gruvbox";
+          homepage = "https://github.com/jdinhify/vscode-theme-gruvbox";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.imgabe ];
+        };
+      };
+
+      jebbs.plantuml = callPackage ./jebbs.plantuml { };
+
+      jellyedwards.gitsweep = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "jellyedwards";
+          name = "gitsweep";
+          version = "1.0.0";
+          sha256 = "sha256-XBD8rN6E/0GjZ3zXgR45MN9v4PYrEXBSzN7+CcLrRsg=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/jellyedwards.gitsweep/changelog";
+          description = "VS Code extension which allows you to easily exclude modified or new files so they don't get committed accidentally";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=jellyedwards.gitsweep";
+          homepage = "https://github.com/jellyedwards/gitsweep";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.MatthieuBarthel ];
+        };
+      };
+
+      jkillian.custom-local-formatters = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "jkillian";
+          name = "custom-local-formatters";
+          version = "0.0.6";
+          sha256 = "sha256-FYDkOuoiF/N24BFG9GOqtTDwq84txmaa1acdzfskf/c=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      jnoortheen.nix-ide = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "nix-ide";
+          publisher = "jnoortheen";
+          version = "0.2.1";
+          sha256 = "sha256-yC4ybThMFA2ncGhp8BYD7IrwYiDU3226hewsRvJYKy4=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/jnoortheen.nix-ide/changelog";
+          description = "Nix language support with formatting and error report";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=jnoortheen.nix-ide";
+          homepage = "https://github.com/jnoortheen/vscode-nix-ide";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.SuperSandro2000 ];
+        };
+      };
+
+      jock.svg = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "svg";
+          publisher = "jock";
+          version = "1.5.2";
+          sha256 = "sha256-Ii2e65BJU+Vw3i8917dgZtGsiSn6qConu8SJ+IqF82U=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      johnpapa.vscode-peacock = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-peacock";
+          publisher = "johnpapa";
+          version = "4.2.2";
+          sha256 = "1z9crpz025ha9hgc9mxxg3vyrsfpf9d16zm1vrf4q592j9156d2m";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      justusadam.language-haskell = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "language-haskell";
+          publisher = "justusadam";
+          version = "3.6.0";
+          sha256 = "sha256-rZXRzPmu7IYmyRWANtpJp3wp0r/RwB7eGHEJa7hBvoQ=";
+        };
+        meta = {
+          license = lib.licenses.bsd3;
+        };
+      };
+
+      kahole.magit = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "magit";
+          publisher = "kahole";
+          version = "0.6.40";
+          sha256 = "sha256-AwkjfKBlAl6hTRN1nE6UuUuDXMJUXXDK2+3YzUp9drc=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      kalebpace.balena-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "balena-vscode";
+          publisher = "kalebpace";
+          version = "0.1.3";
+          sha256 = "sha256-CecEv19nEtnMe0KlCMNBM9ZAjbAVgPNUcZ6cBxHw44M=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/kalebpace.balena-vscode/changelog";
+          description = "VS Code extension for integration with Balena";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=kalebpace.balena-vscode";
+          homepage = "https://github.com/balena-vscode/balena-vscode";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kalebpace ];
+        };
+      };
+
+      kamadorueda.alejandra = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "alejandra";
+          publisher = "kamadorueda";
+          version = "1.0.0";
+          sha256 = "sha256-COlEjKhm8tK5XfOjrpVUDQ7x3JaOLiYoZ4MdwTL8ktk=";
+        };
+        nativeBuildInputs = [ jq moreutils ];
+        postInstall = ''
+          cd "$out/$installPrefix"
+
+          jq -e '
+            .contributes.configuration.properties."alejandra.program".default =
+              "${alejandra}/bin/alejandra" |
+            .contributes.configurationDefaults."alejandra.program" =
+              "${alejandra}/bin/alejandra"
+          ' \
+          < package.json \
+          | sponge package.json
+        '';
+        meta = {
+          description = "The Uncompromising Nix Code Formatter";
+          homepage = "https://github.com/kamadorueda/alejandra";
+          license = lib.licenses.unlicense;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      kamikillerto.vscode-colorize = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-colorize";
+          publisher = "kamikillerto";
+          version = "0.11.1";
+          sha256 = "1h82b1jz86k2qznprng5066afinkrd7j3738a56idqr3vvvqnbsm";
+        };
+        meta = {
+          license = lib.licenses.asl20;
+        };
+      };
+
+      kddejong.vscode-cfn-lint =
+        let
+          inherit (python3Packages) cfn-lint;
+        in
+        buildVscodeMarketplaceExtension {
+          mktplcRef = {
+            name = "vscode-cfn-lint";
+            publisher = "kddejong";
+            version = "0.21.0";
+            sha256 = "sha256-IueXiN+077tiecAsVCzgYksWYTs00mZv6XJVMtRJ/PQ=";
+          };
+
+          nativeBuildInputs = [ jq moreutils ];
+
+          buildInputs = [ cfn-lint ];
+
+          postInstall = ''
+            cd "$out/$installPrefix"
+            jq '.contributes.configuration.properties."cfnLint.path".default = "${cfn-lint}/bin/cfn-lint"' package.json | sponge package.json
+          '';
+
+          meta = {
+            description = "CloudFormation Linter IDE integration, autocompletion, and documentation";
+            homepage = "https://github.com/aws-cloudformation/cfn-lint-visual-studio-code";
+            license = lib.licenses.asl20;
+            maintainers = [ lib.maintainers.wolfangaukang ];
+          };
+        };
+
+      kubukoz.nickel-syntax = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "nickel-syntax";
+          publisher = "kubukoz";
+          version = "0.0.2";
+          sha256 = "sha256-ffPZd717Y2OF4d9MWE6zKwcsGWS90ZJvhWkqP831tVM=";
+        };
+        meta = {
+          license = lib.licenses.asl20;
+        };
+      };
+
+      llvm-org.lldb-vscode = llvmPackages_8.lldb;
+
+      llvm-vs-code-extensions.vscode-clangd = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-clangd";
+          publisher = "llvm-vs-code-extensions";
+          version = "0.1.24";
+          sha256 = "sha256-yOpsYjjwHRXxbiHDPgrtswUtgbQAo+3RgN2s6UYe9mg=";
+        };
+        meta = {
+          description = "C/C++ completion, navigation, and insights";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd";
+          homepage = "https://github.com/clangd/vscode-clangd";
+          changelog = "https://marketplace.visualstudio.com/items/llvm-vs-code-extensions.vscode-clangd/changelog";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.wackbyte ];
+        };
+      };
+
+      lokalise.i18n-ally = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "i18n-ally";
+          publisher = "Lokalise";
+          version = "2.8.1";
+          sha256 = "sha256-oDW7ijcObfOP7ZNggSHX0aiI5FkoJ/iQD92bRV0eWVQ=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      lucperkins.vrl-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "lucperkins";
+          name = "vrl-vscode";
+          version = "0.1.4";
+          sha256 = "sha256-xcGa43iPwUR6spOJGTmmWA1dOMNMQEdiuhMZPYZ+dTU=";
+        };
+        meta = {
+          description = "VS Code extension for Vector Remap Language (VRL)";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=lucperkins.vrl-vscode";
+          homepage = "https://github.com/lucperkins/vrl-vscode";
+          license = lib.licenses.mpl20;
+          maintainers = [ lib.maintainers.lucperkins ];
+        };
+      };
+
+      mads-hartmann.bash-ide-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "mads-hartmann";
+          name = "bash-ide-vscode";
+          version = "1.36.0";
+          sha256 = "sha256-DqY2PS4JSjb6VMO1b0Hi/7JOKSTUk5VSxJiCrUKBfLk=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      marp-team.marp-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "marp-vscode";
+          publisher = "marp-team";
+          version = "2.5.0";
+          sha256 = "sha256-I8UevZs04tUj/jaHrU7LiMF40ElMqtniU1h/9LNLdac=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      matangover.mypy = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "mypy";
+          publisher = "matangover";
+          version = "0.2.3";
+          sha256 = "sha256-m/8j89M340fiMF7Mi7FT2+Xag3fbMGWf8Gt9T8hLdmo=";
+        };
+        meta.license = lib.licenses.mit;
+      };
+
+      matthewpi.caddyfile-support = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "caddyfile-support";
+          publisher = "matthewpi";
+          version = "0.3.0";
+          sha256 = "sha256-1yiOnvC2w33kiPRdQYskee38Cid/GOj9becLadP1fUY=";
+        };
+        meta = {
+          description = "Rich Caddyfile support for Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=matthewpi.caddyfile-support";
+          homepage = "https://github.com/caddyserver/vscode-caddyfile";
+          changelog = "https://marketplace.visualstudio.com/items/matthewpi.caddyfile-support/changelog";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.matthewpi ];
+        };
+      };
+
+      mattn.lisp = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "lisp";
+          publisher = "mattn";
+          version = "0.1.12";
+          sha256 = "sha256-x6aFrcX0YElEFEr0qA669/LPlab15npmXd5Q585pIEw=";
+        };
+        meta = {
+          description = "Lisp syntax for vscode";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=mattn.lisp";
+          homepage = "https://github.com/mattn/vscode-lisp";
+          changelog = "https://marketplace.visualstudio.com/items/mattn.lisp/changelog";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      maximedenes.vscoq = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "maximedenes";
+          name = "vscoq";
+          version = "0.3.8";
+          sha256 = "sha256-0FX5KBsvUmI+JMGBnaI3kJmmD+Y6XFl7LRHU0ADbHos=";
+        };
+        meta = {
+          description = "VsCoq is an extension for Visual Studio Code (VS Code) and VSCodium with support for the Coq Proof Assistant.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=maximedenes.vscoq";
+          homepage = "https://github.com/coq-community/vscoq";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.Zimmi48 ];
+        };
+      };
+
+      mechatroner.rainbow-csv = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "rainbow-csv";
+          publisher = "mechatroner";
+          version = "3.6.0";
+          sha256 = "sha256-bvxMnT6oSjflAwWQZkNnEoEsVlVg86T0TMYi8tNsbdQ=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      mhutchie.git-graph = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "git-graph";
+          publisher = "mhutchie";
+          version = "1.30.0";
+          sha256 = "sha256-sHeaMMr5hmQ0kAFZxxMiRk6f0mfjkg2XMnA4Gf+DHwA=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      mikestead.dotenv = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "dotenv";
+          publisher = "mikestead";
+          version = "1.0.1";
+          sha256 = "sha256-dieCzNOIcZiTGu4Mv5zYlG7jLhaEsJR05qbzzzQ7RWc=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      mishkinf.goto-next-previous-member = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "goto-next-previous-member";
+          publisher = "mishkinf";
+          version = "0.0.6";
+          sha256 = "07rpnbkb51835gflf4fpr0v7fhj8hgbhsgcz2wpag8wdzdxc3025";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      mkhl.direnv = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "direnv";
+          publisher = "mkhl";
+          version = "0.12.0";
+          sha256 = "sha256-UMGTWAiPAxSjy5ALUkijD0GE9TW37TZ3UvMmgFBNYsU=";
+        };
+        meta = {
+          description = "direnv support for Visual Studio Code";
+          license = lib.licenses.bsd0;
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=mkhl.direnv";
+          maintainers = [ lib.maintainers.nullx76 ];
+        };
+      };
+
+      ms-azuretools.vscode-docker = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-docker";
+          publisher = "ms-azuretools";
+          version = "1.24.0";
+          sha256 = "sha256-zZ34KQrRPqVbfGdpYACuLMiMj4ZIWSnJIPac1yXD87k=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-ceintl = callPackage ./language-packs.nix { }; # non-English language packs
+
+      ms-dotnettools.csharp = callPackage ./ms-dotnettools.csharp { };
+
+      ms-kubernetes-tools.vscode-kubernetes-tools = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-kubernetes-tools";
+          publisher = "ms-kubernetes-tools";
+          version = "1.3.11";
+          sha256 = "sha256-I2ud9d4VtgiiIT0MeoaMThgjLYtSuftFVZHVJTMlJ8s=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-pyright.pyright = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "pyright";
+          publisher = "ms-pyright";
+          version = "1.1.300";
+          sha256 = "sha256-GzRJeV4qfgM2kBv6U3MH7lMWl3CL6LWPI/9GaVWZL+o=";
+        };
+        meta = {
+          description = "VS Code static type checking for Python";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=ms-pyright.pyright";
+          homepage = "https://github.com/Microsoft/pyright#readme";
+          changelog = "https://marketplace.visualstudio.com/items/ms-pyright.pyright/changelog";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+      };
+
+      ms-python.python = callPackage ./ms-python.python { };
+
+      ms-python.vscode-pylance = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-pylance";
+          publisher = "MS-python";
+          version = "2022.7.11";
+          sha256 = "sha256-JatjLZXO7iwpBwjL1hrNafBiF81CaozWWANyRm8A36Y=";
+        };
+
+        buildInputs = [ nodePackages.pyright ];
+
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/ms-python.vscode-pylance/changelog";
+          description = "A performant, feature-rich language server for Python in VS Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance";
+          homepage = "https://github.com/microsoft/pylance-release";
+          license = lib.licenses.unfree;
+        };
+      };
+
+      ms-toolsai.jupyter = callPackage ./ms-toolsai.jupyter { };
+
+      ms-toolsai.jupyter-keymap = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "jupyter-keymap";
+          publisher = "ms-toolsai";
+          version = "1.1.0";
+          sha256 = "sha256-krDtR+ZJiJf1Kxcu5mdXOaSAiJb2bXC1H0XWWviWeMQ=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-toolsai.jupyter-renderers = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "jupyter-renderers";
+          publisher = "ms-toolsai";
+          version = "1.0.15";
+          sha256 = "sha256-JR6PunvRRTsSqjSGGAn/1t1B+Ia6X0MgqahehcuSNYA=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-toolsai.vscode-jupyter-cell-tags = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-jupyter-cell-tags";
+          publisher = "ms-toolsai";
+          version = "0.1.8";
+          sha256 = "sha256-0oPyptnUWL1h/H13SdR+FdgGzVwEpTaK9SCE7BvI/5M=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-toolsai.vscode-jupyter-slideshow = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-jupyter-slideshow";
+          publisher = "ms-toolsai";
+          version = "0.1.5";
+          sha256 = "1p6r5vkzvwvxif3wxqi9599vplabzig27fzzz0bx9z0awfglzyi7";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-vscode.anycode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "anycode";
+          publisher = "ms-vscode";
+          version = "0.0.70";
+          sha256 = "sha256-POxgwvKF4A+DxKVIOte4I8REhAbO1U9Gu6r/S41/MmA=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-vscode.cmake-tools = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "cmake-tools";
+          publisher = "ms-vscode";
+          version = "1.14.20";
+          sha256 = "sha256-j67Z65N9YW8wY4zIWWCtPIKgW9GYoUntBoGVBLR/H2o=";
+        };
+        meta.license = lib.licenses.mit;
+      };
+
+      ms-vscode.cpptools = callPackage ./ms-vscode.cpptools { };
+
+      ms-vscode.hexeditor = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "hexeditor";
+          publisher = "ms-vscode";
+          version = "1.9.11";
+          sha256 = "sha256-w1R8z7Q/JRAsqJ1mgcvlHJ6tywfgKtS6A6zOY2p01io=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-vscode.live-server = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "live-server";
+          publisher = "ms-vscode";
+          version = "0.4.8";
+          sha256 = "sha256-/IrLq+nNxwQB1S1NIGYkv24DOY7Mc25eQ+orUfh42pg=";
+        };
+        meta = {
+          description = "Launch a development local Server with live reload feature for static & dynamic pages";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=ms-vscode.live-server";
+          homepage = "https://github.com/microsoft/vscode-livepreview";
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-vscode.makefile-tools = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "makefile-tools";
+          publisher = "ms-vscode";
+          version = "0.6.0";
+          sha256 = "07zagq5ib9hd3w67yk2g728vypr4qazw0g9dyd5bax21shnmppa9";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ms-vscode.powershell = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "PowerShell";
+          publisher = "ms-vscode";
+          version = "2023.3.1";
+          sha256 = "sha256-FJolnWU0DbuQYvMuGL3mytf0h39SH9rUPCl2ahLXLuY=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension for PowerShell language support";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell";
+          homepage = "https://github.com/PowerShell/vscode-powershell";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.rhoriguchi ];
+        };
+      };
+
+      ms-vscode.theme-tomorrowkit = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "Theme-TomorrowKit";
+          publisher = "ms-vscode";
+          version = "0.1.4";
+          sha256 = "sha256-qakwJWak+IrIeeVcMDWV/fLPx5M8LQGCyhVt4TS/Lmc=";
+        };
+        meta = {
+          description = "Additional Tomorrow and Tomorrow Night themes for VS Code. Based on the TextMate themes.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=ms-vscode.Theme-TomorrowKit";
+          homepage = "https://github.com/microsoft/vscode-themes";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+      };
+
+      ms-vscode-remote.remote-ssh = callPackage ./ms-vscode-remote.remote-ssh { };
+
+      ms-vsliveshare.vsliveshare = callPackage ./ms-vsliveshare.vsliveshare { };
+
+      mskelton.one-dark-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "one-dark-theme";
+          publisher = "mskelton";
+          version = "1.14.2";
+          sha256 = "sha256-6nIfEPbau5Dy1DGJ0oQ5L2EGn2NDhpd8jSdYujtOU68=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      mvllow.rose-pine = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "mvllow";
+          name = "rose-pine";
+          version = "2.7.1";
+          sha256 = "sha256-QQIkuJAI4apDt8rfhXvMg9bNtGTFeMaEkN/Se12zGpc=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      naumovs.color-highlight = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "color-highlight";
+          publisher = "naumovs";
+          version = "2.6.0";
+          sha256 = "sha256-TcPQOAHCYeFHPdR85GIXsy3fx70p8cLdO2UNO0krUOs=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/naumovs.color-highlight/changelog";
+          description = "Highlight web colors in your editor";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight";
+          homepage = "https://github.com/enyancc/vscode-ext-color-highlight";
+          license = lib.licenses.gpl3Only;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      njpwerner.autodocstring = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "autodocstring";
+          publisher = "njpwerner";
+          version = "0.6.1";
+          sha256 = "sha256-NI0cbjsZPW8n6qRTRKoqznSDhLZRUguP7Sa/d0feeoc=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/njpwerner.autodocstring/changelog";
+          description = "Generates python docstrings automatically";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring";
+          homepage = "https://github.com/NilsJPWerner/autoDocstring";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      nonylene.dark-molokai-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "dark-molokai-theme";
+          publisher = "nonylene";
+          version = "1.0.5";
+          sha256 = "sha256-2qjV6iSz8DDU1yP1II9sxGSgiETmEtotFvfNjm+cTuI=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/nonylene.dark-molokai-theme/changelog";
+          description = "Theme inspired by VSCode default dark theme, monokai theme and Vim Molokai theme";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=nonylene.dark-molokai-theme";
+          homepage = "https://github.com/nonylene/vscode-dark-molokai-theme";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.amz-x ];
+        };
+      };
+
+      nvarner.typst-lsp = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "typst-lsp";
+          publisher = "nvarner";
+          version = "0.5.0";
+          sha256 = "sha256-4bZbjbcd/EjSRBMkzMs1pD00qyQb5W6gePh4xfoU6Ug=";
+        };
+
+        nativeBuildInputs = [ jq moreutils ];
+
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration.properties."typst-lsp.serverPath".default = "${typst-lsp}/bin/typst-lsp"' package.json | sponge package.json
+        '';
+
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/nvarner.typst-lsp/changelog";
+          description = "A VSCode extension for providing a language server for Typst";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=nvarner.typst-lsp";
+          homepage = "https://github.com/nvarner/typst-lsp";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.drupol ];
+        };
+      };
+
+      ocamllabs.ocaml-platform = buildVscodeMarketplaceExtension {
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/ocamllabs.ocaml-platform/changelog";
+          description = "Official OCaml Support from OCamlLabs";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=ocamllabs.ocaml-platform";
+          homepage = "https://github.com/ocamllabs/vscode-ocaml-platform";
+          license = lib.licenses.isc;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+        mktplcRef = {
+          name = "ocaml-platform";
+          publisher = "ocamllabs";
+          version = "1.12.2";
+          sha256 = "sha256-dj8UFbYgAl6dt/1MuIBawTVUbBDTTedZEcHtKZjEcew=";
+        };
+      };
+
+      octref.vetur = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vetur";
+          publisher = "octref";
+          version = "0.37.3";
+          sha256 = "sha256-3hi1LOZto5AYaomB9ihkAt4j/mhkCDJ8Jqa16piwHIQ=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      oderwat.indent-rainbow = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "indent-rainbow";
+          publisher = "oderwat";
+          version = "8.3.1";
+          sha256 = "sha256-dOicya0B2sriTcDSdCyhtp0Mcx5b6TUaFKVb0YU3jUc=";
+        };
+        meta = {
+          description = "Makes indentation easier to read";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow";
+          homepage = "https://github.com/oderwat/vscode-indent-rainbow";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.imgabe ];
+        };
+      };
+
+      phoenixframework.phoenix = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "phoenix";
+          publisher = "phoenixframework";
+          version = "0.1.2";
+          sha256 = "sha256-T+YNRR8jAzNagmoCDzjbytBDFtPhNn289Kywep/w8sw=";
+        };
+        meta = {
+          description = "Syntax highlighting support for HEEx / Phoenix templates";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=phoenixframework.phoenix";
+          homepage = "https://github.com/phoenixframework/vscode-phoenix";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      piousdeer.adwaita-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "adwaita-theme";
+          publisher = "piousdeer";
+          version = "1.1.0";
+          sha256 = "sha256-tKpKLUcc33YrgDS95PJu22ngxhwjqeVMC1Mhhy+IPGE=";
+        };
+        meta = {
+          description = "Theme for the GNOME desktop";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=piousdeer.adwaita-theme";
+          homepage = "https://github.com/piousdeer/vscode-adwaita";
+          license = lib.licenses.gpl3;
+          maintainers = [ lib.maintainers.wyndon ];
+        };
+      };
+
+      pkief.material-icon-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "material-icon-theme";
+          publisher = "PKief";
+          version = "4.25.0";
+          sha256 = "sha256-/lD3i7ZdF/XOi7RduS3HIYHFXhkoW2+PJW249gQxcyk=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      pkief.material-product-icons = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "material-product-icons";
+          publisher = "PKief";
+          version = "1.5.0";
+          sha256 = "sha256-gKU21OS2ZFyzCQVQ1fa3qlahLBAcJaHDEcz7xof3P4A=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      prisma.prisma = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "prisma";
+          publisher = "Prisma";
+          version = "4.11.0";
+          sha256 = "sha256-fHvwv9E/O8ZvhnyY7nNF/SIyl87z8KVEXTbhU/37EP0=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/Prisma.prisma/changelog";
+          description = "VSCode extension for syntax highlighting, formatting, auto-completion, jump-to-definition and linting for .prisma files";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=Prisma.prisma";
+          homepage = "https://github.com/prisma/language-tools";
+          license = lib.licenses.asl20;
+          maintainers = [ ];
+        };
+      };
+
+      rebornix.ruby = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "ruby";
+          publisher = "rebornix";
+          version = "0.28.1";
+          sha256 = "sha256-HAUdv+2T+neJ5aCGiQ37pCO6x6r57HIUnLm4apg9L50=";
+        };
+
+        meta.license = lib.licenses.mit;
+      };
+
+      redhat.java = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "java";
+          publisher = "redhat";
+          version = "1.17.2023032504";
+          sha256 = "sha256-ni1jzCPjwtcdJTEORn0vYzLRbQ/wseTZmrETJ8QPW58=";
+        };
+        buildInputs = [ jdk ];
+        meta = {
+          license = lib.licenses.epl20;
+          broken = lib.versionOlder jdk.version "11";
+        };
+      };
+
+      redhat.vscode-xml = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-xml";
+          publisher = "redhat";
+          version = "0.25.2023032304";
+          sha256 = "sha256-3hU/MZU9dP91p2PVycFL6yg/nf4/x8tt76vmlkiHnE8=";
+        };
+        meta.license = lib.licenses.epl20;
+      };
+
+      redhat.vscode-yaml = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-yaml";
+          publisher = "redhat";
+          version = "1.12.0";
+          sha256 = "sha256-r/me14KonxnQeensIYyWU4dQrhomc8h2ntYoiZ+Y7jE=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      richie5um2.snake-trail = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "snake-trail";
+          publisher = "richie5um2";
+          version = "0.6.0";
+          sha256 = "0wkpq9f48hplrgabb0v1ij6fc4sb8h4a93dagw4biprhnnm3qx49";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      rioj7.commandonallfiles = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "commandOnAllFiles";
+          publisher = "rioj7";
+          version = "0.3.2";
+          sha256 = "sha256-777jdBpWJ66ASeeETWevWF4mIAj4RWviNSTxzvqwl0U=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      ritwickdey.liveserver = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "liveserver";
+          publisher = "ritwickdey";
+          version = "5.7.9";
+          sha256 = "sha256-w0CYSEOdltwMFzm5ZhOxSrxqQ1y4+gLfB8L+EFFgzDc=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      roman.ayu-next = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "ayu-next";
+          publisher = "roman";
+          version = "1.2.15";
+          sha256 = "sha256-gGEjb9BrvFmKhAxRUmN3YWx7VZqlUp6w7m4r46DPn50=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      RoweWilsonFrederiskHolme.wikitext = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "wikitext";
+          publisher = "RoweWilsonFrederiskHolme";
+          version = "3.8.0";
+          sha256 = "30540a85163e797028eec9bc3db1866bbf473e98615bf6ade6d1d672017ebe52";
+        };
+        meta = {
+          description = "Extension that helps users view and write MediaWiki's Wikitext files";
+          longDescription = ''
+            With this extension, you can more easily discover your grammatical problems
+            through the marked and styled text. The plugin is based on MediaWiki's
+            Wikitext standard, but the rules are somewhat stricter, which helps users
+            write text that is easier to read and maintain.
+          '';
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=RoweWilsonFrederiskHolme.wikitext";
+          homepage = "https://github.com/Frederisk/Wikitext-VSCode-Extension";
+          license = lib.licenses.mit;
+        };
+      };
+
+      rubbersheep.gi = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "gi";
+          publisher = "rubbersheep";
+          version = "0.2.11";
+          sha256 = "0j9k6wm959sziky7fh55awspzidxrrxsdbpz1d79s5lr5r19rs6j";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      rubymaniac.vscode-paste-and-indent = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-paste-and-indent";
+          publisher = "Rubymaniac";
+          version = "0.0.8";
+          sha256 = "0fqwcvwq37ndms6vky8jjv0zliy6fpfkh8d9raq8hkinfxq6klgl";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      rust-lang.rust-analyzer = callPackage ./rust-lang.rust-analyzer { };
+
+      ryu1kn.partial-diff = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "partial-diff";
+          publisher = "ryu1kn";
+          version = "1.4.3";
+          sha256 = "0x3lkvna4dagr7s99yykji3x517cxk5kp7ydmqa6jb4bzzsv1s6h";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      sanaajani.taskrunnercode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "taskrunnercode";
+          publisher = "sanaajani";
+          version = "0.3.0";
+          sha256 = "NVGMM9ugmYZNCWhNmclcGuVJPhJ9h4q2G6nNzVUEpes=";
+        };
+        meta = {
+          description = "Extension to view and run tasks from Explorer pane";
+          longDescription = ''
+            This extension adds an additional "Task Runner" view in your Explorer Pane
+            to visualize and individually run the auto-detected or configured tasks
+            in your project.
+          '';
+          homepage = "https://github.com/sana-ajani/taskrunner-code";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.pbsds ];
+        };
+      };
+
+      scala-lang.scala = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "scala";
+          publisher = "scala-lang";
+          version = "0.5.6";
+          sha256 = "sha256-eizIPazqEb27aQ+o9nTD1O58zbjkHYHNhGjK0uJgnwA=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      scalameta.metals = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "metals";
+          publisher = "scalameta";
+          version = "1.22.3";
+          sha256 = "sha256-iLLWobQv5CEjJwCdDNdWYQ1ehOiYyNi940b4QmNZFoQ=";
+        };
+        meta = {
+          license = lib.licenses.asl20;
+        };
+      };
+
+      seatonjiang.gitmoji-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "seatonjiang";
+          name = "gitmoji-vscode";
+          version = "1.2.2";
+          sha256 = "sha256-+lwbCLV62y1IHrjCygBphQZJUu+ZApYTwBQld5uu12w=";
+        };
+        meta = {
+          description = "Gitmoji tool for git commit messages in VSCode";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=seatonjiang.gitmoji-vscode";
+          homepage = "https://github.com/seatonjiang/gitmoji-vscode/";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.laurent-f1z1 ];
+        };
+      };
+
+      serayuzgur.crates = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "crates";
+          publisher = "serayuzgur";
+          version = "0.5.10";
+          sha256 = "1dbhd6xbawbnf9p090lpmn8i5gg1f7y8xk2whc9zhg4432kdv3vd";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      shardulm94.trailing-spaces = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "shardulm94";
+          name = "trailing-spaces";
+          version = "0.4.1";
+          sha256 = "sha256-pLE1bfLRxjlm/kgU9nmtiPBOnP05giQnWq6bexrrIZY=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.kamadorueda ];
+        };
+      };
+
+      shd101wyy.markdown-preview-enhanced = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "shd101wyy";
+          name = "markdown-preview-enhanced";
+          version = "0.6.8";
+          sha256 = "9NRaHgtyiZJ0ic6h1B01MWzYhDABAl3Jm2IUPogYWr0=";
+        };
+        meta = {
+          description = "Provides a live preview of markdown using either markdown-it or pandoc";
+          longDescription = ''
+            Markdown Preview Enhanced provides you with many useful functionalities
+            such as automatic scroll sync, math typesetting, mermaid, PlantUML,
+            pandoc, PDF export, code chunk, presentation writer, etc.
+          '';
+          homepage = "https://github.com/shd101wyy/vscode-markdown-preview-enhanced";
+          license = lib.licenses.ncsa;
+          maintainers = [ lib.maintainers.pbsds ];
+        };
+      };
+
+      shyykoserhiy.vscode-spotify = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-spotify";
+          publisher = "shyykoserhiy";
+          version = "3.2.1";
+          sha256 = "14d68rcnjx4a20r0ps9g2aycv5myyhks5lpfz0syr2rxr4kd1vh6";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      skellock.just = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "just";
+          publisher = "skellock";
+          version = "2.0.0";
+          sha256 = "sha256-FOp/dcW0+07rADEpUMzx+SGYjhvE4IhcCOqUQ38yCN4=";
+        };
+        meta = {
+          changelog = "https://github.com/skellock/vscode-just/blob/master/CHANGELOG.md";
+          description = "Provides syntax and recipe launcher for Just scripts";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=skellock.just";
+          homepage = "https://github.com/skellock/vscode-just";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.maximsmol ];
+        };
+      };
+
+      skyapps.fish-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "fish-vscode";
+          publisher = "skyapps";
+          version = "0.2.1";
+          sha256 = "0y1ivymn81ranmir25zk83kdjpjwcqpnc9r3jwfykjd9x0jib2hl";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      slevesque.vscode-multiclip = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-multiclip";
+          publisher = "slevesque";
+          version = "0.1.5";
+          sha256 = "1cg8dqj7f10fj9i0g6mi3jbyk61rs6rvg9aq28575rr52yfjc9f9";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      sonarsource.sonarlint-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "sonarlint-vscode";
+          publisher = "sonarsource";
+          version = "3.16.0";
+          sha256 = "sha256-zWgITdvUS9fq1uT6A4Gs3fSTBwCXoEIQ/tVcC7Eigfs=";
+        };
+        meta.license = lib.licenses.lgpl3Only;
+      };
+
+      spywhere.guides = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "guides";
+          publisher = "spywhere";
+          version = "0.9.3";
+          sha256 = "1kvsj085w1xax6fg0kvsj1cizqh86i0pkzpwi0sbfvmcq21i6ghn";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      stefanjarina.vscode-eex-snippets = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-eex-snippets";
+          publisher = "stefanjarina";
+          version = "0.0.8";
+          sha256 = "0j8pmrs1lk138vhqx594pzxvrma4yl3jh7ihqm2kgh0cwnkbj36m";
+        };
+        meta = {
+          description = "VSCode extension for Elixir EEx and HTML (EEx) code snippets";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=stefanjarina.vscode-eex-snippets";
+          homepage = "https://github.com/stefanjarina/vscode-eex-snippets";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      stephlin.vscode-tmux-keybinding = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-tmux-keybinding";
+          publisher = "stephlin";
+          version = "0.0.7";
+          sha256 = "sha256-MrW0zInweAhU2spkEEiDLyuT6seV3GFFurWTqYMzqgY=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/stephlin.vscode-tmux-keybinding/changelog";
+          description = "A simple extension for tmux behavior in vscode terminal.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=stephlin.vscode-tmux-keybinding";
+          homepage = "https://github.com/StephLin/vscode-tmux-keybinding";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.dbirks ];
+        };
+      };
+
+      stkb.rewrap = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "stkb";
+          name = "rewrap";
+          version = "17.8.0";
+          sha256 = "sha256-9t1lpVbpcmhLamN/0ZWNEWD812S6tXG6aK3/ALJCJvg=";
+        };
+        meta = {
+          changelog = "https://github.com/stkb/Rewrap/blob/master/CHANGELOG.md";
+          description = "Hard word wrapping for comments and other text at a given column.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=stkb.rewrap";
+          homepage = "https://github.com/stkb/Rewrap#readme";
+          license = lib.licenses.asl20;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      streetsidesoftware.code-spell-checker = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "code-spell-checker";
+          publisher = "streetsidesoftware";
+          version = "2.20.4";
+          sha256 = "sha256-GOXKXZPEynyqRUUY0pdNwt+141kJleg74IbCP4/34R8=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/streetsidesoftware.code-spell-checker/changelog";
+          description = "Spelling checker for source code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker";
+          homepage = "https://streetsidesoftware.github.io/vscode-spell-checker";
+          license = lib.licenses.gpl3Only;
+          maintainers = [ lib.maintainers.datafoo ];
+        };
+      };
+
+      styled-components.vscode-styled-components = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-styled-components";
+          publisher = "styled-components";
+          version = "1.7.6";
+          sha256 = "sha256-ZXXXFUriu//2Wmj1N+plj7xzJauGBfj+79SyrkUZAO4=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/styled-components.vscode-styled-components/changelog";
+          description = "Syntax highlighting and IntelliSense for styled-components";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=styled-components.vscode-styled-components";
+          homepage = "https://github.com/styled-components/vscode-styled-components";
+          license = lib.licenses.mit;
+        };
+      };
+
+      sumneko.lua = callPackage ./sumneko.lua { };
+
+      svelte.svelte-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "svelte-vscode";
+          publisher = "svelte";
+          version = "107.4.3";
+          sha256 = "sha256-z1foIJXVKmJ0G4FfO9xsjiQgmq/ZtoB3b6Ch8Nyj1zY=";
+        };
+        meta = {
+          changelog = "https://github.com/sveltejs/language-tools/releases";
+          description = "Svelte language support for VS Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode";
+          homepage = "https://github.com/sveltejs/language-tools#readme";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.fabianhauser ];
+        };
+      };
+
+      svsool.markdown-memo = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "markdown-memo";
+          publisher = "svsool";
+          version = "0.3.19";
+          sha256 = "sha256-JRM9Tm7yql7dKXOdpTwBVR/gx/nwvM7qqrCNlV2i1uI=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/svsool.markdown-memo/changelog";
+          description = "Markdown knowledge base with bidirectional [[link]]s built on top of VSCode";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=svsool.markdown-memo";
+          homepage = "https://github.com/svsool/vscode-memo";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ratsclub ];
+        };
+      };
+
+      tabnine.tabnine-vscode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "tabnine-vscode";
+          publisher = "tabnine";
+          version = "3.6.43";
+          sha256 = "sha256-/onQybGMBscD6Rj4PWafetuag1J1cgHTw5NHri082cs=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      tailscale.vscode-tailscale = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-tailscale";
+          publisher = "tailscale";
+          version = "0.4.0";
+          sha256 = "sha256-c/BZHKHs2EKd37148dSxEeP1wBXv75HhDqzegmHPjOs=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/tailscale.vscode-tailscale/changelog";
+          description = "VSCode extension to share a port over the internet with Tailscale Funnel";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=Tailscale.vscode-tailscale";
+          homepage = "https://github.com/tailscale-dev/vscode-tailscale";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.drupol ];
+        };
+      };
+
+      takayama.vscode-qq = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "takayama";
+          name = "vscode-qq";
+          version = "1.4.2";
+          sha256 = "sha256-koeiFXUFI/i8EGCRDTym62m7JER18J9MKZpbAozr0Ng=";
+        };
+        meta = {
+          license = lib.licenses.mpl20;
+        };
+      };
+
+      tamasfe.even-better-toml = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "even-better-toml";
+          publisher = "tamasfe";
+          version = "0.19.0";
+          sha256 = "sha256-MqSQarNThbEf1wHDTf1yA46JMhWJN46b08c7tV6+1nU=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      techtheawesome.rust-yew = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "rust-yew";
+          publisher = "techtheawesome";
+          version = "0.2.2";
+          sha256 = "sha256-t9DYY1fqW7M5F1pbIUtnnodxMzIzURew4RXT78djWMI=";
+        };
+        meta = {
+          description = "A VSCode extension that provides some language features for Yew's html macro syntax";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=TechTheAwesome.rust-yew";
+          homepage = "https://github.com/TechTheAwesome/code-yew-server";
+          license = lib.licenses.gpl3Only;
+          maintainers = [ lib.maintainers.CardboardTurkey ];
+        };
+      };
+
+      theangryepicbanana.language-pascal = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "language-pascal";
+          publisher = "theangryepicbanana";
+          version = "0.1.6";
+          sha256 = "096wwmwpas21f03pbbz40rvc792xzpl5qqddzbry41glxpzywy6b";
+        };
+        meta = {
+          description = "VSCode extension for high-quality Pascal highlighting";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=theangryepicbanana.language-pascal";
+          homepage = "https://github.com/ALANVF/vscode-pascal-magic";
+          license = lib.licenses.mit;
+          maintainers = [ ];
+        };
+      };
+
+      thenuprojectcontributors.vscode-nushell-lang = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-nushell-lang";
+          publisher = "thenuprojectcontributors";
+          version = "1.1.0";
+          sha256 = "sha256-7v4q0OEqv7q2ejHp4lph2Dsqg0GWE65pxyz9goQEm8g=";
+        };
+        meta.license = lib.licenses.mit;
+      };
+
+      tiehuis.zig = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "zig";
+          publisher = "tiehuis";
+          version = "0.2.6";
+          sha256 = "sha256-s0UMY0DzEufEF+pizYeH4MKYOiiJ6z05gYHvfpaS4zA=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      timonwong.shellcheck = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "shellcheck";
+          publisher = "timonwong";
+          version = "0.26.3";
+          sha256 = "GlyOLc2VrRnA50MkaG83qa0yLUyJYwueqEO+ZeAStYs=";
+        };
+        nativeBuildInputs = [ jq moreutils ];
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration.properties."shellcheck.executablePath".default = "${shellcheck}/bin/shellcheck"' package.json | sponge package.json
+        '';
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      tobiasalthoff.atom-material-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "atom-material-theme";
+          publisher = "tobiasalthoff";
+          version = "1.10.9";
+          sha256 = "sha256-EdU0FMkaQpwhOpPRC+HGIxcrt7kSN+l4+mSgIwogB/I=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      tomoki1207.pdf = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "pdf";
+          publisher = "tomoki1207";
+          version = "1.2.2";
+          sha256 = "sha256-i3Rlizbw4RtPkiEsodRJEB3AUzoqI95ohyqZ0ksROps=";
+        };
+        meta = {
+          description = "Show PDF preview in VSCode";
+          homepage = "https://github.com/tomoki1207/vscode-pdfviewer";
+          license = lib.licenses.mit;
+        };
+      };
+
+      tuttieee.emacs-mcx = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "emacs-mcx";
+          publisher = "tuttieee";
+          version = "0.47.0";
+          sha256 = "sha256-dGty5+1+JEtJgl/DiyqEB/wuf3K8tCj1qWKua6ongIs=";
+        };
+        meta = {
+          changelog = "https://github.com/whitphx/vscode-emacs-mcx/blob/main/CHANGELOG.md";
+          description = "Awesome Emacs Keymap - VSCode emacs keybinding with multi cursor support";
+          homepage = "https://github.com/whitphx/vscode-emacs-mcx";
+          license = lib.licenses.mit;
+        };
+      };
+
+      twxs.cmake = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "cmake";
+          publisher = "twxs";
+          version = "0.0.17";
+          sha256 = "11hzjd0gxkq37689rrr2aszxng5l9fwpgs9nnglq3zhfa1msyn08";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      tyriar.sort-lines = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "sort-lines";
+          publisher = "Tyriar";
+          version = "1.9.1";
+          sha256 = "0dds99j6awdxb0ipm15g543a5b6f0hr00q9rz961n0zkyawgdlcb";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      usernamehw.errorlens = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "errorlens";
+          publisher = "usernamehw";
+          version = "3.8.0";
+          sha256 = "sha256-T2YTEbeC22/B5BlBBrBATLv95HQC5xGab+KnCMzI1vc=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/usernamehw.errorlens/changelog";
+          description = "Improve highlighting of errors, warnings and other language diagnostics.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens";
+          homepage = "https://github.com/usernamehw/vscode-error-lens";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.imgabe ];
+        };
+      };
+
+      vadimcn.vscode-lldb = callPackage ./vadimcn.vscode-lldb { llvmPackages = llvmPackages_14; };
+
+      valentjn.vscode-ltex = vscode-utils.buildVscodeMarketplaceExtension rec {
+        mktplcRef = {
+          name = "vscode-ltex";
+          publisher = "valentjn";
+          version = "13.1.0";
+        };
+
+        vsix = fetchurl {
+          name = "${mktplcRef.publisher}-${mktplcRef.name}.zip";
+          url = "https://github.com/valentjn/vscode-ltex/releases/download/${mktplcRef.version}/vscode-ltex-${mktplcRef.version}-offline-linux-x64.vsix";
+          sha256 = "1nlrijjwc35n1xgb5lgnr4yvlgfcxd0vdj93ip8lv2xi8x1ni5f6";
+        };
+
+        nativeBuildInputs = [ jq moreutils ];
+
+        buildInputs = [ jdk ];
+
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration.properties."ltex.java.path".default = "${jdk}"' package.json | sponge package.json
+        '';
+
+        meta = {
+          license = lib.licenses.mpl20;
+          maintainers = [ lib.maintainers._0xbe7a ];
+        };
+      };
+
+      viktorqvarfordt.vscode-pitch-black-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-pitch-black-theme";
+          publisher = "ViktorQvarfordt";
+          version = "1.3.0";
+          sha256 = "sha256-1JDm/cWNWwxa1gNsHIM/DIvqjXsO++hAf0mkjvKyi4g=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.wolfangaukang ];
+        };
+      };
+
+      vincaslt.highlight-matching-tag = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "highlight-matching-tag";
+          publisher = "vincaslt";
+          version = "0.11.0";
+          sha256 = "sha256-PxngjprSpWtD2ZDZfh+gOnZ+fVk5rvgGdZFxqbE21CY=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      vscjava.vscode-gradle = buildVscodeMarketplaceExtension rec {
+        mktplcRef = {
+          name = "vscode-gradle";
+          publisher = "vscjava";
+          version = "3.12.6";
+          sha256 = "sha256-j4JyhNGsRlJmS8Wj38gLpC1gXVvdPx10cgzP8dXmmNo=";
+        };
+
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/vscjava.vscode-gradle/changelog";
+          description = "A Visual Studio Code extension for Gradle build tool";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-gradle";
+          homepage = "https://github.com/microsoft/vscode-gradle";
+          license = lib.licenses.mit;
+          maintainers = with lib.maintainers; [ rhoriguchi ];
+        };
+      };
+
+      vscjava.vscode-java-debug = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-java-debug";
+          publisher = "vscjava";
+          version = "0.49.2023032407";
+          sha256 = "sha256-ZxJ6BM3rt98HPSyL0hDiyCGIBS7YtF/OuzlTvw7Bp1w=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      vscjava.vscode-java-dependency = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-java-dependency";
+          publisher = "vscjava";
+          version = "0.21.2023032400";
+          sha256 = "sha256-lG04Yu8exMcMvupqasUrbZS4CkSggQeJKtkm9iyKL5U=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      vscjava.vscode-java-test = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-java-test";
+          publisher = "vscjava";
+          version = "0.38.2023032402";
+          sha256 = "sha256-4WKsw+iuONaGQRMNN2TGd3zIYonHgOzvNleVhCyYFes=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      vscjava.vscode-maven = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-maven";
+          publisher = "vscjava";
+          version = "0.41.2023032403";
+          sha256 = "sha256-VeN4q6pEaLPQVYleLCDkDCv2Gr8QdHVPjpwSuo3mBuE=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      vscjava.vscode-spring-initializr = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-spring-initializr";
+          publisher = "vscjava";
+          version = "0.11.2023031603";
+          sha256 = "sha256-MSyVLSjaiH+FaeGn/5Y+IWRJmNpAx3UPGpY4VmsiCD8=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      vscode-icons-team.vscode-icons = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-icons";
+          publisher = "vscode-icons-team";
+          version = "12.2.0";
+          sha256 = "12s5br0s9n99vjn6chivzdsjb71p0lai6vnif7lv13x497dkw4rz";
+        };
+        meta = {
+          description = "Bring real icons to your Visual Studio Code";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons";
+          homepage = "https://github.com/vscode-icons/vscode-icons";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.ggwpaiushtha ];
+        };
+      };
+
+      vscodevim.vim = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vim";
+          publisher = "vscodevim";
+          version = "1.25.2";
+          sha256 = "sha256-hy2Ks6oRc9io6vfgql9aFGjUiRzBCS4mGdDO3NqIFEg=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      vspacecode.vspacecode = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vspacecode";
+          publisher = "VSpaceCode";
+          version = "0.10.14";
+          sha256 = "sha256-iTFwm/P2wzbNahozyLbdfokcSDHFzLrzVDHI/g2aFm0=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      vspacecode.whichkey = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "whichkey";
+          publisher = "VSpaceCode";
+          version = "0.11.3";
+          sha256 = "sha256-PnaOwOIcSo1Eff1wOtQPhoHYvrHDGTcsRy9mQfdBPX4=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      waderyan.gitblame = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "gitblame";
+          publisher = "waderyan";
+          version = "10.1.0";
+          sha256 = "TTYBaJ4gcMVICz4bGZTvbNRPpWD4tXuAJbI8QcHNDv0=";
+        };
+        meta = {
+          changelog = "https://marketplace.visualstudio.com/items/waderyan.gitblame/changelog";
+          description = "Visual Studio Code Extension - See Git Blame info in status bar";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=waderyan.gitblame";
+          homepage = "https://github.com/Sertion/vscode-gitblame";
+          license = lib.licenses.mit;
+        };
+      };
+
+      wakatime.vscode-wakatime = callPackage ./WakaTime.vscode-wakatime { };
+
+      wholroyd.jinja = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "jinja";
+          publisher = "wholroyd";
+          version = "0.0.8";
+          sha256 = "1ln9gly5bb7nvbziilnay4q448h9npdh7sd9xy277122h0qawkci";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      wingrunr21.vscode-ruby = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-ruby";
+          publisher = "wingrunr21";
+          version = "0.28.0";
+          sha256 = "sha256-H3f1+c31x+lgCzhgTb0uLg9Bdn3pZyJGPPwfpCYrS70=";
+        };
+
+        meta.license = lib.licenses.mit;
+      };
+
+      wix.vscode-import-cost = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-import-cost";
+          publisher = "wix";
+          version = "3.3.0";
+          sha256 = "0wl8vl8n0avd6nbfmis0lnlqlyh4yp3cca6kvjzgw5xxdc5bl38r";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      xadillax.viml = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "viml";
+          publisher = "xadillax";
+          version = "2.1.2";
+          sha256 = "sha256-n91Rj1Rpp7j7gndkt0bV+jT1nRMv7+coVoSL5c7Ii3A=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      xaver.clang-format = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "clang-format";
+          publisher = "xaver";
+          version = "1.9.0";
+          sha256 = "abd0ef9176eff864f278c548c944032b8f4d8ec97d9ac6e7383d60c92e258c2f";
+        };
+        meta = {
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.zeratax ];
+        };
+      };
+
+      xyz.local-history = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "local-history";
+          publisher = "xyz";
+          version = "1.8.1";
+          sha256 = "1mfmnbdv76nvwg4xs3rgsqbxk8hw9zr1b61har9c3pbk9r4cay7v";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      yzhang.dictionary-completion = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          publisher = "yzhang";
+          name = "dictionary-completion";
+          version = "1.2.2";
+          sha256 = "sha256-dpJcJARRKzRNHfXs/qknud8OQ8xIyeaVnt/EcDq0k4E=";
+        };
+        meta = {
+          description = "A Visual Studio Code extension to help user easyly finish long words ";
+          longDescription = ''
+            Dictionary completion allows user to get a list of keywords, based off of the current word at the cursor.
+            This is useful if you are typing a long word (e.g. acknowledgeable) and don't want to finish typing or don't remember the Spelling
+          '';
+          homepage = "https://github.com/yzhang-gh/vscode-dic-completion#readme";
+          changelog = "https://marketplace.visualstudio.com/items/yzhang.dictionary-completion/changelog";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=yzhang.dictionary-completion";
+          license = lib.licenses.mit;
+          maintainers = with lib.maintainers; [ onedragon ];
+        };
+      };
+
+      yzhang.markdown-all-in-one = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "markdown-all-in-one";
+          publisher = "yzhang";
+          version = "3.5.1";
+          sha256 = "sha256-ZyvkRp0QTjoMEXRGHzp3udGngYcU9EkTCvx8o2CEaBE=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      zhuangtongfa.material-theme = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "material-theme";
+          publisher = "zhuangtongfa";
+          version = "3.15.8";
+          sha256 = "sha256-PwWGs9KRfV3qpYbgdiw8FYvnkaJQ2VW2H6p6+umk7eg=";
+        };
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+
+      zhwu95.riscv = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "riscv";
+          publisher = "zhwu95";
+          version = "0.0.8";
+          sha256 = "sha256-PXaHSEXoN0ZboHIoDg37tZ+Gv6xFXP4wGBS3YS/53TY=";
+        };
+        meta = {
+          description = "Basic RISC-V colorization and snippets support.";
+          downloadPage = "https://marketplace.visualstudio.com/items?itemName=zhwu95.riscv";
+          homepage = "https://github.com/zhuanhao-wu/vscode-riscv-support";
+          license = lib.licenses.mit;
+          maintainers = [ lib.maintainers.CardboardTurkey ];
+        };
+      };
+
+      zxh404.vscode-proto3 = buildVscodeMarketplaceExtension {
+        mktplcRef = {
+          name = "vscode-proto3";
+          publisher = "zxh404";
+          version = "0.5.4";
+          sha256 = "08dfl5h1k6s542qw5qx2czm1wb37ck9w2vpjz44kp2az352nmksb";
+        };
+        nativeBuildInputs = [ jq moreutils ];
+        postInstall = ''
+          cd "$out/$installPrefix"
+          jq '.contributes.configuration.properties.protoc.properties.path.default = "${protobuf}/bin/protoc"' package.json | sponge package.json
+        '';
+        meta = {
+          license = lib.licenses.mit;
+        };
+      };
+    };
+
+  aliases = super: {
+    _1Password = super."1Password";
+    _2gua = super."2gua";
+    _4ops = super."4ops";
+    Arjun.swagger-viewer = super.arjun.swagger-viewer;
+    jakebecker.elixir-ls = super.elixir-lsp.vscode-elixir-ls;
+    jpoissonnier.vscode-styled-components = super.styled-components.vscode-styled-components;
+    matklad.rust-analyzer = super.rust-lang.rust-analyzer; # Previous publisher
+    ms-vscode.go = super.golang.go;
+    ms-vscode.PowerShell = super.ms-vscode.powershell;
+    rioj7.commandOnAllFiles = super.rioj7.commandonallfiles;
+    WakaTime.vscode-wakatime = super.wakatime.vscode-wakatime;
+  };
+
+  # TODO: add overrides overlay, so that we can have a generated.nix
+  # then apply extension specific modifcations to packages.
+
+  # overlays will be applied left to right, overrides should come after aliases.
+  overlays = lib.optionals config.allowAliases [
+    (self: super: lib.recursiveUpdate super (aliases super))
+  ];
+
+  toFix = lib.foldl' (lib.flip lib.extends) baseExtensions overlays;
+in
+lib.fix toFix
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix
new file mode 100644
index 000000000000..234b0880e284
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix
@@ -0,0 +1,20 @@
+{ lib, vscode-utils, terraform-ls }:
+vscode-utils.buildVscodeMarketplaceExtension rec {
+  mktplcRef = {
+    name = "terraform";
+    publisher = "hashicorp";
+    version = "2.19.0";
+    sha256 = "sha256-k/fcEJuELz0xkwivSrP6Nxtz861BLq1wR2ZDMXVrvkY=";
+  };
+
+  patches = [ ./fix-terraform-ls.patch ];
+
+  postPatch = ''
+    substituteInPlace out/serverPath.js --replace TERRAFORM-LS-PATH ${terraform-ls}/bin/terraform-ls
+  '';
+
+  meta = {
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.rhoriguchi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/fix-terraform-ls.patch b/nixpkgs/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/fix-terraform-ls.patch
new file mode 100644
index 000000000000..e2dcd0b70aa9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/fix-terraform-ls.patch
@@ -0,0 +1,19 @@
+diff --git a/out/serverPath.js b/out/serverPath.js
+index fafa915..2e6d376 100644
+--- a/out/serverPath.js
++++ b/out/serverPath.js
+@@ -18,7 +18,13 @@ exports.CUSTOM_BIN_PATH_OPTION_NAME = 'languageServer.pathToBinary';
+ class ServerPath {
+     constructor(context) {
+         this.context = context;
+-        this.customBinPath = vscode.workspace.getConfiguration('terraform').get(exports.CUSTOM_BIN_PATH_OPTION_NAME);
++
++        const customBinPath = vscode.workspace.getConfiguration('terraform').get(exports.CUSTOM_BIN_PATH_OPTION_NAME);
++        if (!customBinPath) {
++          this.customBinPath = 'TERRAFORM-LS-PATH';
++        } else {
++            this.customBinPath = customBinPath;
++        }
+     }
+     installPath() {
+         return path.join(this.context.globalStorageUri.fsPath, INSTALL_FOLDER_NAME);
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/jebbs.plantuml/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/jebbs.plantuml/default.nix
new file mode 100644
index 000000000000..fd1367b23968
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/jebbs.plantuml/default.nix
@@ -0,0 +1,27 @@
+{ lib, vscode-utils, plantuml, jq, moreutils }:
+
+vscode-utils.buildVscodeMarketplaceExtension {
+  mktplcRef = {
+    name = "plantuml";
+    publisher = "jebbs";
+    version = "2.17.4";
+    sha256 = "sha256-fnz6ubB73i7rJcv+paYyNV1r4cReuyFPjgPM0HO40ug=";
+  };
+  nativeBuildInputs = [ jq moreutils ];
+  postInstall = ''
+    cd "$out/$installPrefix"
+    jq '.contributes.configuration.properties."plantuml.java".default = "${plantuml}/bin/plantuml"' package.json | sponge package.json
+  '';
+
+  meta = {
+    description = "A Visual Studio Code extension for supporting Rich PlantUML";
+    downloadPage =
+      "https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml";
+    homepage = "https://github.com/qjebbs/vscode-plantuml";
+    changelog =
+      "https://marketplace.visualstudio.com/items/jebbs.plantuml/changelog";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.victormignot ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/language-packs.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/language-packs.nix
new file mode 100644
index 000000000000..3c3253e2c3da
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/language-packs.nix
@@ -0,0 +1,88 @@
+{ lib, vscode-utils }:
+
+with vscode-utils;
+
+let
+
+  buildVscodeLanguagePack = { language, version ? "1.76.2023030809", sha256 }:
+    buildVscodeMarketplaceExtension {
+      mktplcRef = {
+        name = "vscode-language-pack-${language}";
+        publisher = "MS-CEINTL";
+        inherit version sha256;
+      };
+      meta = {
+        license = lib.licenses.mit;
+      };
+    };
+
+in
+
+# See list of core language packs at https://github.com/Microsoft/vscode-loc
+{
+  # French
+  vscode-language-pack-fr = buildVscodeLanguagePack {
+    language = "fr";
+    sha256 = "19brasjwwgdskgwayclmsywf007i2d47vx7dwq6hq2bhx4rd6xfy";
+  };
+  # Italian
+  vscode-language-pack-it = buildVscodeLanguagePack {
+    language = "it";
+    sha256 = "1s5x3w125fliimr0i218mars4xjl70hsz0ihxrjk97c66yzg3gw7";
+  };
+  # German
+  vscode-language-pack-de = buildVscodeLanguagePack {
+    language = "de";
+    sha256 = "0ih8h3n5mcadclxxlrgajq7kprgj9fbklccc00r0z8vqnmlc0dw0";
+  };
+  # Spanish
+  vscode-language-pack-es = buildVscodeLanguagePack {
+    language = "es";
+    sha256 = "077n4mlx9qxqlp018wfi6hm3syhxsp2xzyih42kpsp71xi8j113r";
+  };
+  # Russian
+  vscode-language-pack-ru = buildVscodeLanguagePack {
+    language = "ru";
+    sha256 = "04mdxspm8i1dra0qmim4n4qin050adm2zk9pcnn3z4qbf3yvvnf4";
+  };
+  # Chinese (Simplified)
+  vscode-language-pack-zh-hans = buildVscodeLanguagePack {
+    language = "zh-hans";
+    sha256 = "0f2bg5nm4sybwf84afvhc22yjp66rzdz4s1iaa31yxb4c1ij2vsr";
+  };
+  # Chinese (Traditional)
+  vscode-language-pack-zh-hant = buildVscodeLanguagePack {
+    language = "zh-hant";
+    sha256 = "1dspg6x7n9b89cirf63m2y0p6r2m197qzgvvavqfm7bv6cpskha0";
+  };
+  # Japanese
+  vscode-language-pack-ja = buildVscodeLanguagePack {
+    language = "ja";
+    sha256 = "1idiv9xqfqhz1y3pd4h3ayy3svccr4jhrm23nf9h80g38k74qayi";
+  };
+  # Korean
+  vscode-language-pack-ko = buildVscodeLanguagePack {
+    language = "ko";
+    sha256 = "0g980sfa386by741sxxlapc2cjsbkfvldcc5kylxvf2drigyvka7";
+  };
+  # Czech
+  vscode-language-pack-cs = buildVscodeLanguagePack {
+    language = "cs";
+    sha256 = "0sm3xxiv8lrln051yjq6s5jmpvkbphv1i90lrx472pwknmiwx74a";
+  };
+  # Portuguese (Brazil)
+  vscode-language-pack-pt-br = buildVscodeLanguagePack {
+    language = "pt-BR";
+    sha256 = "1k4y528im6sr8n4blh6k4xng4d534siaaflvnarizs3py9wa61d1";
+  };
+  # Turkish
+  vscode-language-pack-tr = buildVscodeLanguagePack {
+    language = "tr";
+    sha256 = "1yf59idj6g77sqkm46bdadklvbvb3ncxzd9mfm9y32h54fxffh6a";
+  };
+  # Pseudo Language
+  vscode-language-pack-qps-ploc = buildVscodeLanguagePack {
+    language = "qps-ploc";
+    sha256 = "1dmn58fx8mpbn84zqyy09a1j67b5988gn7xjmfdk73bbd7hzbmji";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix
new file mode 100644
index 000000000000..e871baa608ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/mktplcExtRefToFetchArgs.nix
@@ -0,0 +1,11 @@
+{ publisher, name, version, arch ? "", sha256 ? "" }:
+let
+  archurl = (if arch == "" then "" else "?targetPlatform=${arch}");
+in
+{
+  url = "https://${publisher}.gallery.vsassets.io/_apis/public/gallery/publisher/${publisher}/extension/${name}/${version}/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage${archurl}";
+  sha256 = sha256;
+  # 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";
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix
new file mode 100644
index 000000000000..a170385f9aa1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix
@@ -0,0 +1,136 @@
+{ lib
+, fetchurl
+, vscode-utils
+, patchelf
+, icu
+, stdenv
+, openssl
+, coreutils
+}:
+let
+  inherit (stdenv.hostPlatform) system;
+
+  version = "1.25.4";
+
+  vsixInfo =
+    let
+      linuxDebuggerBins = [
+        ".debugger/vsdbg-ui"
+        ".debugger/vsdbg"
+      ];
+      darwinX86DebuggerBins = [
+        ".debugger/x86_64/vsdbg-ui"
+        ".debugger/x86_64/vsdbg"
+      ];
+      darwinAarch64DebuggerBins = [
+        ".debugger/arm64/vsdbg-ui"
+        ".debugger/arm64/vsdbg"
+      ];
+      omniSharpBins = [
+        ".omnisharp/1.39.4-net6.0/OmniSharp"
+      ];
+      razorBins = [
+        ".razor/createdump"
+        ".razor/rzls"
+      ];
+    in
+      {
+        x86_64-linux = {
+          url = "https://github.com/OmniSharp/omnisharp-vscode/releases/download/v${version}/csharp-${version}-linux-x64.vsix";
+          sha256 = "08k0wxyj8wz8npw1yqrkdpbvwbnrdnsngdkrd2p5ayn3v608ifc2";
+          binaries = linuxDebuggerBins ++ omniSharpBins ++ razorBins;
+        };
+        aarch64-linux = {
+          url = "https://github.com/OmniSharp/omnisharp-vscode/releases/download/v${version}/csharp-${version}-linux-arm64.vsix";
+          sha256 = "09r2d463dk35905f2c3msqzxa7ylcf0ynhbp3n6d12y3x1200pr2";
+          binaries = linuxDebuggerBins ++ omniSharpBins ++ razorBins;
+        };
+        x86_64-darwin = {
+          url = "https://github.com/OmniSharp/omnisharp-vscode/releases/download/v${version}/csharp-${version}-darwin-x64.vsix";
+          sha256 = "0mp550kq33zwmlvrhymwnixl4has62imw3ia5z7a01q7mp0w9wpn";
+          binaries = darwinX86DebuggerBins ++ omniSharpBins ++ razorBins;
+        };
+        aarch64-darwin = {
+          url = "https://github.com/OmniSharp/omnisharp-vscode/releases/download/v${version}/csharp-${version}-darwin-arm64.vsix";
+          sha256 = "08406xz2raal8f10bmnkz1mwdfprsbkjxzc01v0i4sax1hr2a2yl";
+          binaries = darwinAarch64DebuggerBins ++ darwinX86DebuggerBins ++ omniSharpBins ++ razorBins;
+        };
+      }.${system} or (throw "Unsupported system: ${system}");
+in
+vscode-utils.buildVscodeMarketplaceExtension rec {
+  mktplcRef = {
+    name = "csharp";
+    publisher = "ms-dotnettools";
+    inherit version;
+  };
+
+  vsix = fetchurl {
+    name = "${mktplcRef.publisher}-${mktplcRef.name}.zip";
+    inherit (vsixInfo) url sha256;
+  };
+
+  nativeBuildInputs = [
+    patchelf
+  ];
+
+  postPatch = ''
+    declare ext_unique_id
+    # See below as to why we cannot take the whole basename.
+    ext_unique_id="$(basename "$out" | head -c 32)"
+
+    # Fix 'Unable to connect to debuggerEventsPipeName .. exceeds the maximum length 107.' when
+    # attempting to launch a specific test in debug mode. The extension attemps to open
+    # a pipe in extension dir which would fail anyway. We change to target file path
+    # to a path in tmp dir with a short name based on the unique part of the nix store path.
+    # This is however a brittle patch as we're working on minified code.
+    # Hence the attempt to only hold on stable names.
+    # However, this really would better be fixed upstream.
+    sed -i \
+      -E -e 's/(this\._pipePath=[a-zA-Z0-9_]+\.join\()([a-zA-Z0-9_]+\.getExtensionPath\(\)[^,]*,)/\1require("os").tmpdir(), "'"$ext_unique_id"'"\+/g' \
+      "$PWD/dist/extension.js"
+
+    # Fix reference to uname
+    sed -i \
+      -E -e 's_uname -m_${coreutils}/bin/uname -m_g' \
+      "$PWD/dist/extension.js"
+
+    patchelf_add_icu_as_needed() {
+      declare elf="''${1?}"
+      declare icu_major_v="${
+      lib.head (lib.splitVersion (lib.getVersion icu.name))
+    }"
+
+      for icu_lib in icui18n icuuc icudata; do
+        patchelf --add-needed "lib''${icu_lib}.so.$icu_major_v" "$elf"
+      done
+    }
+
+    patchelf_common() {
+      declare elf="''${1?}"
+
+      patchelf_add_icu_as_needed "$elf"
+      patchelf --add-needed "libssl.so" "$elf"
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc openssl icu.out ]}:\$ORIGIN" \
+        "$elf"
+    }
+
+  '' + (lib.concatStringsSep "\n" (map
+    (bin: ''
+      chmod +x "${bin}"
+    '')
+    vsixInfo.binaries))
+  + lib.optionalString stdenv.isLinux (lib.concatStringsSep "\n" (map
+    (bin: ''
+      patchelf_common "${bin}"
+    '')
+    vsixInfo.binaries));
+
+  meta = {
+    description = "C# for Visual Studio Code (powered by OmniSharp)";
+    homepage = "https://github.com/OmniSharp/omnisharp-vscode";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.jraygauthier ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-python.python/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-python.python/default.nix
new file mode 100644
index 000000000000..559eef612cd0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-python.python/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, vscode-utils
+, icu
+, python3
+  # When `true`, the python default setting will be fixed to specified.
+  # Use version from `PATH` for default setting otherwise.
+  # Defaults to `false` as we expect it to be project specific most of the time.
+, pythonUseFixed ? false
+  # For updateScript
+, writeScript
+, bash
+, curl
+, coreutils
+, gnused
+, jq
+, nix
+}:
+
+vscode-utils.buildVscodeMarketplaceExtension rec {
+  mktplcRef = {
+    name = "python";
+    publisher = "ms-python";
+    version = "2023.1.10091012";
+    sha256 = "sha256-JosFv6ngJmw1XRILwTZMVxlGIdWFLFQjj4olfnVwAIM=";
+  };
+
+  buildInputs = [ icu ];
+
+  nativeBuildInputs = [ python3.pkgs.wrapPython ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    debugpy
+    jedi-language-server
+  ];
+
+  postPatch = ''
+    # remove bundled python deps and use libs from nixpkgs
+    rm -r pythonFiles/lib
+    mkdir -p pythonFiles/lib/python/
+    ln -s ${python3.pkgs.debugpy}/lib/*/site-packages/debugpy pythonFiles/lib/python/
+    buildPythonPath "$propagatedBuildInputs"
+    for i in pythonFiles/*.py; do
+      patchPythonScript "$i"
+    done
+  '' + lib.optionalString pythonUseFixed ''
+    # Patch `packages.json` so that nix's *python* is used as default value for `python.pythonPath`.
+    substituteInPlace "./package.json" \
+      --replace "\"default\": \"python\"" "\"default\": \"${python3.interpreter}\""
+  '';
+
+  passthru.updateScript = writeScript "update" ''
+    #! ${bash}/bin/bash
+
+    set -eu -o pipefail
+
+    export PATH=${lib.makeBinPath [
+      curl
+      coreutils
+      gnused
+      jq
+      nix
+    ]}
+
+    api=$(curl -s 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery' \
+      -H 'accept: application/json;api-version=3.0-preview.1' \
+      -H 'content-type: application/json' \
+      --data-raw '{"filters":[{"criteria":[{"filterType":7,"value":"${mktplcRef.publisher}.${mktplcRef.name}"}]}],"flags":16}')
+    # Find the latest version compatible with stable vscode version
+    version=$(echo $api | jq -r '.results[0].extensions[0].versions | map(select(has("properties"))) | map(select(.properties | map(select(.key == "Microsoft.VisualStudio.Code.Engine")) | .[0].value | test("\\^[0-9.]+$"))) | .[0].version')
+
+    if [[ $version != ${mktplcRef.version} ]]; then
+      tmp=$(mktemp)
+      curl -sLo $tmp $(echo ${(import ../mktplcExtRefToFetchArgs.nix mktplcRef).url} | sed "s|${mktplcRef.version}|$version|")
+      hash=$(nix hash file --type sha256 --base32 --sri $tmp)
+      sed -i -e "s|${mktplcRef.sha256}|$hash|" -e "s|${mktplcRef.version}|$version|" pkgs/applications/editors/vscode/extensions/python/default.nix
+    fi
+  '';
+
+  meta = {
+    description = "A Visual Studio Code extension with rich support for the Python language";
+    downloadPage = "https://marketplace.visualstudio.com/items?itemName=ms-python.python";
+    homepage = "https://github.com/Microsoft/vscode-python";
+    changelog = "https://github.com/microsoft/vscode-python/releases";
+    license = lib.licenses.mit;
+    platforms = [ "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ];
+    maintainers = [ lib.maintainers.jraygauthier lib.maintainers.jfchevrette ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-toolsai.jupyter/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-toolsai.jupyter/default.nix
new file mode 100644
index 000000000000..ef1a5a4d49ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-toolsai.jupyter/default.nix
@@ -0,0 +1,39 @@
+{ lib, vscode-utils, jq, moreutils }:
+
+vscode-utils.buildVscodeMarketplaceExtension {
+  mktplcRef = {
+    name = "jupyter";
+    publisher = "ms-toolsai";
+    version = "2023.2.1000411022";
+    sha256 = "sha256-gMK/t/rLXYN3rlHxxVeW0W/FWEP0ZCiEwzM8DY14vYg=";
+  };
+
+  nativeBuildInputs = [
+    jq
+    moreutils
+  ];
+
+  postPatch = ''
+    # Patch 'packages.json' so that the expected '__metadata' field exists.
+    # This works around observed extension load failure on vscode's attempt
+    # to rewrite 'packages.json' with this new information.
+    print_jq_query() {
+        cat <<"EOF"
+    .__metadata = {
+      "id": "6c2f1801-1e7f-45b2-9b5c-7782f1e076e8",
+      "publisherId": "ac8eb7c9-3e59-4b39-8040-f0484d8170ce",
+      "publisherDisplayName": "Microsoft",
+      "installedTimestamp": 0
+    }
+    EOF
+    }
+    jq "$(print_jq_query)" ./package.json | sponge ./package.json
+  '';
+
+  meta = {
+    description = "Jupyter extension for vscode";
+    homepage = "https://github.com/microsoft/vscode-jupyter";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.jraygauthier ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode-remote.remote-ssh/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode-remote.remote-ssh/default.nix
new file mode 100644
index 000000000000..de191e97e0dc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode-remote.remote-ssh/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, vscode-utils
+, useLocalExtensions ? false
+}:
+# Note that useLocalExtensions requires that vscode-server is not running
+# on host. If it is, you'll need to remove $HOME/.vscode-server,
+# and redo the install by running "Connect to host" on client
+
+let
+  inherit (vscode-utils) buildVscodeMarketplaceExtension;
+
+  nodeVersion = "16";
+
+  # As VS Code executes this code on the remote machine
+  # we test to see if we can build Node from Nixpkgs
+  # otherwise we check if the globally installed Node
+  # is usable.
+  patch = ''
+    # Use Node from nixpkgs for NixOS hosts
+    #
+
+    serverDir="$HOME/.vscode-server/bin/$COMMIT_ID"
+    serverNode="$serverDir/node"
+    echo "VS Code Node: $serverNode"
+
+    # Check if VS Code Server has a non-working Node or the wrong version of Node
+    if ! nodeVersion=$($serverNode -v) || [ "\''${nodeVersion:1:2}" != "${nodeVersion}" ]; then
+      echo "VS Code Node Version: $nodeVersion"
+
+      if nix-build "<nixpkgs>" -A nodejs-${nodeVersion}_x --out-link "$serverDir/nix" && [ -e "$serverDir/nix/bin/node" ]; then
+        nodePath="$serverDir/nix/bin/node"
+      fi
+
+      echo "Node from Nix: $nodePath"
+
+      nodeVersion=$($nodePath -v)
+      echo "Node from Nix Version: $nodeVersion"
+
+      if [ "\''${nodeVersion:1:2}" != "${nodeVersion}" ]; then
+        echo "Getting Node from Nix failed, use Local Node instead"
+        nodePath=$(which node)
+        echo "Local Node: $nodePath"
+        nodeVersion=$($nodePath -v)
+        echo "Local Node Version: $nodeVersion"
+      fi
+
+      if [ "\''${nodeVersion:1:2}" == "${nodeVersion}" ]; then
+        echo PATCH: replacing $serverNode with $nodePath
+        ln -sf $nodePath $serverNode
+      fi
+    fi
+
+    nodeVersion=$($serverNode -v)
+    echo "VS Code Node Version: $nodeVersion"
+
+    if [ "\''${nodeVersion:1:2}" != "${nodeVersion}" ]; then
+      echo "Unsupported VS Code Node version: $nodeVersion", quitting
+      fail_with_exitcode ''${o.InstallExitCode.ServerTransferFailed}
+    fi
+
+    ${lib.optionalString useLocalExtensions ''
+      # Use local extensions
+      if [ -d $HOME/.vscode/extensions ]; then
+        if [ -e $HOME/.vscode-server/extensions ]; then
+          mv $HOME/.vscode-server/extensions $HOME/.vscode-server/extensions.bak
+        fi
+
+        mkdir -p $HOME/.vscode-server
+        ln -s $HOME/.vscode/extensions $HOME/.vscode-server/extensions
+      fi
+    ''}
+
+    #
+    # Start the server
+  '';
+in
+buildVscodeMarketplaceExtension {
+  mktplcRef = {
+    name = "remote-ssh";
+    publisher = "ms-vscode-remote";
+    version = "0.78.0";
+    sha256 = "sha256-vd+9d86Z8429QpQVCZm8gtiJDcMpD++aiFVwvCrPg5w=";
+  };
+
+  postPatch = ''
+    substituteInPlace "out/extension.js" \
+      --replace '# Start the server\n' '${patch}'
+  '';
+
+  meta = {
+    description = "Use any remote machine with a SSH server as your development environment.";
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.SuperSandro2000 lib.maintainers.tbenst ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/default.nix
new file mode 100644
index 000000000000..c51a86f888e4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/default.nix
@@ -0,0 +1,90 @@
+{ lib, vscode-utils
+, fetchurl, writeScript, runtimeShell
+, jq, clang-tools
+, gdbUseFixed ? true, gdb # The gdb default setting will be fixed to specified. Use version from `PATH` otherwise.
+, autoPatchelfHook, makeWrapper, stdenv, lttng-ust, libkrb5, zlib
+}:
+
+/*
+  Note that this version of the extension still has some nix specific issues
+  which could not be fixed merely by patching (inside a C# dll).
+
+  In particular, the debugger requires either gnome-terminal or xterm. However
+  instead of looking for the terminal executable in `PATH`, for any linux platform
+  the dll uses an hardcoded path to one of these.
+
+  So, in order for debugging to work properly, you merely need to create symlinks
+  to one of these terminals at the appropriate location.
+
+  The good news is the the utility library is open source and with some effort
+  we could build a patched version ourselves. See:
+
+  <https://github.com/Microsoft/MIEngine/blob/2885386dc7f35e0f1e44827269341e786361f28e/src/MICore/TerminalLauncher.cs#L156>
+
+  Also, the extension should eventually no longer require an external terminal. See:
+
+  <https://github.com/Microsoft/vscode-cpptools/issues/35>
+
+  Once the symbolic link temporary solution taken, everything shoud run smootly.
+*/
+
+let
+  gdbDefaultsTo = if gdbUseFixed then "${gdb}/bin/gdb" else "gdb";
+in
+vscode-utils.buildVscodeMarketplaceExtension rec {
+  mktplcRef = {
+    name = "cpptools";
+    publisher = "ms-vscode";
+    version = "1.11.0";
+    sha256 = "c0725d3914aeb2515627691727455cc27e7a75031fa02ca957be02cc210bd64d";
+    arch = "linux-x64";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+  ];
+
+  buildInputs = [
+    jq
+    lttng-ust
+    libkrb5
+    zlib
+    stdenv.cc.cc.lib
+  ];
+
+  postPatch = ''
+    mv ./package.json ./package_orig.json
+
+    # 1. Add activation events so that the extension is functional. This listing is empty when unpacking the extension but is filled at runtime.
+    # 2. Patch `package.json` so that nix's *gdb* is used as default value for `miDebuggerPath`.
+    cat ./package_orig.json | \
+      jq --slurpfile actEvts ${./package-activation-events.json} '(.activationEvents) = $actEvts[0]' | \
+      jq '(.contributes.debuggers[].configurationAttributes | .attach , .launch | .properties.miDebuggerPath | select(. != null) | select(.default == "/usr/bin/gdb") | .default) = "${gdbDefaultsTo}"' > \
+      ./package.json
+
+    # Prevent download/install of extensions
+    touch "./install.lock"
+
+    # Clang-format from nix package.
+    mv ./LLVM/ ./LLVM_orig
+    mkdir "./LLVM/"
+    find "${clang-tools}" -mindepth 1 -maxdepth 1 | xargs ln -s -t "./LLVM"
+
+    # Patching binaries
+    chmod +x bin/cpptools bin/cpptools-srv bin/cpptools-wordexp debugAdapters/bin/OpenDebugAD7
+    patchelf --replace-needed liblttng-ust.so.0 liblttng-ust.so.1 ./debugAdapters/bin/libcoreclrtraceptprovider.so
+  '';
+
+  postFixup = lib.optionalString gdbUseFixed ''
+    wrapProgram $out/share/vscode/extensions/ms-vscode.cpptools/debugAdapters/bin/OpenDebugAD7 --prefix PATH : ${lib.makeBinPath [ gdb ]}
+  '';
+
+  meta = {
+    description = "The C/C++ extension adds language support for C/C++ to Visual Studio Code, including features such as IntelliSense and debugging.";
+    homepage = "https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools";
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.jraygauthier lib.maintainers.stargate01 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/missing_elf_deps.sh b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/missing_elf_deps.sh
new file mode 100755
index 000000000000..e282e126f83b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/missing_elf_deps.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -p coreutils -i bash
+
+scriptDir=$(cd "`dirname "$0"`"; pwd)
+echo "scriptDir='$scriptDir'"
+
+function get_pkg_out() {
+  local pkg="$1"
+  local suffix="${2:-}"
+  local nixExp="with (import <nixpkgs> {}); ${pkg}"
+  echo "$(nix-build -E "$nixExp" --no-out-link)${suffix}"
+}
+
+interpreter="$(get_pkg_out "stdenv.cc.libc" "/lib/ld-linux-x86-64.so.2")"
+echo "interpreter='$interpreter'"
+
+# For clangformat dep on 'libtinfo.so.5'.
+ncursesLibDir="$(get_pkg_out "ncurses5.out" "/lib")"
+echo "ncursesLibDir='$ncursesLibDir'"
+
+# For clanformat dep on 'libstdc++.so.6'.
+stdcppLibDir="$(get_pkg_out "stdenv.cc.cc.lib" "/lib")"
+echo "stdcppLibDir='$stdcppLibDir'"
+
+# For clangformat dep on 'libz.so.1'.
+zlibLibDir="$(get_pkg_out "zlib.out" "/lib")"
+echo "zlibLibDir='$zlibLibDir'"
+
+function patchelf_mono() {
+  local exe="$1"
+  patchelf --set-interpreter "$interpreter" "$exe"
+}
+
+function patchelf_clangformat() {
+  local exe="$1"
+  patchelf --set-interpreter "$interpreter" "$exe"
+  local rpath="$ncursesLibDir:$stdcppLibDir:$zlibLibDir"
+  patchelf --set-rpath "$rpath" "$exe"
+}
+
+function print_nix_version_clangtools() {
+  nixClangToolsBin="$(get_pkg_out "clang-tools" "/bin")"
+  echo "nixClangToolsBin='$nixClangToolsBin'"
+  $nixClangToolsBin/clang-format --version
+}
+
+function print_nix_version_mono() {
+  nixMonoBin="$(get_pkg_out "mono" "/bin")"
+  echo "nixMonoBin='$nixMonoBin'"
+  $nixMonoBin/mono --version
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/package-activation-events.json b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/package-activation-events.json
new file mode 100644
index 000000000000..c2d8a10f340a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/package-activation-events.json
@@ -0,0 +1,25 @@
+[
+  "onLanguage:cpp",
+  "onLanguage:c",
+  "onCommand:extension.pickNativeProcess",
+  "onCommand:extension.pickRemoteNativeProcess",
+  "onCommand:C_Cpp.ConfigurationEdit",
+  "onCommand:C_Cpp.ConfigurationSelect",
+  "onCommand:C_Cpp.ConfigurationProviderSelect",
+  "onCommand:C_Cpp.SwitchHeaderSource",
+  "onCommand:C_Cpp.Navigate",
+  "onCommand:C_Cpp.GoToDeclaration",
+  "onCommand:C_Cpp.PeekDeclaration",
+  "onCommand:C_Cpp.ToggleErrorSquiggles",
+  "onCommand:C_Cpp.ToggleIncludeFallback",
+  "onCommand:C_Cpp.ToggleDimInactiveRegions",
+  "onCommand:C_Cpp.ToggleSnippets",
+  "onCommand:C_Cpp.ShowReleaseNotes",
+  "onCommand:C_Cpp.ResetDatabase",
+  "onCommand:C_Cpp.PauseParsing",
+  "onCommand:C_Cpp.ResumeParsing",
+  "onCommand:C_Cpp.ShowParsingCommands",
+  "onCommand:C_Cpp.TakeSurvey",
+  "onDebug",
+  "workspaceContains:/.vscode/c_cpp_properties.json"
+]
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/update_helper.sh b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/update_helper.sh
new file mode 100755
index 000000000000..a5d8d6d1d263
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/update_helper.sh
@@ -0,0 +1,165 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -p coreutils -p jq -p unzip -i bash
+set -euo pipefail
+
+#
+# A little script to help maintaining this package. It will:
+#
+#  -  download the specified version of the extension to the store and print its url, packed store path and hash
+#  -  unpack the extension, bring it to the store and print its store path and hash
+#  -  fetch its runtimes dependencies from the 'package.json' file using the 'jq' utility, unpack those to the store
+#     and print its url store path and hash
+#  -  patch elf of the binaries that got a nix replacement
+#  -  bring the patched version to the store
+#  -  run their '--version' and call 'ldd'
+#  -  print the version of the runtime deps nix replacements.
+#
+# TODO: Print to a properly formatted nix file all the required information to fetch everything (extension + runtime deps).
+# TODO: Print x86 and maybe darwin runtime dependencies.
+#
+
+scriptDir=$(cd "`dirname "$0"`"; pwd)
+echo "scriptDir='$scriptDir'"
+
+extPublisher="vscode"
+extName="cpptools"
+defaultExtVersion="0.16.1"
+extVersion="${1:-$defaultExtVersion}"
+
+echo
+echo "------------- Downloading extension ---------------"
+
+extZipStoreName="${extPublisher}-${extName}.zip"
+extUrl="https://ms-vscode.gallery.vsassets.io/_apis/public/gallery/publisher/ms-vscode/extension/cpptools/${extVersion}/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage"
+echo "extUrl='$extUrl'"
+storePathWithSha=$(nix-prefetch-url --name "$extZipStoreName" --print-path "$extUrl" 2> /dev/null)
+
+cpptoolsZipStorePath="$(echo "$storePathWithSha" | tail -n1)"
+cpptoolsZipSha256="$(echo "$storePathWithSha" | head -n1)"
+echo "cpptoolsZipStorePath='$cpptoolsZipStorePath'"
+echo "cpptoolsZipSha256='$cpptoolsZipSha256'"
+
+
+extStoreName="${extPublisher}-${extName}"
+
+
+function rm_tmpdir() {
+  rm -rf "$tmpDir"
+}
+function make_trapped_tmpdir() {
+  tmpDir=$(mktemp -d)
+  trap rm_tmpdir EXIT
+}
+
+echo
+echo "------------- Unpacked extension ---------------"
+
+make_trapped_tmpdir
+unzip -q -d "$tmpDir" "$cpptoolsZipStorePath"
+
+cpptoolsStorePath="$(nix add-to-store -n "$extStoreName" "$tmpDir")"
+cpptoolsSha256="$(nix hash-path --base32 --type sha512 "$cpptoolsStorePath")"
+echo "cpptoolsStorePath='$cpptoolsStorePath'"
+echo "cpptoolsSha256='$cpptoolsSha256'"
+
+rm_tmpdir
+
+storePathWithSha=$(nix-prefetch-url --print-path "file://${cpptoolsStorePath}/extension/package.json" 2> /dev/null)
+
+extPackageJSONStorePath="$(echo "$storePathWithSha" | tail -n1)"
+extPackageJSONSha256="$(echo "$storePathWithSha" | head -n1)"
+echo "extPackageJSONStorePath='$extPackageJSONStorePath'"
+echo "extPackageJSONSha256='$extPackageJSONSha256'"
+
+print_runtime_dep() {
+
+  local outName="$1"
+  local extPackageJSONStorePath="$2"
+  local depDesc="$3"
+
+  local urlRaw=$(cat "$extPackageJSONStorePath" | jq -r --arg desc "$depDesc" '.runtimeDependencies[] | select(.description == $desc) | .url')
+  local url=$(echo $urlRaw | xargs curl -Ls -o /dev/null -w %{url_effective})
+
+  local urlRawVarStr="${outName}_urlRaw='$urlRaw'"
+  local urlVarStr="${outName}_url='$url'"
+  echo "$urlRawVarStr"
+  echo "$urlVarStr"
+
+  local storePathWithSha="$(nix-prefetch-url --unpack --print-path "$url" 2> /dev/null)"
+
+  local storePath="$(echo "$storePathWithSha" | tail -n1)"
+  local sha256="$(echo "$storePathWithSha" | head -n1)"
+
+  local sha256VarStr="${outName}_sha256='$sha256'"
+  local storePathVarStr="${outName}_storePath='$storePath'"
+  echo "$sha256VarStr"
+  echo "$storePathVarStr"
+
+  eval "$urlRawVarStr"
+  eval "$urlVarStr"
+  eval "$sha256VarStr"
+  eval "$storePathVarStr"
+}
+
+echo
+echo "------------- Runtime dependencies ---------------"
+
+print_runtime_dep "langComponentBinaries" "$extPackageJSONStorePath" "C/C++ language components (Linux / x86_64)"
+print_runtime_dep "monoRuntimeBinaries" "$extPackageJSONStorePath" "Mono Runtime (Linux / x86_64)"
+print_runtime_dep "clanFormatBinaries" "$extPackageJSONStorePath" "ClangFormat (Linux / x86_64)"
+
+
+echo
+echo "------------- Runtime deps missing elf deps ---------------"
+
+source "$scriptDir/missing_elf_deps.sh"
+
+echo
+echo "------------- Runtime dep mono ---------------"
+
+make_trapped_tmpdir
+find "$monoRuntimeBinaries_storePath" -mindepth 1 -maxdepth 1 | xargs -d '\n' cp -rp -t "$tmpDir"
+chmod -R a+rwx "$tmpDir"
+
+ls -la "$tmpDir/debugAdapters"
+
+patchelf_mono "$tmpDir/debugAdapters/mono.linux-x86_64"
+
+chmod a+x "$tmpDir/debugAdapters/mono.linux-x86_64"
+ldd "$tmpDir/debugAdapters/mono.linux-x86_64"
+"$tmpDir/debugAdapters/mono.linux-x86_64" --version
+
+monoRuntimeBinariesPatched_storePath="$(nix add-to-store -n "monoRuntimeBinariesPatched" "$tmpDir")"
+echo "monoRuntimeBinariesPatched_storePath='$monoRuntimeBinariesPatched_storePath'"
+
+rm_tmpdir
+
+
+echo
+echo "------------- Runtime dep clang ---------------"
+make_trapped_tmpdir
+find "$clanFormatBinaries_storePath" -mindepth 1 -maxdepth 1 | xargs -d '\n' cp -rp -t "$tmpDir"
+chmod -R a+rwx "$tmpDir"
+
+ls -la "$tmpDir/bin"
+
+patchelf_clangformat "$tmpDir/bin/clang-format"
+
+chmod a+x "$tmpDir/bin/clang-format"
+ldd "$tmpDir/bin/clang-format"
+"$tmpDir/bin/clang-format" --version
+
+
+clanFormatBinariesPatched_storePath="$(nix add-to-store -n "clanFormatBinariesPatched" "$tmpDir")"
+echo "clanFormatBinariesPatched_storePath='$clanFormatBinariesPatched_storePath'"
+
+rm_tmpdir
+
+echo
+echo "------------- Nix mono ---------------"
+print_nix_version_clangtools
+
+echo
+echo "------------- Nix mono ---------------"
+print_nix_version_mono
+
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vsliveshare.vsliveshare/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vsliveshare.vsliveshare/default.nix
new file mode 100644
index 000000000000..209ee1d95a9a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/ms-vsliveshare.vsliveshare/default.nix
@@ -0,0 +1,54 @@
+# Based on previous attempts:
+#  -  <https://github.com/msteen/nixos-vsliveshare/blob/master/pkgs/vsliveshare/default.nix>
+#  -  <https://github.com/NixOS/nixpkgs/issues/41189>
+{ lib, gccStdenv, vscode-utils
+, autoPatchelfHook, bash, makeWrapper
+, curl, gcc, libsecret, libunwind, libX11, lttng-ust, util-linux
+, desktop-file-utils, xsel
+}:
+
+let
+  # https://docs.microsoft.com/en-us/visualstudio/liveshare/reference/linux#install-prerequisites-manually
+  libs = [
+    # Credential Storage
+    libsecret
+
+    # NodeJS
+    libX11
+
+    # https://github.com/flathub/com.visualstudio.code.oss/issues/11#issuecomment-392709170
+    libunwind
+    lttng-ust
+    curl
+
+    # General
+    gcc.cc.lib
+    util-linux # libuuid
+  ];
+
+in ((vscode-utils.override { stdenv = gccStdenv; }).buildVscodeMarketplaceExtension {
+  mktplcRef = {
+    name = "vsliveshare";
+    publisher = "ms-vsliveshare";
+    version = "1.0.5834";
+    sha256 = "sha256-+KfivY8W1VtUxhdXuUKI5e1elo6Ert1Tsf4xVXsKB3Y=";
+  };
+}).overrideAttrs({ buildInputs ? [], ... }: {
+  buildInputs = buildInputs ++ libs;
+
+  # Using a patch file won't work, because the file changes too often, causing the patch to fail on most updates.
+  # Rather than patching the calls to functions, we modify the functions to return what we want,
+  # which is less likely to break in the future.
+  postPatch = ''
+    substituteInPlace extension.js \
+      --replace "'xsel'" "'${xsel}/bin/xsel'"
+  '';
+
+  meta = {
+    description = "Live Share lets you achieve greater confidence at speed by streamlining collaborative editing, debugging, and more in real-time during development";
+    homepage = "https://aka.ms/vsls-docs";
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.jraygauthier lib.maintainers.V ];
+    platforms = [ "x86_64-linux" ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/build-deps/package.json b/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/build-deps/package.json
new file mode 100644
index 000000000000..167f92fbede9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/build-deps/package.json
@@ -0,0 +1,23 @@
+{
+  "name": "rust-analyzer",
+  "version": "0.3.1426",
+  "dependencies": {
+    "anser": "^2.1.1",
+    "d3": "^7.6.1",
+    "d3-graphviz": "^5.0.2",
+    "vscode-languageclient": "^8.0.2",
+    "@types/node": "~16.11.7",
+    "@types/vscode": "~1.66.0",
+    "@typescript-eslint/eslint-plugin": "^5.30.5",
+    "@typescript-eslint/parser": "^5.30.5",
+    "@vscode/test-electron": "^2.1.5",
+    "cross-env": "^7.0.3",
+    "eslint": "^8.19.0",
+    "eslint-config-prettier": "^8.5.0",
+    "ovsx": "^0.5.2",
+    "prettier": "^2.7.1",
+    "tslib": "^2.4.0",
+    "typescript": "^4.7.4",
+    "vsce": "^2.9.2"
+  }
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/default.nix
new file mode 100644
index 000000000000..dadb291aa534
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, fetchFromGitHub
+, vscode-utils
+, jq
+, rust-analyzer
+, nodePackages
+, moreutils
+, esbuild
+, pkg-config
+, libsecret
+, stdenv
+, darwin
+, setDefaultServerPath ? true
+}:
+
+let
+  pname = "rust-analyzer";
+  publisher = "rust-lang";
+
+  # Use the plugin version as in vscode marketplace, updated by update script.
+  inherit (vsix) version;
+
+  releaseTag = "2023-03-06";
+
+  src = fetchFromGitHub {
+    owner = "rust-lang";
+    repo = "rust-analyzer";
+    rev = releaseTag;
+    sha256 = "sha256-Njlus+vY3N++qWE0JXrGjwcXY2QDFuOV/7NruBBMETY=";
+  };
+
+  build-deps = nodePackages."rust-analyzer-build-deps-../../applications/editors/vscode/extensions/rust-lang.rust-analyzer/build-deps";
+  # FIXME: Making a new derivation to link `node_modules` and run `npm run package`
+  # will cause a build failure.
+  vsix = build-deps.override {
+    src = "${src}/editors/code";
+    outputs = [ "vsix" "out" ];
+
+    inherit releaseTag;
+
+    nativeBuildInputs = [
+      jq moreutils esbuild
+      # Required by `keytar`, which is a dependency of `vsce`.
+      pkg-config libsecret
+    ] ++ lib.optionals stdenv.isDarwin [
+      darwin.apple_sdk.frameworks.AppKit
+      darwin.apple_sdk.frameworks.Security
+    ];
+
+    # Follows https://github.com/rust-lang/rust-analyzer/blob/41949748a6123fd6061eb984a47f4fe780525e63/xtask/src/dist.rs#L39-L65
+    postRebuild = ''
+      jq '
+        .version = $ENV.version |
+        .releaseTag = $ENV.releaseTag |
+        .enableProposedApi = false |
+        walk(del(.["$generated-start"]?) | del(.["$generated-end"]?))
+      ' package.json | sponge package.json
+
+      mkdir -p $vsix
+      # vsce ask for continue due to missing LICENSE.md
+      # Should be removed after https://github.com/rust-lang/rust-analyzer/commit/acd5c1f19bf7246107aaae7b6fe3f676a516c6d2
+      echo y | npx vsce package -o $vsix/${pname}.zip
+    '';
+  };
+
+in
+vscode-utils.buildVscodeExtension {
+  inherit version vsix;
+  name = "${pname}-${version}";
+  src = "${vsix}/${pname}.zip";
+  vscodeExtUniqueId = "${publisher}.${pname}";
+  vscodeExtPublisher = publisher;
+  vscodeExtName = pname;
+
+  nativeBuildInputs = lib.optionals setDefaultServerPath [ jq moreutils ];
+
+  preInstall = lib.optionalString setDefaultServerPath ''
+    jq '.contributes.configuration.properties."rust-analyzer.server.path".default = $s' \
+      --arg s "${rust-analyzer}/bin/rust-analyzer" \
+      package.json | sponge package.json
+  '';
+
+  meta = {
+    description = "An alternative rust language server to the RLS";
+    homepage = "https://github.com/rust-lang/rust-analyzer";
+    license = [ lib.licenses.mit lib.licenses.asl20 ];
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/update.sh b/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/update.sh
new file mode 100755
index 000000000000..fbf62c3b9db4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/rust-lang.rust-analyzer/update.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq libarchive
+#shellcheck shell=bash
+set -euo pipefail
+cd "$(dirname "$0")"
+nixpkgs=../../../../../../
+node_packages="$nixpkgs/pkgs/development/node-packages"
+owner=rust-lang
+repo=rust-analyzer
+ver=$(
+    curl -s "https://api.github.com/repos/$owner/$repo/releases" |
+    jq 'map(select(.prerelease | not)) | .[0].tag_name' --raw-output
+)
+node_src="$(nix-build "$nixpkgs" -A rust-analyzer.src --no-out-link)/editors/code"
+
+# Check vscode compatibility
+req_vscode_ver="$(jq '.engines.vscode' "$node_src/package.json" --raw-output)"
+req_vscode_ver="${req_vscode_ver#^}"
+cur_vscode_ver="$(nix-instantiate --eval --strict "$nixpkgs" -A vscode.version | tr -d '"')"
+if [[ "$(nix-instantiate --eval --strict -E "(builtins.compareVersions \"$req_vscode_ver\" \"$cur_vscode_ver\")")" -gt 0 ]]; then
+    echo "vscode $cur_vscode_ver is incompatible with the extension requiring ^$req_vscode_ver"
+    exit 1
+fi
+
+extension_ver=$(curl "https://github.com/$owner/$repo/releases/download/$ver/rust-analyzer-linux-x64.vsix" -L |
+    bsdtar -xf - --to-stdout extension/package.json | # Use bsdtar to extract vsix(zip).
+    jq --raw-output '.version')
+echo "Extension version: $extension_ver"
+
+# We need devDependencies to build vsix.
+# `esbuild` is a binary package an is already in nixpkgs so we omit it here.
+jq '{ name, version: $ver, dependencies: (.dependencies + .devDependencies | del(.esbuild)) }' "$node_src/package.json" \
+    --arg ver "$extension_ver" \
+    >"build-deps/package.json.new"
+
+old_deps="$(jq '.dependencies' build-deps/package.json)"
+new_deps="$(jq '.dependencies' build-deps/package.json.new)"
+if [[ "$old_deps" == "$new_deps" ]]; then
+    echo "package.json dependencies not changed, do simple version change"
+
+    sed -E '/^  "rust-analyzer-build-deps/,+3 s/version = ".*"/version = "'"$extension_ver"'"/' \
+        --in-place "$node_packages"/node-packages.nix
+    mv build-deps/package.json{.new,}
+else
+    echo "package.json dependencies changed, updating nodePackages"
+    mv build-deps/package.json{.new,}
+
+    ./"$node_packages"/generate.sh
+fi
+
+echo "Remember to also update the releaseTag and hash in default.nix!"
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/sumneko.lua/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/sumneko.lua/default.nix
new file mode 100644
index 000000000000..fe6e79be40dd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/sumneko.lua/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, vscode-utils
+, lua-language-server
+}:
+
+vscode-utils.buildVscodeMarketplaceExtension {
+  mktplcRef = {
+    name = "lua";
+    publisher = "sumneko";
+    version = "3.6.19";
+    sha256 = "sha256-7f8zovJS1lNwrUryxgadrBbNRw/OwFqry57JWKY1D8E=";
+  };
+
+  # Running chmod in runtime will lock up extension
+  # indefinitely if the binary is in nix store.
+  patches = [ ./remove-chmod.patch ];
+
+  postInstall = ''
+    ln -sf ${lua-language-server}/bin/lua-language-server \
+      $out/$installPrefix/server/bin/lua-language-server
+  '';
+
+  meta = {
+    description = "The Lua language server provides various language features for Lua to make development easier and faster.";
+    homepage = "https://marketplace.visualstudio.com/items?itemName=sumneko.lua";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.lblasc ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/sumneko.lua/remove-chmod.patch b/nixpkgs/pkgs/applications/editors/vscode/extensions/sumneko.lua/remove-chmod.patch
new file mode 100644
index 000000000000..8fd44e9476b4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/sumneko.lua/remove-chmod.patch
@@ -0,0 +1,14 @@
+--- a/client/out/languageserver.js
++++ b/client/out/languageserver.js
+@@ -145,11 +145,9 @@
+                     break;
+                 case "linux":
+                     command = this.context.asAbsolutePath(path.join('server', binDir ? binDir : 'bin-Linux', 'lua-language-server'));
+-                    yield fs.promises.chmod(command, '777');
+                     break;
+                 case "darwin":
+                     command = this.context.asAbsolutePath(path.join('server', binDir ? binDir : 'bin-macOS', 'lua-language-server'));
+-                    yield fs.promises.chmod(command, '777');
+                     break;
+                 default:
+                     throw new Error(`Unsupported operating system "${platform}"!`);
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/updateSettings.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/updateSettings.nix
new file mode 100644
index 000000000000..443b40930279
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/updateSettings.nix
@@ -0,0 +1,39 @@
+# Updates the vscode setting file base on a nix expression
+# should run from the workspace root.
+{ writeShellScriptBin
+, lib
+, jq
+}:
+##User Input
+{ settings      ? {}
+# if marked as true will create an empty json file if does not exist
+, createIfDoesNotExists ? true
+, vscodeSettingsFile ? ".vscode/settings.json"
+, userSettingsFolder ? ""
+, symlinkFromUserSetting ? false
+}:
+let
+
+  updateVSCodeSettingsCmd = ''
+  (
+    echo 'updateSettings.nix: Updating ${vscodeSettingsFile}...'
+    oldSettings=$(cat ${vscodeSettingsFile})
+    echo $oldSettings' ${builtins.toJSON settings}' | ${jq}/bin/jq -s add > ${vscodeSettingsFile}
+  )'';
+
+  createEmptySettingsCmd = ''mkdir -p .vscode && echo "{}" > ${vscodeSettingsFile}'';
+  fileName = builtins.baseNameOf vscodeSettingsFile;
+  symlinkFromUserSettingCmd = lib.optionalString symlinkFromUserSetting
+    '' && mkdir -p "${userSettingsFolder}" && ln -sfv "$(pwd)/${vscodeSettingsFile}" "${userSettingsFolder}/" '';
+in
+
+  writeShellScriptBin ''vscodeNixUpdate-${lib.removeSuffix ".json" (fileName)}''
+  (lib.optionalString (settings != {})
+    (if createIfDoesNotExists then ''
+      [ ! -f "${vscodeSettingsFile}" ] && ${createEmptySettingsCmd}
+      ${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
+    ''
+    else ''[ -f "${vscodeSettingsFile}" ] && ${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
+    ''
+    )
+  )
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/updateSettingsTest.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/updateSettingsTest.nix
new file mode 100644
index 000000000000..097b9cad1661
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/updateSettingsTest.nix
@@ -0,0 +1,6 @@
+with import <nixpkgs>{};
+callPackage (import ./updateSettings.nix) {} {
+  settings = {
+    a = "fdsdf";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/update_installed_exts.sh b/nixpkgs/pkgs/applications/editors/vscode/extensions/update_installed_exts.sh
new file mode 100755
index 000000000000..6fff7454493a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/update_installed_exts.sh
@@ -0,0 +1,90 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p curl jq unzip
+# shellcheck shell=bash
+set -eu -o pipefail
+
+# can be added to your configuration with the following command and snippet:
+# $ ./pkgs/applications/editors/vscode/extensions/update_installed_exts.sh > extensions.nix
+#
+# packages = with pkgs;
+#   (vscode-with-extensions.override {
+#     vscodeExtensions = map
+#       (extension: vscode-utils.buildVscodeMarketplaceExtension {
+#         mktplcRef = {
+#          inherit (extension) name publisher version sha256;
+#         };
+#       })
+#       (import ./extensions.nix).extensions;
+#   })
+# ]
+
+# Helper to just fail with a message and non-zero exit code.
+function fail() {
+    echo "$1" >&2
+    exit 1
+}
+
+# Helper to clean up after ourselves if we're killed by SIGINT.
+function clean_up() {
+    TDIR="${TMPDIR:-/tmp}"
+    echo "Script killed, cleaning up tmpdirs: $TDIR/vscode_exts_*" >&2
+    rm -Rf "$TDIR/vscode_exts_*"
+}
+
+function get_vsixpkg() {
+    N="$1.$2"
+
+    # Create a tempdir for the extension download.
+    EXTTMP=$(mktemp -d -t vscode_exts_XXXXXXXX)
+
+    URL="https://$1.gallery.vsassets.io/_apis/public/gallery/publisher/$1/extension/$2/latest/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage"
+
+    # Quietly but delicately curl down the file, blowing up at the first sign of trouble.
+    curl --silent --show-error --retry 3 --fail -X GET -o "$EXTTMP/$N.zip" "$URL"
+    # Unpack the file we need to stdout then pull out the version
+    VER=$(jq -r '.version' <(unzip -qc "$EXTTMP/$N.zip" "extension/package.json"))
+    # Calculate the SHA
+    SHA=$(nix-hash --flat --base32 --type sha256 "$EXTTMP/$N.zip")
+
+    # Clean up.
+    rm -Rf "$EXTTMP"
+    # I don't like 'rm -Rf' lurking in my scripts but this seems appropriate.
+
+    cat <<-EOF
+  {
+    name = "$2";
+    publisher = "$1";
+    version = "$VER";
+    sha256 = "$SHA";
+  }
+EOF
+}
+
+# See if we can find our `code` binary somewhere.
+if [ $# -ne 0 ]; then
+    CODE=$1
+else
+    CODE=$(command -v code || command -v codium)
+fi
+
+if [ -z "$CODE" ]; then
+    # Not much point continuing.
+    fail "VSCode executable not found"
+fi
+
+# Try to be a good citizen and clean up after ourselves if we're killed.
+trap clean_up SIGINT
+
+# Begin the printing of the nix expression that will house the list of extensions.
+printf '{ extensions = [\n'
+
+# Note that we are only looking to update extensions that are already installed.
+for i in $($CODE --list-extensions)
+do
+    OWNER=$(echo "$i" | cut -d. -f1)
+    EXT=$(echo "$i" | cut -d. -f2)
+
+    get_vsixpkg "$OWNER" "$EXT"
+done
+# Close off the nix expression.
+printf '];\n}'
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/cmake-build-extension-only.patch b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/cmake-build-extension-only.patch
new file mode 100644
index 000000000000..dab75e463e58
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/cmake-build-extension-only.patch
@@ -0,0 +1,52 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6ae4dfb..519f544 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -16,13 +16,6 @@ endif()
+ set(VERSION "${VERSION}${VERSION_SUFFIX}")
+ message("Version ${VERSION}")
+ 
+-set(LLDB_PACKAGE $ENV{LLDB_PACKAGE} CACHE PATH "Zip archive containing LLDB files")
+-if (LLDB_PACKAGE)
+-    message("Using LLDB_PACKAGE=${LLDB_PACKAGE}")
+-else()
+-    message(FATAL_ERROR "LLDB_PACKAGE not set." )
+-endif()
+-
+ if (CMAKE_SYSROOT)
+     set(CMAKE_C_FLAGS "--sysroot=${CMAKE_SYSROOT} ${CMAKE_C_FLAGS}")
+     set(CMAKE_CXX_FLAGS "--sysroot=${CMAKE_SYSROOT} ${CMAKE_CXX_FLAGS}")
+@@ -93,16 +86,6 @@ configure_file(package.json ${CMAKE_CURRENT_BINARY_DIR}/package.json @ONLY)
+ configure_file(webpack.config.js ${CMAKE_CURRENT_BINARY_DIR}/webpack.config.js @ONLY)
+ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/package-lock.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+ 
+-# Run 'npm install'
+-execute_process(
+-    COMMAND ${NPM} ci # like install, but actually respects package-lock file.
+-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+-    RESULT_VARIABLE Result
+-)
+-if (NOT ${Result} EQUAL 0)
+-    message(FATAL_ERROR "npm intall failed: ${Result}")
+-endif()
+-
+ # Copy it back, so we can commit the lock file.
+ file(COPY ${CMAKE_CURRENT_BINARY_DIR}/package-lock.json DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
+ 
+@@ -154,6 +137,7 @@ add_custom_target(tests
+ 
+ add_copy_file(PackageFiles ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_BINARY_DIR}/README.md)
+ add_copy_file(PackageFiles ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md ${CMAKE_CURRENT_BINARY_DIR}/CHANGELOG.md)
++add_copy_file(PackageFiles ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE ${CMAKE_CURRENT_BINARY_DIR}/LICENSE)
+ add_copy_file(PackageFiles ${CMAKE_CURRENT_SOURCE_DIR}/images/lldb.png ${CMAKE_CURRENT_BINARY_DIR}/images/lldb.png)
+ add_copy_file(PackageFiles ${CMAKE_CURRENT_SOURCE_DIR}/images/user.svg ${CMAKE_CURRENT_BINARY_DIR}/images/user.svg)
+ add_copy_file(PackageFiles ${CMAKE_CURRENT_SOURCE_DIR}/images/users.svg ${CMAKE_CURRENT_BINARY_DIR}/images/users.svg)
+@@ -170,6 +154,7 @@ add_custom_target(dev_debugging
+ set(PackagedFilesBootstrap
+     README.md
+     CHANGELOG.md
++    LICENSE
+     extension.js
+     images/*
+     syntaxes/*
+
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix
new file mode 100644
index 000000000000..4da501960459
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix
@@ -0,0 +1,143 @@
+{ pkgs, lib, stdenv, fetchFromGitHub, runCommand, rustPlatform, makeWrapper, llvmPackages
+, buildNpmPackage, cmake, nodejs, unzip, python3, pkg-config, libsecret, darwin
+}:
+assert lib.versionAtLeast python3.version "3.5";
+let
+  publisher = "vadimcn";
+  pname = "vscode-lldb";
+  version = "1.9.1";
+
+  vscodeExtUniqueId = "${publisher}.${pname}";
+  vscodeExtPublisher = publisher;
+  vscodeExtName = pname;
+
+  src = fetchFromGitHub {
+    owner = "vadimcn";
+    repo = "vscode-lldb";
+    rev = "v${version}";
+    sha256 = "sha256-DqxdZtSW8TZaOFGXOZQ7a4tmgRj6iAWDppCNomdfVxY=";
+  };
+
+  # need to build a custom version of lldb and llvm for enhanced rust support
+  lldb = (import ./lldb.nix { inherit fetchFromGitHub runCommand llvmPackages; });
+
+  adapter = rustPlatform.buildRustPackage {
+    pname = "${pname}-adapter";
+    inherit version src;
+
+    cargoSha256 = "sha256-+hfNkr9cZbOcWdWKUWUqDj9a0PKjKeApFXYZzS1XokE=";
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    buildAndTestSubdir = "adapter";
+
+    buildFeatures = [ "weak-linkage" ];
+
+    cargoBuildFlags = [
+      "--lib"
+      "--bin=codelldb"
+    ];
+
+    # Tests are linked to liblldb but it is not available here.
+    doCheck = false;
+  };
+
+  nodeDeps = buildNpmPackage {
+    pname = "${pname}-node-deps";
+    inherit version src;
+
+    npmDepsHash = "sha256-Cdlq1jxHSCfPjXhasClc6XzEUp3vlLgkStbhYtCyc7E=";
+
+    nativeBuildInputs = [
+      python3
+      pkg-config
+    ];
+
+    buildInputs = [
+      libsecret
+    ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+      Security
+      AppKit
+    ]);
+
+    dontNpmBuild = true;
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/lib
+      cp -r node_modules $out/lib
+
+      runHook postInstall
+    '';
+  };
+
+in stdenv.mkDerivation {
+  pname = "vscode-extension-${publisher}-${pname}";
+  inherit src version vscodeExtUniqueId vscodeExtPublisher vscodeExtName;
+
+  installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}";
+
+  nativeBuildInputs = [ cmake nodejs unzip makeWrapper ];
+
+  patches = [ ./cmake-build-extension-only.patch ];
+
+  postPatch = ''
+    # temporary patch for forgotten version updates
+    substituteInPlace CMakeLists.txt \
+      --replace "1.9.0" ${version}
+  '';
+
+  postConfigure = ''
+    cp -r ${nodeDeps}/lib/node_modules .
+  '';
+
+  cmakeFlags = [
+    # Do not append timestamp to version.
+    "-DVERSION_SUFFIX="
+  ];
+  makeFlags = [ "vsix_bootstrap" ];
+
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    export HOME=$TMPDIR
+  '';
+
+  installPhase = ''
+    ext=$out/$installPrefix
+    runHook preInstall
+
+    unzip ./codelldb-bootstrap.vsix 'extension/*' -d ./vsix-extracted
+
+    mkdir -p $ext/{adapter,formatters}
+    mv -t $ext vsix-extracted/extension/*
+    cp -t $ext/adapter ${adapter}/{bin,lib}/* ../adapter/*.py
+    wrapProgram $ext/adapter/codelldb \
+      --set-default LLDB_DEBUGSERVER_PATH "${lldb.out}/bin/lldb-server"
+    cp -t $ext/formatters ../formatters/*.py
+    ln -s ${lldb.lib} $ext/lldb
+    # Mark that all components are installed.
+    touch $ext/platform.ok
+
+    runHook postInstall
+  '';
+
+  # `adapter` will find python binary and libraries at runtime.
+  postFixup = ''
+    wrapProgram $out/$installPrefix/adapter/codelldb \
+      --prefix PATH : "${python3}/bin" \
+      --prefix LD_LIBRARY_PATH : "${python3}/lib"
+  '';
+
+  passthru = {
+    inherit lldb adapter;
+    updateScript = ./update.sh;
+  };
+
+  meta = {
+    description = "A native debugger extension for VSCode based on LLDB";
+    homepage = "https://github.com/vadimcn/vscode-lldb";
+    license = [ lib.licenses.mit ];
+    maintainers = [ lib.maintainers.nigelgbanks ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/fix-python-installation.patch b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/fix-python-installation.patch
new file mode 100644
index 000000000000..e4ca6bb6299e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/fix-python-installation.patch
@@ -0,0 +1,13 @@
+diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt
+index 82a52da89a7e..5127dc1d8f41 100644
+--- a/bindings/python/CMakeLists.txt
++++ b/bindings/python/CMakeLists.txt
+@@ -160,7 +160,7 @@ function(finish_swig_python swig_target lldb_python_bindings_dir lldb_python_tar
+   if(LLDB_BUILD_FRAMEWORK)
+     set(LLDB_PYTHON_INSTALL_PATH ${LLDB_FRAMEWORK_INSTALL_DIR}/LLDB.framework/Versions/${LLDB_FRAMEWORK_VERSION}/Resources/Python)
+   else()
+-    set(LLDB_PYTHON_INSTALL_PATH ${LLDB_PYTHON_RELATIVE_PATH})
++    set(LLDB_PYTHON_INSTALL_PATH ${CMAKE_INSTALL_LIBDIR}/../${LLDB_PYTHON_RELATIVE_PATH})
+   endif()
+   if (NOT CMAKE_CFG_INTDIR STREQUAL  ".")
+     string(REPLACE ${CMAKE_CFG_INTDIR} "\$\{CMAKE_INSTALL_CONFIG_NAME\}" LLDB_PYTHON_INSTALL_PATH ${LLDB_PYTHON_INSTALL_PATH})
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/lldb.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/lldb.nix
new file mode 100644
index 000000000000..a01e538f93e6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/lldb.nix
@@ -0,0 +1,35 @@
+# Patched lldb for Rust language support.
+{ fetchFromGitHub, runCommand, llvmPackages }:
+let
+  llvmSrc = fetchFromGitHub {
+    owner = "vadimcn";
+    repo = "llvm-project";
+    # codelldb/14.x branch
+    rev = "4c267c83cbb55fedf2e0b89644dc1db320fdfde7";
+    sha256 = "sha256-jM//ej6AxnRYj+8BAn4QrxHPT6HiDzK5RqHPSg3dCcw=";
+  };
+in (llvmPackages.lldb.overrideAttrs (oldAttrs: rec {
+  passthru = (oldAttrs.passthru or {}) // {
+    inherit llvmSrc;
+  };
+
+  patches = oldAttrs.patches ++ [
+    # backport of https://github.com/NixOS/nixpkgs/commit/0d3002334850a819d1a5c8283c39f114af907cd4
+    # remove when https://github.com/NixOS/nixpkgs/issues/166604 fixed
+    ./fix-python-installation.patch
+  ];
+
+  doInstallCheck = true;
+
+  # installCheck for lldb_14 currently broken
+  # https://github.com/NixOS/nixpkgs/issues/166604#issuecomment-1086103692
+  # ignore the oldAttrs installCheck
+  installCheckPhase = ''
+    versionOutput="$($out/bin/lldb --version)"
+    echo "'lldb --version' returns: $versionOutput"
+    echo "$versionOutput" | grep -q 'rust-enabled'
+  '';
+})).override({
+  monorepoSrc = llvmSrc;
+  libllvm = llvmPackages.libllvm.override({ monorepoSrc = llvmSrc; });
+})
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/update.sh b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/update.sh
new file mode 100755
index 000000000000..d635a6f778df
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/update.sh
@@ -0,0 +1,48 @@
+#! /usr/bin/env nix-shell
+#! nix-shell ../../update-shell.nix -i bash -p wget prefetch-npm-deps
+
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+echo "
+FIXME: This script doesn't update patched lldb. Please manually check branches
+of https://github.com/vadimcn/llvm-project and update lldb with correct version of LLVM.
+"
+
+# Ideally, nixpkgs points to default.nix file of Nixpkgs official tree
+nixpkgs=../../../../../..
+nixFile=./default.nix
+owner=vadimcn
+repo=vscode-lldb
+version="$1"
+if [[ $# -ne 1 ]]; then
+    # no version specified, find the newest one
+    version=$(
+        curl -s "https://api.github.com/repos/$owner/$repo/releases" |
+        jq 'map(select(.prerelease | not)) | .[0].tag_name' --raw-output |
+        sed 's/[\"v]//'
+    )
+fi
+old_version=$(sed -nE 's/.*\bversion = "(.*)".*/\1/p' ./default.nix)
+if grep -q 'cargoSha256 = ""' ./default.nix; then
+    old_version='broken'
+fi
+if [[ "$version" == "$old_version" ]]; then
+    echo "Up to date: $version"
+    exit
+fi
+echo "$old_version -> $version"
+
+# update hashes
+sed -E 's/\bversion = ".*?"/version = "'$version'"/' --in-place "$nixFile"
+srcHash=$(nix-prefetch fetchFromGitHub --owner vadimcn --repo vscode-lldb --rev "v$version")
+sed -E 's#\bsha256 = ".*?"#sha256 = "'$srcHash'"#' --in-place "$nixFile"
+cargoHash=$(nix-prefetch "{ sha256 }: (import $nixpkgs {}).vscode-extensions.vadimcn.vscode-lldb.adapter.cargoDeps.overrideAttrs (_: { outputHash = sha256; })")
+sed -E 's#\bcargoSha256 = ".*?"#cargoSha256 = "'$cargoHash'"#' --in-place "$nixFile"
+
+pushd $TMPDIR
+wget https://raw.githubusercontent.com/$owner/$repo/v${version}/package-lock.json
+npmDepsHash=$(prefetch-npm-deps ./package-lock.json)
+popd
+sed -E 's#\bnpmDepsHash = ".*?"#npmDepsHash = "'$npmDepsHash'"#' --in-place "$nixFile"
+
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vscode-utils.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscode-utils.nix
new file mode 100644
index 000000000000..0eba230ad8e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscode-utils.nix
@@ -0,0 +1,140 @@
+{ stdenv, lib, buildEnv, writeShellScriptBin, fetchurl, vscode, unzip, jq }:
+let
+  buildVscodeExtension = a@{
+    name,
+    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
+      runHook postConfigure
+    '',
+    buildPhase ?''
+      runHook preBuild
+      runHook postBuild
+    '',
+    dontPatchELF ? true,
+    dontStrip ? true,
+    nativeBuildInputs ? [],
+    passthru ? { },
+    ...
+  }:
+  stdenv.mkDerivation ((removeAttrs a [ "vscodeExtUniqueId" ]) // {
+
+    name = "vscode-extension-${name}";
+
+    passthru = passthru // {
+      inherit vscodeExtPublisher vscodeExtName vscodeExtUniqueId;
+    };
+
+    inherit configurePhase buildPhase dontPatchELF dontStrip;
+
+    installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}";
+
+    nativeBuildInputs = [ unzip ] ++ nativeBuildInputs;
+
+    installPhase = ''
+
+      runHook preInstall
+
+      mkdir -p "$out/$installPrefix"
+      find . -mindepth 1 -maxdepth 1 | xargs -d'\n' mv -t "$out/$installPrefix/"
+
+      runHook postInstall
+    '';
+
+  });
+
+  fetchVsixFromVscodeMarketplace = mktplcExtRef:
+    fetchurl (import ./mktplcExtRefToFetchArgs.nix mktplcExtRef);
+
+  buildVscodeMarketplaceExtension = a@{
+    name ? "",
+    src ? null,
+    vsix ? null,
+    mktplcRef,
+    ...
+  }: 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}";
+  });
+
+  mktplcRefAttrList = [
+    "name"
+    "publisher"
+    "version"
+    "sha256"
+    "arch"
+  ];
+
+  mktplcExtRefToExtDrv = ext:
+    buildVscodeMarketplaceExtension (removeAttrs ext mktplcRefAttrList // {
+      mktplcRef = builtins.intersectAttrs (lib.genAttrs mktplcRefAttrList (_: null)) ext;
+    });
+
+  extensionFromVscodeMarketplace = mktplcExtRefToExtDrv;
+  extensionsFromVscodeMarketplace = mktplcExtRefList:
+    builtins.map extensionFromVscodeMarketplace mktplcExtRefList;
+
+  vscodeWithConfiguration = import ./vscodeWithConfiguration.nix {
+    inherit lib extensionsFromVscodeMarketplace writeShellScriptBin;
+    vscodeDefault = vscode;
+  };
+
+  vscodeExts2nix = import ./vscodeExts2nix.nix {
+    inherit lib writeShellScriptBin;
+    vscodeDefault = vscode;
+  };
+
+  vscodeEnv = import ./vscodeEnv.nix {
+    inherit lib buildEnv writeShellScriptBin extensionsFromVscodeMarketplace jq;
+    vscodeDefault = vscode;
+  };
+
+  toExtensionJsonEntry = ext: rec {
+    identifier = {
+      id = ext.vscodeExtUniqueId;
+      uuid = "";
+    };
+
+    version = ext.version;
+
+    location = {
+      "$mid" = 1;
+      fsPath = ext.outPath + "/share/vscode/extensions/${ext.vscodeExtUniqueId}";
+      path = location.fsPath;
+      scheme = "file";
+    };
+
+    metadata = {
+      id = "";
+      publisherId = "";
+      publisherDisplayName = ext.vscodeExtPublisher;
+      targetPlatform = "undefined";
+      isApplicationScoped = false;
+      updated = false;
+      isPreReleaseVersion = false;
+      installedTimestamp = 0;
+      preRelease = false;
+    };
+  };
+
+  toExtensionJson = extensions: builtins.toJSON (map toExtensionJsonEntry extensions);
+in
+{
+  inherit fetchVsixFromVscodeMarketplace buildVscodeExtension
+          buildVscodeMarketplaceExtension extensionFromVscodeMarketplace
+          extensionsFromVscodeMarketplace
+          vscodeWithConfiguration vscodeExts2nix vscodeEnv
+          toExtensionJsonEntry toExtensionJson;
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeEnv.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeEnv.nix
new file mode 100644
index 000000000000..db00ba13e3c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeEnv.nix
@@ -0,0 +1,85 @@
+#Use vscodeWithConfiguration and vscodeExts2nix to create a vscode executable. When the executable exits, it updates the mutable extension file, which is imported when evaluated by Nix later.
+{ lib
+, buildEnv
+, writeShellScriptBin
+, extensionsFromVscodeMarketplace
+, vscodeDefault
+, jq
+}:
+##User input
+{ vscode                           ? vscodeDefault
+, nixExtensions                    ? []
+, vscodeExtsFolderName             ? ".vscode-exts"
+# will add to the command updateSettings (which will run on executing vscode) settings to override in settings.json file
+, settings                         ? {}
+, createSettingsIfDoesNotExists    ? true
+, launch                           ? {}
+, createLaunchIfDoesNotExists      ? true
+# will add to the command updateKeybindings(which will run on executing vscode) keybindings to override in keybinding.json file
+, keybindings                      ? {}
+, createKeybindingsIfDoesNotExists ? true
+, user-data-dir ? ''"''${TMP}''${name}"/vscode-data-dir''
+# if file exists will use it and import the extensions in it into this derivation else will use empty extensions list
+# this file will be created/updated by vscodeExts2nix when vscode exists
+, mutableExtensionsFile
+}:
+let
+  mutableExtensionsFilePath = toString mutableExtensionsFile;
+  mutableExtensions = lib.optionals (builtins.pathExists mutableExtensionsFile) (import mutableExtensionsFilePath);
+  vscodeWithConfiguration = import ./vscodeWithConfiguration.nix {
+    inherit lib writeShellScriptBin extensionsFromVscodeMarketplace;
+    vscodeDefault = vscode;
+  }
+  {
+    inherit nixExtensions mutableExtensions vscodeExtsFolderName user-data-dir;
+  };
+
+  updateSettings = import ./updateSettings.nix { inherit lib writeShellScriptBin jq; };
+  userSettingsFolder = "${ user-data-dir }/User";
+
+  updateSettingsCmd = updateSettings {
+    settings = {
+        "extensions.autoCheckUpdates" = false;
+        "extensions.autoUpdate" = false;
+        "update.mode" = "none";
+    } // settings;
+    inherit userSettingsFolder;
+    createIfDoesNotExists = createSettingsIfDoesNotExists;
+    symlinkFromUserSetting = (user-data-dir != "");
+  };
+
+  updateLaunchCmd = updateSettings {
+    settings = launch;
+    createIfDoesNotExists = createLaunchIfDoesNotExists;
+    vscodeSettingsFile = ".vscode/launch.json";
+  };
+
+  updateKeybindingsCmd = updateSettings {
+    settings = keybindings;
+    createIfDoesNotExists = createKeybindingsIfDoesNotExists;
+    vscodeSettingsFile = ".vscode/keybindings.json";
+    inherit userSettingsFolder;
+    symlinkFromUserSetting = (user-data-dir != "");
+  };
+
+  vscodeExts2nix = import ./vscodeExts2nix.nix {
+    inherit lib writeShellScriptBin;
+    vscodeDefault = vscodeWithConfiguration;
+  }
+  {
+    extensionsToIgnore = nixExtensions;
+    extensions = mutableExtensions;
+  };
+  code = writeShellScriptBin "code" ''
+    ${updateSettingsCmd}/bin/vscodeNixUpdate-settings
+    ${updateLaunchCmd}/bin/vscodeNixUpdate-launch
+    ${updateKeybindingsCmd}/bin/vscodeNixUpdate-keybindings
+    ${vscodeWithConfiguration}/bin/code --wait "$@"
+    echo 'running vscodeExts2nix to update ${mutableExtensionsFilePath}...'
+    ${vscodeExts2nix}/bin/vscodeExts2nix > ${mutableExtensionsFilePath}
+  '';
+in
+buildEnv {
+  name = "vscodeEnv";
+  paths = [ code vscodeExts2nix updateSettingsCmd updateLaunchCmd updateKeybindingsCmd ];
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeEnvTest.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeEnvTest.nix
new file mode 100644
index 000000000000..19a9edbf1afe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeEnvTest.nix
@@ -0,0 +1,11 @@
+with import <nixpkgs>{};
+callPackage (import ./vscodeEnv.nix) {
+  extensionsFromVscodeMarketplace = vscode-utils.extensionsFromVscodeMarketplace;
+  vscodeDefault = vscode;
+} {
+  mutableExtensionsFile = ./extensions.nix;
+  settings = {
+    a = "fdsdf";
+    t = "test";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeExts2nix.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeExts2nix.nix
new file mode 100644
index 000000000000..58cbe663c901
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeExts2nix.nix
@@ -0,0 +1,44 @@
+# based on the passed vscode will stdout a nix expression with the installed vscode extensions
+{ lib
+, vscodeDefault
+, writeShellScriptBin
+}:
+
+##User input
+{ vscode             ? vscodeDefault
+, extensionsToIgnore ? []
+# will use those extensions to get sha256 if still exists when executed.
+, extensions         ? []
+}:
+let
+  mktplcExtRefToFetchArgs = import ./mktplcExtRefToFetchArgs.nix;
+in
+writeShellScriptBin "vscodeExts2nix" ''
+  echo '['
+
+  for line in $(${vscode}/bin/code --list-extensions --show-versions \
+    ${lib.optionalString (extensionsToIgnore != []) ''
+      | grep -v -i '^\(${lib.concatMapStringsSep "\\|" (e : "${e.publisher}.${e.name}") extensionsToIgnore}\)'
+    ''}
+  ) ; do
+    [[ $line =~ ([^.]*)\.([^@]*)@(.*) ]]
+    name=''${BASH_REMATCH[2]}
+    publisher=''${BASH_REMATCH[1]}
+    version=''${BASH_REMATCH[3]}
+
+    extensions="${lib.concatMapStringsSep "." (e : "${e.publisher}${e.name}@${e.sha256}") extensions}"
+    reCurrentExt=$publisher$name"@([^.]*)"
+    if [[ $extensions =~ $reCurrentExt ]]; then
+      sha256=''${BASH_REMATCH[1]}
+    else
+      sha256=$(
+        nix-prefetch-url "${(mktplcExtRefToFetchArgs {publisher = ''"$publisher"''; name = ''"$name"''; version = ''"$version"'';}).url}" 2> /dev/null
+      )
+    fi
+
+    echo "{ name = \"''${name}\"; publisher = \"''${publisher}\"; version = \"''${version}\"; sha256 = \"''${sha256}\";  }"
+  done
+
+
+  echo ']'
+''
diff --git a/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix
new file mode 100644
index 000000000000..39479d7c2f2c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/editors/vscode/extensions/vscodeWithConfiguration.nix
@@ -0,0 +1,54 @@
+# wrapper over vscode to control extensions per project (extensions folder will be created in execution path)
+{ lib
+, writeShellScriptBin
+, extensionsFromVscodeMarketplace
+, vscodeDefault
+}:
+## User input
+{ vscode ? vscodeDefault
+# extensions to be symlinked into the project's extensions folder
+, nixExtensions        ? []
+# extensions to be copied into the project's extensions folder
+, mutableExtensions    ? []
+, vscodeExtsFolderName ? ".vscode-exts"
+, user-data-dir ? ''"''${TMP}vscodeWithConfiguration/vscode-data-dir"''
+}:
+let
+  nixExtsDrvs = extensionsFromVscodeMarketplace nixExtensions;
+  mutExtsDrvs = extensionsFromVscodeMarketplace mutableExtensions;
+  mutableExtsPaths = lib.forEach mutExtsDrvs ( e:
+  {
+    origin = "${e}/share/vscode/extensions/${e.vscodeExtUniqueId}";
+    target = ''${vscodeExtsFolderName}/${e.vscodeExtUniqueId}-${(lib.findSingle (ext: "${ext.publisher}.${ext.name}" == e.vscodeExtUniqueId) "" "m" mutableExtensions ).version}'';
+  }
+  );
+
+  #removed not defined extensions
+  rmExtensions =  lib.optionalString (nixExtensions++mutableExtensions != []) ''
+    find ${vscodeExtsFolderName} -mindepth 1 -maxdepth 1 ${
+        lib.concatMapStringsSep " " (e : "! -iname ${e.publisher}.${e.name} ") nixExtensions
+        +
+        lib.concatMapStringsSep " " (e : "! -iname ${e.publisher}.${e.name}-${e.version} ") mutableExtensions
+      } -exec rm -rf {} \;
+  '';
+  #copy mutable extension out of the nix store
+  cpExtensions = ''
+    ${lib.concatMapStringsSep "\n" (e : "ln -sfn ${e}/share/vscode/extensions/* ${vscodeExtsFolderName}/") nixExtsDrvs}
+    ${lib.concatMapStringsSep "\n" (ePath : ''
+      if [ ! -d ${ePath.target} ]; then
+        cp -a ${ePath.origin} ${ePath.target}
+        chmod -R u+rwx ${ePath.target}
+      fi
+      '') mutableExtsPaths}
+  '';
+in
+  writeShellScriptBin "code" ''
+    if ! [[ "$@" =~ "--list-extension" ]]; then
+      mkdir -p "${vscodeExtsFolderName}"
+      ${rmExtensions}
+      ${cpExtensions}
+    fi
+    ${vscode}/bin/code --extensions-dir "${vscodeExtsFolderName}" ${
+      lib.optionalString (user-data-dir != "") "--user-data-dir ${user-data-dir}"
+      } "$@"
+  ''