{ pkgs, unstablePkgs, lib, ... }: let settings = import ./../../configs/vscode/settings.nix { inherit pkgs lib; }; keybindings = import ./../../configs/vscode/keybindings.nix { }; extensions = with unstablePkgs.vscode-extensions; [ # Microsoft vendor extensions ms-vscode.hexeditor ms-vscode-remote.remote-containers ms-vscode-remote.remote-ssh ms-azuretools.vscode-docker github.codespaces # Usability vscodevim.vim waderyan.gitblame mkhl.direnv alefragnani.bookmarks # Language support ms-vscode.makefile-tools ms-vscode.cpptools-extension-pack mesonbuild.mesonbuild ms-python.python ms-python.debugpy charliermarsh.ruff golang.go jnoortheen.nix-ide rust-lang.rust-analyzer haskell.haskell justusadam.language-haskell elixir-lsp.vscode-elixir-ls # Pretty :3 aaron-bond.better-comments catppuccin.catppuccin-vsc-icons catppuccin.catppuccin-vsc jdinhlife.gruvbox ]; externalExtensions = with pkgs.open-vsx; [ # Small extensions that aren't included in nixpkgs geequlim.godot-tools miguelsolorio.fluent-icons tonybaloney.vscode-pets ]; newVendorExtensions = with pkgs.vscode-marketplace; [ # Quick editing and viewing of ad-hoc repos and pull request ms-vscode.remote-repositories github.remotehub ]; in { programs.vscode = { enable = true; enableUpdateCheck = false; enableExtensionUpdateCheck = false; mutableExtensionsDir = false; package = unstablePkgs.vscodium; extensions = extensions ++ externalExtensions ++ newVendorExtensions; keybindings = keybindings; userSettings = settings; }; }