Commit 63d557c
Changed files (7)
.vscode
home
linux
gui
vscode
.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."
'';
});
};