{ pkgs, lib, ... }: let inherit (lib) getExe; # https://github.com/Sertion/vscode-gitblame?tab=readme-ov-file#message-tokens blameMessageFormat = "\${author.name}; \${time.ago} * \${commit.summary}"; in { # appearance "workbench.iconTheme" = "catppuccin-mocha"; "workbench.colorTheme" = "Catppuccin Mocha"; "workbench.productIconTheme" = "fluent-icons"; "workbench.layoutControl.enabled" = false; "workbench.activityBar.location" = "hidden"; "window.menuBarVisibility" = "toggle"; "window.commandCenter" = false; "window.dialogStyle" = "custom"; "window.titleBarStyle" = "custom"; "window.title" = " "; "vscode-pets.position" = "explorer"; "vscode-pets.petSize" = "medium"; # editor appearance and behavior "editor.fontSize" = 16; "editor.fontFamily" = "Berkeley Mono"; "editor.cursorStyle" = "block"; "editor.formatOnSave" = true; "editor.formatOnSaveMode" = "modificationsIfAvailable"; "editor.cursorBlinking" = "smooth"; "editor.cursorSmoothCaretAnimation" = "on"; "editor.minimap.autohide" = true; "files.autoSave" = "afterDelay"; # git configuration "git.autofetch" = "all"; "git.enableCommitSigning" = true; "github.gitProtocol" = "ssh"; "gitblame.inlineMessageEnabled" = true; "gitblame.ignoreWhitespace" = true; "gitblame.inlineMessageNoCommit" = ""; "gitblame.inlineMessageFormat" = blameMessageFormat; "gitblame.statusBarMessageFormat" = blameMessageFormat; "gitblame.delayBlame" = 1000; # language configuration "nix.enableLanguageServer" = true; "nix.serverPath" = getExe pkgs.nil; "nix.formatterPath" = getExe pkgs.nixfmt-rfc-style; "mesonbuild.buildFolder" = "build"; "mesonbuild.formatting.enabled" = true; "mesonbuild.linter.muon.enabled" = true; "mesonbuild.downloadLanguageServer" = false; "mesonbuild.languageServerPath" = getExe pkgs.mesonlsp; "mesonbuild.mesonPath" = getExe pkgs.meson; "mesonbuild.muomPath" = getExe pkgs.muon; "rust-analyzer.server.path" = getExe pkgs.rust-analyzer; "go.formatFlags" = [ "-s" ]; "go.alternateTools" = with pkgs; { go = getExe go; gopls = getExe gopls; dlv = getExe delve; }; # vscode+vim configuration "vim.useSystemClipboard" = true; "vim.easymotion" = true; "vim.hlsearch" = true; "vim.gdefault" = true; "vim.sneak" = true; "vim.sneakReplacesF" = true; "vim.vimrc.enable" = true; "vim.vimrc.path" = ./../.vimrc; "extensions.experimental.affinity" = { "vscodevim.vim" = 1; }; "vim.useCtrlKeys" = true; "vim.handleKeys" = { "" = false; # command palette "" = false; # new file "" = false; # toggle sidebar "" = false; # key with a million uses "" = false; # select all text }; "vim.normalModeKeyBindings" = [ # add binds to manage bookmarks (from the bookmarks extension) { before = [ "" "m" ]; commands = [ "bookmarks.toggle" ]; } { before = [ "" "b" ]; commands = [ "bookmarks.list" ]; } ]; # some other extension behavior "direnv.restart.automatic" = true; }