Personal development environment configuration for Windows + Git Bash + VS Code, geared toward Salesforce Commerce Cloud (SFCC) work.
Anything machine- or project-specific (paths, names) lives in a local file that
is not versioned (git-bash/env.local), so the repository stays generic and
reusable.
.
├── install.sh # Install/link the configuration
├── uninstall.sh # Revert the changes
├── git-bash/
│ ├── .bashrc # Loader: prompt + local config + aliases
│ ├── git-prompt.sh # Custom prompt (Nerd Fonts)
│ └── env.example # Local configuration template
├── vscode/
│ ├── settings.json # VS Code user settings
│ ├── snippets/
│ │ └── sfcc.code-snippets # Generic SFCC snippets
│ └── workspaces/
│ └── sfcc.code-workspace.template # Workspace template (generated on install)
└── zed/
└── settings.json # Zed user settings (Ayu Dark theme)
- Git Bash (Git for Windows).
- VS Code or Zed (the installer asks which one you use).
- A Nerd Font for the prompt (e.g. JetBrainsMono NF).
If you don't use Nerd Fonts, export
USE_NERD_FONTS=falsebefore loading the prompt for ASCII icons.
git clone https://github.com/salva-sm/dotfiles.git
cd dotfiles
bash install.shThe script:
- Creates
git-bash/env.localfromenv.example(if missing). - Asks two questions and saves the answers in
env.local:- Use the custom prompt (
git-prompt.sh)?yes/no— answeringnoleaves Git Bash's own prompt untouched. - Favourite code editor?
1VS Code (default) /2Zed.
- Use the custom prompt (
- Creates a
~/.bashrcthat loads this repo's configuration. - Generates
vscode/workspaces/sfcc.code-workspacefrom the template using your variables. - Symlinks the config of the chosen editor:
- VS Code →
vscode/settings.jsonandvscode/snippets/into%APPDATA%\Code\User. - Zed →
zed/settings.json(andzed/keymap.jsonif you add one) into%APPDATA%\Zed.
- VS Code →
Restart Git Bash when it finishes.
Both questions default to your previous answer, so pressing Enter on a
re-run keeps the current setup. To change your mind, re-run install.sh or edit
DOTFILES_CUSTOM_PROMPT / DOTFILES_EDITOR in env.local directly. Answers can
also be piped for an unattended install:
printf 'no\n2\n' | bash install.sh # no custom prompt, Zed💾 Backups: any existing
~/.bashrc,settings.jsonorsnippetsis saved to a.bakalongside it before being replaced. The backup is made only once, so re-runninginstall.shnever clobbers your original.uninstall.shrestores them.
Machine-specific values live in git-bash/env.local (gitignored). Edit it
after the first install:
# Label VS Code shows for the project folder
export SFCC_PROJECT_NAME="📦 My SFCC Project"
# Path to your project, RELATIVE to vscode/workspaces/
# e.g. project at ~/Github/my-project -> ../../../my-project
export SFCC_PROJECT_DIR="../../../my-project"
# Second workspace folder: the Playwright end-to-end test repo.
# Same relative-path rule as SFCC_PROJECT_DIR.
export PLAYWRIGHT_PROJECT_NAME="🎭 Playwright Tests"
export PLAYWRIGHT_PROJECT_DIR="../../../sfcc-playwright-test"SFCC_OAUTH_CLIENT_ID and SFCC_OAUTH_CLIENT_SECRET are optional in
env.local. If either one is missing, .bashrc reads client-id /
client-secret from $SFCC_PROJECT_DIR/source/dw.json. Set SFCC_DW_JSON
to use a file elsewhere. Values already exported always win, so nothing in
env.local is overwritten.
The generated workspace opens as a multi-root workspace with both folders (the
SFCC project and the Playwright test repo) and recommends the
ms-playwright.playwright extension.
A
.code-workspaceJSON cannot read environment variables in its folderpath, which is why the workspace is generated from the template. Whenever you changeenv.local, runbash install.shagain to regenerate it.
Once generated, the sfcc alias (defined in .bashrc) opens the workspace:
sfccWith DOTFILES_EDITOR="zed" the alias runs zed on both project folders
instead, since Zed doesn't read .code-workspace files.
bash uninstall.shRemoves the generated ~/.bashrc and the VS Code / Zed links, restores any
.bak backups made at install time, and removes the generated workspace. Your
env.local is kept.
- The SFCC snippets are generic and reusable in any SFRA project.
git-prompt.shrenders a two-line prompt (date/time, user@host, path, branch).- On Windows,
ln -sneeds Developer Mode (or an admin shell) to create real symlinks; otherwise it falls back to copying the files, which works the same.
