Native Windows + PowerShell 7 dotfiles, managed by chezmoi. A self-contained, Windows-only companion to the cross-platform (macOS/Linux) dotfiles at daviddwlee84/dotfiles — the PowerShell layer is written natively rather than ported from the POSIX shell config.
Which repo do I install from?
Your machine Use Native Windows (PowerShell) this repo ( dotfiles-windows)macOS / Linux / WSL daviddwlee84/dotfiles
Status: work in progress. See
docs/for the full handbook (bilingual EN / 繁體中文) once built.
From a fresh Windows PowerShell (or pwsh) session:
irm https://raw.githubusercontent.com/daviddwlee84/dotfiles-windows/main/bootstrap.ps1 | iexThis installs scoop (CLI tools) + winget (GUI apps), PowerShell 7, chezmoi and uv, then applies the dotfiles.
- Shell: PowerShell 7 with a modular
$PROFILE(~/.config/powershell/profile.d/*.ps1). - Prompt: starship (shared config with the macOS/Linux dotfiles).
- CLI tools (scoop): git, neovim, lazygit, zoxide, fzf, bat, eza, ripgrep, fd, gh, delta, jq, yazi, btop, mise, uv, node, bun.
- AI agents: Claude Code, OpenCode, Codex, GitHub Copilot CLI, SpecStory, Antigravity.
- Editors: VSCode, Cursor, Notepad++ (shared settings/keybindings).
- Apps (winget): Windows Terminal, Alacritty, Raycast, PowerToys, Steam.
copilot-proxytool series, rewritten as a native PowerShell module.
scoop for CLIs, winget for GUI apps. Rationale (why not Chocolatey, why starship not oh-my-posh, why pwsh not cmd) lives in the docs.
| Path | What |
|---|---|
.chezmoi.toml.tmpl |
Init prompts (role + feature toggles). |
Documents/PowerShell/Microsoft.PowerShell_profile.ps1 |
$PROFILE loader. |
dot_config/powershell/profile.d/ |
Modular shell fragments. |
dot_config/powershell/modules/Copilot/ |
copilot-proxy PowerShell module. |
dot_config/starship.toml |
Prompt config. |
dot_ssh/ |
Create-only ~/.ssh/config skeleton (Include config.d/*) + config.d/ snippets. |
.chezmoiscripts/ |
Package install + editor-overlay scripts. |
bootstrap.ps1 |
One-line installer. |
docs/, mkdocs.yml |
Bilingual documentation site. |
dot_ssh/ ships a create-only OpenSSH skeleton, mirrored from the cross-platform
dotfiles and adapted for Windows:
~/.ssh/config—Include ~/.ssh/config.d/*plus conservativeHost *keepalives. Create-only: an existing~/.ssh/configis never overwritten (add theIncludeline by hand if so). chezmoi writes it owner-only so Windows OpenSSH won't reject it with "Bad owner or permissions".~/.ssh/config.d/00-defaults— commented-out global-defaults stub.~/.ssh/config.d/01_git—github.comoverssh.github.com:443(survives port-22 filtering) +gitlab.com, with commented multi-account / SOCKS5-proxy examples.
Agent handling differs from macOS/Linux: use the Windows OpenSSH
Authentication Agent service (Set-Service ssh-agent -StartupType Automatic;
Start-Service ssh-agent; ssh-add). The client uses the
//./pipe/openssh-ssh-agent named pipe by default — no SSH_AUTH_SOCK needed.
First-time install (fresh machine — no chezmoi yet): run the
Quick start one-liner. bootstrap.ps1 installs scoop, git,
pwsh, chezmoi and uv, then runs chezmoi init --apply (asking the init prompts
once). You only do this once per machine.
Day-to-day (chezmoi already installed): pull the latest and re-apply.
chezmoi update --init # git pull + apply; --init re-asks any newly-added prompts (noop if none)
chezmoi diff # preview pending changes without applying
chezmoi apply # apply local source edits only (no pull)
just upgrade-scoop # upgrade CLI tools
just upgrade-winget # upgrade GUI appsInside a loaded PowerShell session there are shortcuts (see
profile.d/20_aliases.ps1): cau = chezmoi update --init + reload
$PROFILE, cas = chezmoi apply + reload. Prefer cau as the normal
"sync my dotfiles" verb.
Forward-looking work — long-term ideas, deferred items, things needing
evaluation — lives in TODO.md, prioritised P1 → P3 with effort
estimates (S/M/L/XL). Items with accompanying research, design notes, or paused
troubleshooting link to a corresponding backlog/<slug>.md doc.
Backward-looking knowledge — past traps and non-obvious debugging — lives in
pitfalls/, titled by symptom so future-you can grep the error
message and land on the root cause + workaround instead of re-debugging from
scratch.