{ pkgs, ... }:
{
  programs.vscode = {
    enable = true;
    package = pkgs.vscodium;
    extensions = with pkgs.vscode-extensions; [
      bbenoist.nix
      yzhang.markdown-all-in-one
      haskell.haskell
      justusadam.language-haskell
      maximedenes.vscoq
      james-yu.latex-workshop
      mkhl.direnv
      catppuccin.catppuccin-vsc
      valentjn.vscode-ltex
    ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
     {
       name = "agda-mode";
       publisher = "banacorn";
       version = "0.4.7";
       sha256 = "sha256-gNa3n16lP3ooBRvGaugTua4IXcIzpMk7jBYMJDQsY00=";
     }
     {
       name = "yuck";
       publisher = "eww-yuck";
       version = "0.0.3";
       sha256 = "sha256-DITgLedaO0Ifrttu+ZXkiaVA7Ua5RXc4jXQHPYLqrcM=";
     }
     {
       name = "simple-alignment";
       publisher = "earshinov";
       version = "1.0.1";
       sha256 = "sha256-Lqg5wVGj6VulEJHVv7CS6aci7Ze2KEqXMu10vlrYYao=";
     }
     {
       name = "todo-tree";
       publisher = "Gruntfuggly";
       version = "0.0.226";
       sha256 = "sha256-Fj9cw+VJ2jkTGUclB1TLvURhzQsaryFQs/+f2RZOLHs=";
     }
     {
       name = "lean4";
       publisher = "leanprover";
       version = "0.0.133";
       sha256 = "sha256-tjBTOkh4UeEmOo/ZbadpeyW07QiPcUO4aI2NWdtTxrE=";
     }
    ];
   userSettings = {
     "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" = "Berkeley Mono, DejaVu Sans Mono, monospace, Unifont";
     "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;
     };
     "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 = "";
     }
   ];
  };
}