{
  inputs = {
    nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
    flake-utils.follows = "nix-vscode-extensions/flake-utils";
    nixpkgs.url = "nixpkgs/nixos-unstable";
  };

  outputs = { self, flake-utils, nixpkgs, nix-vscode-extensions }:
    flake-utils.lib.eachDefaultSystem
      (system:
        let
          pkgs = import nixpkgs { inherit system; config = { allowUnfree = true; }; };
          extensions = nix-vscode-extensions.extensions.${system};
          inherit (pkgs) vscode-with-extensions vscode;

          packages.default =
            vscode-with-extensions.override {
              vscodeExtensions = [
                pkgs.vscode-extensions.ms-vsliveshare.vsliveshare
                pkgs.vscode-extensions.github.copilot
                # pkgs.vscode-extensions.github.copilot-chat
                pkgs.vscode-extensions.ms-vscode-remote.remote-ssh
                pkgs.vscode-extensions.eugleo.magic-racket
                pkgs.vscode-extensions.llvm-vs-code-extensions.vscode-clangd
                pkgs.vscode-extensions.mkhl.direnv
                # pkgs.vscode-extensions.ms-python.python

                extensions.vscode-marketplace.arcticicestudio.nord-visual-studio-code
                extensions.vscode-marketplace.bbenoist.nix
                extensions.vscode-marketplace.davidanson.vscode-markdownlint
                extensions.vscode-marketplace.dbaeumer.vscode-eslint
                extensions.vscode-marketplace.james-yu.latex-workshop
                extensions.vscode-marketplace.jnoortheen.nix-ide
                extensions.vscode-marketplace.mhutchie.git-graph
                extensions.vscode-marketplace.ms-azuretools.vscode-docker
                extensions.vscode-marketplace.ms-python.vscode-pylance
                (extensions.forVSCodeVersion "1.93.1").vscode-marketplace.ms-python.python
                extensions.vscode-marketplace.ms-python.black-formatter
                # extensions.vscode-marketplace.ms-python.python
                (extensions.forVSCodeVersion "1.93.1").vscode-marketplace.ms-toolsai.jupyter
                # extensions.vscode-marketplace.ms-vscode.cpptools
                extensions.vscode-marketplace.github.github-vscode-theme
                extensions.vscode-marketplace.dart-code.flutter
                extensions.vscode-marketplace.dart-code.dart-code
                extensions.vscode-marketplace.davidlday.languagetool-linter
                extensions.vscode-marketplace.eamodio.gitlens
                extensions.vscode-marketplace.ms-vscode-remote.remote-containers
                extensions.vscode-marketplace.ms-python.pylint
                extensions.vscode-marketplace.ms-python.flake8
                extensions.vscode-marketplace.rust-lang.rust-analyzer
                # extensions.vscode-marketplace.espressif.esp-idf-extension
                extensions.vscode-marketplace.platformio.platformio-ide
                extensions.vscode-marketplace.ms-toolsai.datawrangler
                extensions.vscode-marketplace.github.copilot-chat
                extensions.vscode-marketplace.posit.shiny
                extensions.vscode-marketplace.piousdeer.adwaita-theme
                # extensions.vscode-marketplace.continue.continue
              ];
            };

          devShells.default = pkgs.mkShell {
            buildInputs = [ packages.default ];
            shellHook = ''
              printf "VS Code with extensions:\n"
              code --list-extensions
            '';
          };
        in
        {
          inherit packages devShells;
          channels.nixpkgs.config.allowUnfree = true;
        });
}