summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--configs/vscode/keybindings.nix42
-rw-r--r--configs/vscode/settings.nix109
-rw-r--r--modules/common.nix1
-rw-r--r--modules/home/code.nix (renamed from modules/code.nix)29
-rw-r--r--modules/home/common.nix4
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;