{
  lib,
  pkgs,
  config,
  ...
}:
with lib;
let
  cfg = config.eboskma.programs.vscode;
in
{
  options.eboskma.programs.vscode.enable = mkEnableOption "enable vscode";

  config = mkIf cfg.enable {
    programs.vscode = {
      enable = true;
      package = pkgs.vscode;
      extensions = with pkgs.vscode-extensions; [
        arrterian.nix-env-selector
        bbenoist.nix
        # brettm12345.nixfmt-vscode
        # aaronduino.nix-lsp
        # aliariff.auto-add-brackets
        bradlc.vscode-tailwindcss
        # bungcip.better-toml
        coolbear.systemd-unit-file
        # dawhite.mustache
        dbaeumer.vscode-eslint
        denoland.vscode-deno
        # dlasagno.rasi
        # dprint.dprint
        eamodio.gitlens
        editorconfig.editorconfig
        esbenp.prettier-vscode
        # EugenWiens.bitbake
        elixir-lsp.vscode-elixir-ls # this is the one by Jake Becker, not the deprecated one
        # kumar-harsh.graphql-for-vscode
        matklad.rust-analyzer
        # monokai.theme-monokai-pro-vscode
        ms-azuretools.vscode-docker
        ms-python.python
        ms-python.vscode-pylance
        ms-toolsai.jupyter
        # ms-toolsai.jupyter-keymap
        # ms-toolsai.jupyter-renderers
        # ms-vscode-remote.remote-containers
        ms-vscode-remote.remote-ssh
        # ms-vscode-remote.remote-ssh-edit
        # ms-vscode.cmake-tools
        ms-vscode.cpptools
        # msaraiva.surface
        # pgourlain.erlang
        # phoenixframework.phoenix
        rubymaniac.vscode-paste-and-indent
        # surajbarkale.ninja
        timonwong.shellcheck
        tuttieee.emacs-mcx
        # twxs.cmake
        # vadimcn.vscode-lldb
        # vscode-icons-team.vscode-icons
        # vscodevim.vim
        wholroyd.jinja
        xaver.clang-format
        zxh404.vscode-proto3
      ];

      keybindings = [
        {
          "key" = "ctrl+t";
          "command" = "-workbench.action.showAllSymbols";
        }
        {
          "key" = "ctrl+t";
          "command" = "workbench.action.quickOpen";
        }
        {
          "key" = "ctrl+p";
          "command" = "-workbench.action.quickOpen";
        }
      ];

      userSettings = builtins.fromJSON (builtins.readFile ./settings.json);
    };

    home.packages = with pkgs; [
      rnix-lsp
      shellcheck
    ];
  };
}