Commit 63d557c

HPCesia <me@hpcesia.com>
2025-08-15 06:46:41
feat: update vscode config
1 parent 7965cd0
.vscode/settings.json
@@ -1,3 +0,0 @@
-{
-    "git.enabled": false
-}
\ No newline at end of file
home/linux/gui/vscode/profiles/astro.nix
@@ -13,6 +13,7 @@
 
       dbaeumer.vscode-eslint
       esbenp.prettier-vscode
+      stylelint.vscode-stylelint
     ];
   };
 }
home/linux/gui/vscode/profiles/default.nix
@@ -8,6 +8,7 @@
   ...
 } @ args: let
   baseExtensions = import ../baseExtensions.nix args;
+  baseMcp = import ../baseMcp.nix;
   profilesList =
     (map (path: import path args) (mylib.scanModules ./.))
     ++ [
@@ -29,6 +30,7 @@
             "workbench.iconTheme" = "material-icon-theme";
             "workbench.startupEditor" = "none";
             # --- Extension Settings --- #
+            "git.enabled" = false; # Disable git because I use jujutsu instead
             "GitCommitPlugin.ShowEmoji" = false;
             "GitCommitPlugin.MaxSubjectCharacters" = 25;
             "github.copilot.advanced".useLanguageServer = true;
@@ -58,6 +60,7 @@
               "workbench.iconTheme"
               "workbench.startupEditor"
               # Extension
+              "git.enabled"
               "GitCommitPlugin.ShowEmoji"
               "GitCommitPlugin.MaxSubjectCharacters"
               "github.copilot.advanced"
@@ -71,12 +74,18 @@
         };
       }
     ];
-  profiles = lib.mergeAttrsList profilesList;
-  profilesWithBaseExtensions =
+  profiles =
     lib.mapAttrs
-    (_: v: (v // {extensions = v.extensions or [] ++ baseExtensions;}))
-    profiles;
+    (_: v: (v
+      // {
+        extensions = v.extensions or [] ++ baseExtensions;
+        userMcp = {
+          servers = lib.mergeAttrs baseMcp.servers v.userMcp.servers or {};
+          inputs = v.userMcp.inputs or [] ++ baseMcp.inputs;
+        };
+      }))
+    (lib.mergeAttrsList profilesList);
 in {
   catppuccin.vscode.profiles.default.icons.enable = false;
-  programs.vscode.profiles = profilesWithBaseExtensions;
+  programs.vscode.profiles = profiles;
 }
home/linux/gui/vscode/profiles/tauri.nix
@@ -13,6 +13,7 @@
 
       dbaeumer.vscode-eslint
       esbenp.prettier-vscode
+      stylelint.vscode-stylelint
     ];
   };
 }
home/linux/gui/vscode/baseExtensions.nix
@@ -19,6 +19,7 @@ with pkgs.vscode-extensions;
     usernamehw.errorlens
     shardulm94.trailing-spaces
     gruntfuggly.todo-tree
+    editorconfig.editorconfig
 
     # LLM
     github.copilot
@@ -27,20 +28,20 @@ with pkgs.vscode-extensions;
     # Nix
     jnoortheen.nix-ide
 
