VS Code user settings, kept here so they’re version-controlled and consistent across machines. Both files are symlinked into the VS Code user config directory so any changes are tracked in git.
This is handled automatically by setup.sh, in a single “VS Code” step. It doesn’t install VS Code itself. If VS Code isn’t installed, the whole step is skipped with one warning. If the code command isn’t on your PATH, the settings are still linked, but the extensions are skipped with a warning. Fix it from VS Code’s Command Palette with “Shell Command: Install ‘code’ command in PATH”.
To wire it up manually:
ln -sf <repo root>/vscode/settings.json \
~/Library/Application\ Support/Code/User/settings.json
ln -sf <repo root>/vscode/keybindings.json \
~/Library/Application\ Support/Code/User/keybindings.json
Cmd+1–Cmd+9 focus the Nth terminal when a terminal has focus (workbench.action.terminal.focusAtIndex1–9, scoped with "when": "terminalFocus"). Scoped rather than global so it doesn’t override the default Cmd+<number> editor-tab-switching shortcut when focus is in the editor.
vscode/extensions.txtA list of installed marketplace extensions, one ID per line. Maintained automatically by the workshop-sync extension — any install or uninstall updates this file immediately. Commit the change to keep the repo current.
setup.sh reads this file on a new machine and installs everything via code --install-extension.
vscode/extensions/workshop-sync/A custom VS Code extension that keeps vscode/extensions.txt in sync automatically. Writes the full list of non-built-in extensions on startup and on every install/uninstall.
Finds the repo on its own by following the settings.json symlink back to its source (~/Library/Application Support/Code/User/settings.json on macOS, the OS-equivalent path elsewhere) - no path needs to be configured for the standard setup.sh-symlinked setup.
To build and install:
cd vscode/extensions/workshop-sync
npm install
npm run compile
npx vsce package
code --uninstall-extension emaishoaib.workshop-sync 2>/dev/null; true
code --install-extension "$(ls workshop-sync-*.vsix | tail -1)"
Config:
| Setting | Default | Description |
|---|---|---|
workshopSync.repoPath |
(empty, auto-detected) | Manual override - only needed if the settings.json symlink detection doesn’t apply to your setup |
vscode/extensions/python-codelens/A custom VS Code extension that shows reference counts inline above Python classes and methods — the equivalent of PyCharm’s “N usages” indicator. Pylance doesn’t support this natively, so this fills the gap.
Built with the VS Code CodeLensProvider API: scans for class and def lines, then resolves counts lazily via Pylance’s reference provider. Results are cached per symbol and invalidated on save.
To build and install:
cd vscode/extensions/python-codelens
npm install
npm run compile
npx vsce package
code --uninstall-extension emaishoaib.python-codelens 2>/dev/null; true
code --install-extension "$(ls python-codelens-*.vsix | tail -1)"
Config options (in vscode/settings.json):
| Setting | Default | Description |
|---|---|---|
pythonCodelens.enabled |
true |
Toggle the extension on/off |
pythonCodelens.showZeroReferences |
false |
Show lens even when count is 0 |
formatOnSave and trimTrailingWhitespace are both disabled for Markdown via a [markdown] language override in settings.json. This prevents Prettier (or any active Markdown formatter) from reflowing content on every ⌘S, and preserves intentional trailing spaces (which are valid line-break syntax in Markdown).