Commit 7aef689

HPCesia <me@hpcesia.com>
2025-05-31 11:17:14
feat(app): VSCode settings.
- Add VSCode settings and extensions. - Add a systemd user service to reset VSCode per reboot.
1 parent a4a0a0f
Changed files (4)
home
home/linux/gui/plasma/apps/vscode/profiles/default.nix
@@ -0,0 +1,44 @@
+{
+  mylib,
+  pkgs,
+  ...
+}: let
+  baseExtensions = import ../baseExtensions.nix pkgs;
+in {
+  imports = mylib.scanPaths ./.;
+
+  programs.vscode.profiles.default = {
+    enableUpdateCheck = false;
+    enableExtensionUpdateCheck = false;
+
+    userSettings = {
+      # --- Editor Settings ---
+      "editor.fontSize" = 16;
+      "editor.fontLigatures" = true;
+      "editor.guides.bracketPairs" = true;
+      "editor.formatOnSave" = true;
+      # --- Terminal Settings ---
+      "terminal.integrated.fontSize" = 14;
+      # --- Workbench Settings ---
+      "workbench.iconTheme" = "material-icon-theme";
+      "workbench.startupEditor" = "none";
+      # --- Extension Settings ---
+      "nix.formatterPath" = "alejandra";
+      # --- Other Settings ---
+      "telemetry.telemetryLevel" = "off";
+      "security.workspace.trust.untrustedFiles" = "open";
+      "window.newWindowProfile" = "default";
+      "workbench.settings.applyToAllProfiles" = [
+        "editor.fontSize"
+        "editor.fontLigatures"
+        "editor.guides.bracketPairs"
+        "editor.semanticTokenColorCustomizations"
+        "terminal.integrated.fontSize"
+        "workbench.iconTheme"
+        "workbench.startupEditor"
+      ];
+    };
+
+    extensions = baseExtensions;
+  };
+}
home/linux/gui/plasma/apps/vscode/profiles/typst.nix
@@ -0,0 +1,19 @@
+{pkgs, ...}: let
+  baseExtensions = import ../baseExtensions.nix pkgs;
+in {
+  programs.vscode.profiles.typst = {
+    userSettings = {
+      "tinymist.formatterMode" = "typstyle";
+      "[typst-code]"."editor.wordSeparators" = "`~!@#$%^&*()=+[{]}\\|;:'\",.<>/?";
+      "[typst]"."editor.unicodeHighlight.ambiguousCharacters" = false;
+    };
+
+    extensions =
+      (with pkgs.vscode-extensions; [
+        myriad-dreamin.tinymist # Typst LSP
+        tamasfe.even-better-toml # TOML syntax
+        tomoki1207.pdf # PDF Viewer
+      ])
+      ++ baseExtensions;
+  };
+}
home/linux/gui/plasma/apps/vscode/baseExtensions.nix
@@ -0,0 +1,24 @@
+pkgs:
+with pkgs.vscode-extensions; [
+  # Translation
+  ms-ceintl.vscode-language-pack-zh-hans
+  w88975.code-translate
+
+  # Appearance
+  pkief.material-icon-theme
+
+  # Utils
+  mhutchie.git-graph
+  christian-kohler.path-intellisense
+  usernamehw.errorlens
+  shardulm94.trailing-spaces
+  gruntfuggly.todo-tree
+
+  # LLM
+  github.copilot
+  github.copilot-chat
+  rooveterinaryinc.roo-cline
+
+  # Nix
+  jnoortheen.nix-ide
+]
home/linux/gui/plasma/apps/vscode/default.nix
@@ -1,5 +1,58 @@
-{...}: {
+{
+  mylib,
+  myvars,
+  config,
+  lib,
+  pkgs,
+  ...
+}: let
+  inherit (lib.lists) concatLists;
+
+  homeDir = config.home.homeDirectory;
+  userDataDir = "${homeDir}/.data/vscode/data";
+  extensionsDir = "${homeDir}/.data/vscode/extensions";
+
+  pkg = pkgs.vscode.override {
+    commandLineArgs = concatLists [
+      ["--extensions-dir" extensionsDir]
+      ["--user-data-dir" userDataDir]
+    ];
+  };
+in {
+  imports = [./profiles];
+
   programs.vscode = {
     enable = true;
+    package = pkg;
+    mutableExtensionsDir = false;
+  };
+
+  # To solve VSCode wants to write settings.json
+  # VSCode will reset per reboot/rebuild.
+  systemd.user.services.vscode-setup = {
+    Unit = {
+      Description = "VSCode Setup service";
+      After = ["graphical-session-pre.target"];
+      Wants = ["graphical-session-pre.target"];
+    };
+    Install.WantedBy = ["graphical-session.target"];
+    Service = {
+      Type = "oneshot";
+      ExecStart = lib.getExe (pkgs.writeShellApplication {
+        name = "vscode-setup";
+        text = ''
+          rm -rf "${userDataDir}/User"
+          rm -rf "${extensionsDir}"
+
+          mkdir -p "${userDataDir}"
+          mkdir -p "${extensionsDir}"
+
+          cp -r --dereference --no-preserve=mode,ownership \
+            "${homeDir}/.config/Code/User" "${userDataDir}/User"
+          cp -r --dereference --no-preserve=mode,ownership \
+            "${homeDir}/.vscode/extensions/." "${extensionsDir}"
+        '';
+      });
+    };
   };
 }