-    # Nushell
-    thenuprojectcontributors.vscode-nushell-lang
+    # # Nushell
+    # thenuprojectcontributors.vscode-nushell-lang
 
     # Configuration languages
     tamasfe.even-better-toml
     redhat.vscode-yaml
   ]
   ++ (pkgs.vscode-utils.extensionsFromVscodeMarketplace [
-    {
-      name = "git-commit-plugin";
-      publisher = "redjue";
-      version = "1.5.0";
-      sha256 = "fOdeUuB4jFL0LvGsLcjz5EQslD8jRRGslbumMo3cZCs=";
-    }
+    # {
+    #   name = "git-commit-plugin";
+    #   publisher = "redjue";
+    #   version = "1.5.0";
+    #   sha256 = "fOdeUuB4jFL0LvGsLcjz5EQslD8jRRGslbumMo3cZCs=";
+    # }
     {
       name = "aw-watcher-vscode";
       publisher = "activitywatch";
home/linux/gui/vscode/baseMcp.nix
@@ -0,0 +1,16 @@
+{
+  servers = {
+    github = {
+      type = "http";
+      url = "https://api.githubcopilot.com/mcp/";
+      gallery = true;
+    };
+    context7 = {
+      type = "stdio";
+      command = "npx";
+      args = ["-y" "@upstash/context7-mcp@latest"];
+      gallery = true;
+    };
+  };
+  inputs = [];
+}
home/linux/gui/vscode/default.nix
@@ -41,33 +41,76 @@ in {
     Install.WantedBy = ["graphical-session.target"];
     Service = {
       Type = "oneshot";
+      UMask = "0022";
       ExecStart = lib.getExe (pkgs.writeShellApplication {
         name = "vscode-setup";
-        text = ''
-          if [ -d "${userDataDir}/User/globalStorage" ]; then
-            mv "${userDataDir}/User/globalStorage" /tmp/vscode-globalStorage-$$
-          fi
-          if [ -d "${userDataDir}/User/workspaceStorage" ]; then
-            mv "${userDataDir}/User/workspaceStorage" /tmp/vscode-workspaceStorage-$$
-          fi
+        runtimeInputs = with pkgs; [coreutils gnutar jq];
+        text = let
+          userSrc = "${homeDir}/.config/Code/User";
+          userDst = "${userDataDir}/User";
+          extSrc = "${homeDir}/.vscode/extensions";
+          extDst = extensionsDir;
+
+          dirsToPreserve = [
+            "workspaceStorage"
+            "History"
+          ];
+          backupCmds = builtins.concatStringsSep "\n" (map (dir: ''
+              if [ -e "${userDst}/${dir}" ]; then
+                echo "Backing up data/User/${dir}..."
+                mv "${userDst}/${dir}" "/tmp/vscode-${dir}-$$"
+              fi
+            '')
+            (dirsToPreserve ++ ["globalStorage"]));
+          restoreCmds = builtins.concatStringsSep "\n" (map (dir: ''
+              if [ -e "/tmp/vscode-${dir}-$$" ]; then
+                echo "Restoring data/User/${dir}..."
+                mv "/tmp/vscode-${dir}-$$" "${userDst}/${dir}"
+              fi
+            '')
+            dirsToPreserve);
+        in ''
+          set -eu
 
-          rm -rf "${userDataDir}/User"
-          rm -rf "${extensionsDir}"
+          ${backupCmds}
+
+          echo "Cleaning old directories..."
+          rm -rf "${userDst}"
+          rm -rf "${extDst}"
 
           mkdir -p "${userDataDir}"
-          mkdir -p "${extensionsDir}"
+          mkdir -p "${extDst}"
 
-          cp -r --dereference --no-preserve=mode,ownership \
-            "${homeDir}/.config/Code/User" "${userDataDir}/User"
-          cp -r --dereference --no-preserve=mode,ownership \
-            "${homeDir}/.vscode/extensions/." "${extensionsDir}"
+          echo "Copying user settings from ${userSrc}..."
+          cp -r --dereference --no-preserve=mode,ownership ${userSrc} "${userDst}"
 
-          if [ -d /tmp/vscode-globalStorage-$$ ]; then
-            mv /tmp/vscode-globalStorage-$$ "${userDataDir}/User/globalStorage"
-          fi
-          if [ -d /tmp/vscode-workspaceStorage-$$ ]; then
-            mv /tmp/vscode-workspaceStorage-$$ "${userDataDir}/User/workspaceStorage"
+          echo "Copying extensions from ${extSrc}..."
+          tar -h -C "${extSrc}" -cf - . | tar -C "${extDst}" -xf - --no-same-owner --no-same-permissions --mode='u=rX,go=rX'
+          chmod u+w -R "${extDst}" 2>/dev/null || true
+
+          ${restoreCmds}
+
+          echo "Restoring and merging data/User/globalStorage..."
+          if [ -e "/tmp/vscode-globalStorage-$$" ]; then
+            cp -rT "/tmp/vscode-globalStorage-$$" "${userDst}/globalStorage"
+
+            src_storage_json="${userSrc}/globalStorage/storage.json"
+            dst_storage_json="${userDst}/globalStorage/storage.json"
+
+            if [ -f "$src_storage_json" ] && [ -f "$dst_storage_json" ]; then
+              echo "Merging data/globalStorage/storage.json with new data..."
+              merged_json=$(mktemp)
+              jq -s '.[0] * .[1]' "$dst_storage_json" "$src_storage_json" > "$merged_json"
+              mv "$merged_json" "$dst_storage_json"
+              echo "Merge complete."
+            else
+              echo "Skipping storage.json merge: one or both files do not exist."
+            fi
+          else
+            echo "No backed-up globalStorage found to restore."
           fi
+
+          echo "VSCode setup complete."
         '';
       });
     };