English | Español
Windows 11 development setup: PowerShell, oh-my-posh, Windows Terminal, VS Code, WSL and the development toolchain, with one-command install.
On a new PC (it will prompt for UAC for WSL, Docker and some apps). From PowerShell:
git clone https://github.com/M1gu3l4ngel/dotfiles-windows.git $env:USERPROFILE\dotfiles
cd $env:USERPROFILE\dotfiles
.\bootstrap.ps1To preview what it would do without changing anything: .\bootstrap.ps1 -DryRun.
Afterwards, complete the manual steps (GPG/SSH keys) that the script itself lists.
- Windows 10/11 with
winget(App Installer, from the Microsoft Store). - git to clone the repo. If the PC doesn't have it (freshly formatted), install
it first and reopen the terminal:
winget install Git.Git.bootstrap.ps1installs and updates everything else idempotently (git included: if it's already there, it skips it). - Developer Mode enabled (Settings → Privacy & security → For developers) or run PowerShell as administrator: required to create the symlinks.
- Recommended: run
bootstrap.ps1as administrator (WSL and Docker require it).
It is idempotent: each step checks whether it is already done, so it can be re-run without breaking anything (for example after a reboot).
| Step | What it installs or configures |
|---|---|
| 1 | Essential winget set: Git, PowerShell 7, Windows Terminal, VS Code, oh-my-posh, Gpg4win, Rust, Python, Docker, WSL and CLI tools (fzf, ripgrep, bat, fd, jq, lsd, Neovim, shfmt) |
| 2 | CaskaydiaCove Nerd Font (download verified by SHA-256) |
| 3 | Environment variables pointing to D: (or C: if there is no D:) |
| 4 | Node (nvm-windows) + pnpm + Claude Code in <disk>\Dev\npm-global |
| 5 | WSL Ubuntu (requires a reboot) |
| 6 | git: name, noreply email and defaults |
| 7 | Configuration symlinks, and the Claude Code settings.json if the machine has none (install.ps1) |
| 8 | Shows the manual steps that involve secrets (GPG/SSH) |
It only installs the environment. Personal apps are left untouched (see apps/).
If you already have the stack installed and only want these configs:
.\install.ps1Before creating each link, install.ps1 renames your existing file with the
.pre-dotfiles.bak suffix. To roll back, use uninstall.ps1 (below).
Reverts the symlinks and restores your original files (the .pre-dotfiles.bak
ones). With -DryRun it only shows what it would do, without touching anything;
without it, it reverts for real:
.\uninstall.ps1 -DryRun
.\uninstall.ps1It does not uninstall apps or touch environment variables or WSL.
-
SSH and GPG keys, and commit signing: docs/gpg-signing.md.
-
Restore the VS Code extensions:
Get-Content .\vscode\extensions.txt | ForEach-Object { code --install-extension $_ }
| Path | Contents |
|---|---|
bootstrap.ps1 |
One-command environment install |
install.ps1 |
Configuration symlinks |
uninstall.ps1 |
Revert the symlinks and restore the backups (-DryRun to simulate) |
lib/ |
Shared code (the symlink mapping) |
powershell/ |
PowerShell profile (PS 7 and legacy, same file) |
bash/ |
Git Bash profile (same prompt as PowerShell) |
oh-my-posh/ |
Prompt theme (capr4n, shared with Parrot) |
windows-terminal/ |
Windows Terminal settings |
vscode/ |
Settings, keybindings and the extension list |
format/ |
Global Prettier and EditorConfig style for projects without their own (docs/formatting.md) |
apps/ |
Reference snapshot of applications |
docs/ |
Detailed guides |
.claude/rules/ |
Project conventions (loaded by Claude Code) |
The repo detects the work disk (D: or C:) and does not depend on fixed user
paths, so cloning it and running bootstrap.ps1 leaves another PC with the same
environment. Personal apps and secrets are restored separately (system image and
new keys).
Once a PC is set up, bringing it a change made on another one is a git pull.
On the PC where you made the change, commit and push. On the other one:
cd $env:USERPROFILE\dotfiles
git pullThe configurations are symlinks into the repo, so what you pull applies right away (reopen the terminal or VS Code to see it). Only two cases need one more step, and both scripts are idempotent:
- The pull changed
lib/links.ps1(there are new links): run.\install.ps1. - The pull changed
bootstrap.ps1(there are new tools): run.\bootstrap.ps1, which also runsinstall.ps1.
What is not versioned does not travel: keys, the local Claude Code files
(settings.json, entorno.md) and POSH_NAME. install.ps1 creates that
settings.json only when it is missing; if a pull brings a new hook, the
installer warns that it is not registered yet and you copy its block from
claude/settings.template.json. New VS Code extensions are installed with the
command in the manual steps.
apps/winget-dev.json lists the environment/development apps, reinstallable with
winget import. Personal apps are not versioned: they are restored with the system
image. Details in apps/README.md.
By default the prompt shows your Windows username. If you prefer to show a different name (on screen only, without touching the system), use the helper:
.\tools\set-prompt-name.ps1It asks for the name (blank Enter = your real username) and saves it in the
POSH_NAME variable, which the theme reads. It is purely decorative: it does not
affect paths, commands or git.
For a single terminal, without saving it (for example, for a screenshot), set the variable in that session. The prompt and the tab title change on the next line, and everything reverts when you close it:
$env:POSH_NAME = 'demo-user'In Git Bash: export POSH_NAME=demo-user. To go back to your username in the
same terminal: Remove-Item Env:POSH_NAME (PowerShell) or unset POSH_NAME
(Git Bash).
| Symptom | Cause | Fix |
|---|---|---|
install.ps1 fails to create symlinks |
Developer Mode off | Enable it, or run as administrator |
| The prompt does not appear in a new terminal | The profile did not load | . $PROFILE, or reopen the terminal |
| Icons show as squares | Missing CaskaydiaCove Nerd Font | Re-run bootstrap.ps1 |
nvm not recognized after bootstrap |
PATH not refreshed | Reopen PowerShell and run bootstrap.ps1 again |
| GitHub shows "Unverified" | The GPG key UID does not have the noreply email | docs/gpg-signing.md |
Guides in docs/. Conventions in .claude/rules/. To contribute
or modify the repo: CONTRIBUTING.md.
The oh-my-posh prompt and the color palette are shared with dotfiles-parrot.
Licensed MIT.
