{ pkgs, ... }:
{
  programs.vscode = {
    enable = true;
    package = pkgs.vscodium;
    extensions = with pkgs.vscode-extensions; [
      ms-vscode.cpptools
    ]
    ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
      {
        name = "vsc-prolog";
        publisher = "arthurwang";
        version = "0.8.23";
        sha256 = "1i6rgz8ap269pph6bh04bimw9yyajd7iyq8dvv7sqmpfk859vb8d";
      }
      {
        name = "agda-mode";
        publisher = "banacorn";
        version = "0.5.1";
        sha256 = "02r28a8y6pdjhad76z193xrlc4yk4fsynn064w7cff56gdc31bd5";
      }
      {
        name = "nix";
        publisher = "bbenoist";
        version = "1.0.1";
        sha256 = "0zd0n9f5z1f0ckzfjr38xw2zzmcxg1gjrava7yahg5cvdcw6l35b";
      }
      {
        name = "catppuccin-vsc";
        publisher = "catppuccin";
        version = "3.16.0";
        sha256 = "1g4021qrsy67fw2b1lvazn58nvr64dkvpywqanbpz24dlgk2573r";
      }
      {
        name = "doxdocgen";
        publisher = "cschlosser";
        version = "1.4.0";
        sha256 = "1d95znf2vsdzv9jqiigh9zm62dp4m9jz3qcfaxn0n0pvalbiyw92";
      }
      {
        name = "simple-alignment";
        publisher = "earshinov";
        version = "1.0.1";
        sha256 = "1ak1v1dbwx7d6ablla5njznj59z9jaqbzmci22jmpsd3a70kka1f";
      }
      {
        name = "yuck";
        publisher = "eww-yuck";
        version = "0.0.3";
        sha256 = "1hxdxa13s1vlilw7fidr8vnl19c9wjazjvnvmqgl4fsswwny110c";
      }
      {
        name = "todo-tree";
        publisher = "gruntfuggly";
        version = "0.0.226";
        sha256 = "0yrc9qbdk7zznd823bqs1g6n2i5xrda0f9a7349kknj9wp1mqgqn";
      }
      {
        name = "haskell";
        publisher = "haskell";
        version = "2.5.3";
        sha256 = "13s39fvb6kwxklcfsa5xh4z7y8y3y0h6jv39ljrgl24qkwgx8xnw";
      }
      {
        name = "latex-workshop";
        publisher = "james-yu";
        version = "10.7.5";
        sha256 = "0habsbk0w2g8vcxqzdbnwy6f0x0ghvcx1f9szd4p1pwjfij2vnax";
      }
      {
        name = "c-cpp-flylint";
        publisher = "jbenden";
        version = "1.15.0";
        sha256 = "1z1l9ygxsqjn8vpncjzyisdg2sirgzf4ghiv5ak32mkq3k8hgawk";
      }
      {
        name = "better-cpp-syntax";
        publisher = "jeff-hykin";
        version = "1.27.1";
        sha256 = "037nigza7n71j5vgl3qw0swrmy8gvfj9m8jbi1nb2a3lmsifivqq";
      }
      {
        name = "language-haskell";
        publisher = "justusadam";
        version = "3.6.0";
        sha256 = "115y86w6n2bi33g1xh6ipz92jz5797d3d00mr4k8dv5fz76d35dd";
      }
      {
        name = "lean4";
        publisher = "leanprover";
        version = "0.0.194";
        sha256 = "1anal0i85vy0y1rfjx6nj82q8bilh2pyh40j6ax9wfsjyrqzrynf";
      }
      {
        name = "vscoq";
        publisher = "maximedenes";
        version = "2.2.3";
        sha256 = "066l48b22qnxlwnq2328wmldn2dwrjn5d399rp605ahdihl9f7w7";
      }
      {
        name = "direnv";
        publisher = "mkhl";
        version = "0.17.0";
        sha256 = "1n2qdd1rspy6ar03yw7g7zy3yjg9j1xb5xa4v2q12b0y6dymrhgn";
      }
      {
        name = "vscode-ltex";
        publisher = "valentjn";
        version = "13.1.0";
        sha256 = "15qm97i9l65v3x0zxl1895ilazz2jk2wmizbj7kmds613jz7d46c";
      }
      {
        name = "markdown-all-in-one";
        publisher = "yzhang";
        version = "3.6.2";
        sha256 = "1n9d3qh7vypcsfygfr5rif9krhykbmbcgf41mcjwgjrf899f11h4";
      }
    ];
   userSettings = {
     "prolog.executablePath" = "/etc/profiles/per-user/leonv/bin/swipl";
     "agdaMode.connection.agdaLanguageServer" = false;
     "agdaMode.highlighting.getHighlightWithThemeColors" = false;
     "editor.unicodeHighlight.ambiguousCharacters" = false;
     "editor.semanticHighlighting.enabled" = true;
     "workbench.colorTheme" = "Catppuccin Mocha";
     "haskell.manageHLS" = "PATH";
     "editor.fontFamily" = "monospace";
     "terminal.integrated.minimumContrastRatio" = 1;
     "terminal.integrated.shellIntegration.enabled" = false;
     "terminal.integrated.profiles.linux" = {
       bash = null;
       zsh = {
         path = "/run/current-system/sw/bin/zsh";
         icon = "terminal-linux";
       };
     };
     "terminal.integrated.defaultProfile.linux" = "zsh";
     "vim.handleKeys" = {
       "<C-c>" = false;
       "<C-x>" = false;
       "<C-s>" = false;
       "<C-v>" = false;
       "<C-a>" = false;
       "<C-d>" = false;
     };
     "C_Cpp.formatting" = "disabled";
     "vim.overrideCopy" = false;
     "window.titleBarStyle" = "custom";
     "window.customMenuBarAltFocus" = false;
     "window.enableMenuBarMnemonics" = false;
     "ltex.sentenceCacheSize" = 50000;
     "ltex.java.maximumHeapSize" = 8192;
     "ltex.latex.environments" = {
      "tikzcd" = "ignore";
     };
     "editor.tabSize" = 2;
     "explorer.excludeGitIgnore" = true;
     "files.exclude" = {
       "**/*.agdai" = true;
     };
     # try to fix agda suggestions:
     "editor.acceptSuggestionOnCommitCharacter" = false;
     "editor.minimap.enabled" = false;
     "editor.autoClosingOvertype" = "never";
     "editor.autoClosingBrackets" = "never";
     "editor.accessibilitySupport" = "off";

     # for latex
     "todo-tree.regex.regex" = "((//|#|<!--|;|/\\*|^|%|\\\\)\\s*($TAGS)\\{*|^\\s*- \\[ \\])";
     "todo-tree.regex.regexCaseSensitive" = false;
     "latex-workshop.linting.chktex.enabled" = true;
     "editor.formatOnSave" = true;
     "latex-workshop.linting.chktex.exec.args" = [
       "-wall"
       "-n21"
       "-n22"
       "-n30"
       "-e16"
       "-q"
     ];
   };
   keybindings = [
     {
       key = "ctrl+shift+v";
       command = "extension.vim_ctrl+v";
       when = "editorTextFocus && vim.active && !inDebugRepl";
     }
     {
       key = "ctrl+shift+=";
       command = "editor.action.fontZoomIn";
       when = "";
     }
     {
       key = "ctrl+shift+-";
       command = "editor.action.fontZoomOut";
       when = "";
     }
   ];
  };
}