diff options
| -rw-r--r-- | configs/vscode/keybindings.nix | 42 | ||||
| -rw-r--r-- | configs/vscode/settings.nix | 109 | ||||
| -rw-r--r-- | modules/common.nix | 1 | ||||
| -rw-r--r-- | modules/home/code.nix (renamed from modules/code.nix) | 29 | ||||
| -rw-r--r-- | modules/home/common.nix | 4 |
5 files changed, 175 insertions, 10 deletions
diff --git a/configs/vscode/keybindings.nix b/configs/vscode/keybindings.nix new file mode 100644 index 0000000..fcb6e4d --- /dev/null +++ b/configs/vscode/keybindings.nix @@ -0,0 +1,42 @@ +{ ... }: + +[ + # toggle the left panels nicely. + { + key = "ctrl+b"; + command = "workbench.action.toggleSidebarVisibility"; + } + { + key = "alt+b"; + command = "workbench.action.toggleActivityBarVisibility"; + } + # quickly switch left panel view by order. + { + key = "ctrl+alt+1"; + command = "workbench.view.explorer"; + } + { + key = "ctrl+alt+2"; + command = "workbench.view.search"; + } + { + key = "ctrl+alt+3"; + command = "workbench.view.scm"; + } + { + key = "ctrl+alt+4"; + command = "workbench.view.debug"; + } + { + key = "ctrl+alt+5"; + command = "workbench.view.extension.test"; + } + { + key = "ctrl+alt+6"; + command = "workbench.view.extensions"; + } + { + key = "ctrl+alt+7"; + command = "workbench.view.extension.bookmarks"; + } +] diff --git a/configs/vscode/settings.nix b/configs/vscode/settings.nix new file mode 100644 index 0000000..4e2fba1 --- /dev/null +++ b/configs/vscode/settings.nix @@ -0,0 +1,109 @@ +{ 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" = { + "<C-p>" = false; # command palette + "<C-n>" = false; # new file + "<C-b>" = false; # toggle sidebar + "<C-k>" = false; # key with a million uses + "<C-a>" = false; # select all text + }; + "vim.normalModeKeyBindings" = [ + # add binds to manage bookmarks (from the bookmarks extension) + { + before = [ + "<leader>" + "m" + ]; + commands = [ "bookmarks.toggle" ]; + } + { + before = [ + "<leader>" + "b" + ]; + commands = [ "bookmarks.list" ]; + } + ]; + + # some other extension behavior + "direnv.restart.automatic" = true; +} diff --git a/modules/common.nix b/modules/common.nix index 00fc46a..dbc4efc 100644 --- a/modules/common.nix +++ b/modules/common.nix @@ -5,7 +5,6 @@ ./nix.nix ./user.nix ./locale.nix - ./code.nix ./vim.nix ./tmux.nix ./gnome.nix diff --git a/modules/code.nix b/modules/home/code.nix index 506e0bd..053d550 100644 --- a/modules/code.nix +++ b/modules/home/code.nix @@ -1,6 +1,14 @@ -{ pkgs, unstablePkgs, ... }: +{ + 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 @@ -48,14 +56,17 @@ let ms-vscode.remote-repositories github.remotehub ]; - - code = - with unstablePkgs; - vscode-with-extensions.override { - vscode = vscodium; - vscodeExtensions = extensions ++ externalExtensions ++ newVendorExtensions; - }; in { - environment.systemPackages = [ code ]; + programs.vscode = { + enable = true; + enableUpdateCheck = false; + enableExtensionUpdateCheck = false; + mutableExtensionsDir = false; + package = unstablePkgs.vscodium; + + extensions = extensions ++ externalExtensions ++ newVendorExtensions; + keybindings = keybindings; + userSettings = settings; + }; } diff --git a/modules/home/common.nix b/modules/home/common.nix index 99900e6..7e10560 100644 --- a/modules/home/common.nix +++ b/modules/home/common.nix @@ -1,6 +1,10 @@ { ... }: { + imports = [ + ./code.nix + ]; + programs = { git = { enable = true; |
