Skip to content
 
 

Repository files navigation

Windows Developer Config logo

Windows Developer Config

Opinionated setups for Windows dev boxes. Idempotent. CI-tested.


Go from a fresh Windows install to a fully configured dev box in one command. These CI-tested setups install your tools, settings, and shells the same way every time — so any machine can be your machine in minutes.

🎯 Pick your setup

Three developer setups live in this repo. Pick the one that matches what you want:

You want... Go to
A complete dev workstation: tools, OS settings, WSL, and terminal. One command, restarts once. Windows Dev Config
A polished WSL shell: zsh/bash, Starship, CLI tools, and a themed terminal profile. Interactive or unattended. WSL Comfort
A single language toolchain: Node, Python, SQL, PowerShell, .NET, Rust, Go, Java, PHP, WinForms, or WinUI 3. One command each. Workloads

Most of the single-language workloads use winget configure. If you've never used it before, enable it once:

winget configure --enable

Important

If winget is being invoked from a non-elevated environment, the Microsoft Visual C++ Redistributable (aka.ms/vcredist) must also be installed — without it winget configure fails with an internal error. Install it once with the command for your machine's architecture:

# x64:
winget install Microsoft.VCRedist.2015+.x64

# ARM64:
winget install Microsoft.VCRedist.2015+.arm64

If that fails or winget configure is still not recognized, see Troubleshooting. Windows Dev Config doesn't use winget configure and needs none of this.


🖥️ Windows Dev Config

Turns a fresh Windows 11 box into a clean, distraction-free dev workstation in one shot.

A set of PowerShell scripts that installs dev tools, applies opinionated Windows settings, and sets up WSL + Ubuntu through the required reboot. Nothing to clone, nothing to install first. Idempotent, so it's safe to re-run on an existing machine.

Open any PowerShell window — elevated or not — and run:

$url = 'https://raw.githubusercontent.com/microsoft/WindowsDeveloperConfig/main/src/windows-dev-config/bootstrap.ps1'
& ([scriptblock]::Create((irm $url))) -AllowUnsigned

If you're not already elevated, setup requests UAC consent before starting. It requests consent again when resuming after a reboot. Expect about 30 minutes on a clean machine.

-AllowUnsigned runs the source copy under src/ instead of the signed copy at the repository root.

⚠️ It will restart your machine, once. Enabling WSL needs a Windows optional feature that requires a restart. You get a 10-second warning, and a scheduled task resumes setup after you sign back in and accept the UAC prompt. Save your work before you start.

What you get
  • Dev tools: Windows Terminal, PowerShell 7, Git, GitHub CLI, GitHub Copilot CLI, VS Code, .NET SDK 10, Python 3.14 + uv, Node.js LTS + nvm, Coreutils for Windows, Windows App CLI, Oh My Posh, and PowerToys.
  • Terminal: PowerShell 7 as the default profile, Oh My Posh in your prompt, Cascadia Mono NF as the default font, and a GitHub Copilot profile in the dropdown.
  • Windows settings: Dark theme, Developer Mode, Sudo, long paths, File Explorer defaults, Start/Search cleanup, Do Not Disturb, widgets off, and Edge policies.
  • WSL: WSL platform + Ubuntu, including the restart and the automatic resume afterwards.

Full details — every setting it changes, how to undo them, and troubleshooting: windows-dev-config/README.md.


🐧 WSL Comfort

Also known as Comfort Shell. An interactive setup for a polished Windows + WSL shell environment.

WSL Comfort stands apart. It supports both interactive and non-interactive modes, and lets you pick and choose individual components. The Windows side handles WSL, the distro, the Cascadia Code Nerd Font, and a themed Windows Terminal profile. The Linux side runs inside the distro and configures the shell itself.

.\wsl-comfort\install.ps1

Interactive by default. Use -NonInteractive for unattended runs; the bootstrap also takes --minimal for a smaller setup. The Linux half is standalone, so you can copy comfort-shell-bootstrap.sh onto any Ubuntu host and run it directly.

What you can pick
  • Your choice of shell: zsh or bash.
  • Optional Starship prompt.
  • Optional modern CLI tools: fzf, rg, fd, bat, eza, zoxide, jq.
  • Optional clipboard and open shims (pbcopy, pbpaste, open).
  • Optional Homebrew.
  • Optional Git defaults.
  • A themed Windows Terminal profile using Cascadia Code Nerd Font.

Full details: wsl-comfort/readme.md.


🧪 Single-language workloads

Just want one toolchain? Pick a row. Each workload ships a configuration.winget file plus a matching install.ps1 shim that applies it and refreshes PATH in the current session.

Workload Installs Run
TypeScript Node.js LTS + global typescript winget configure -f .\Workloads\typescript\configuration.winget --accept-configuration-agreements --disable-interactivity
PHP PHP 8.5 winget configure -f .\Workloads\php\configuration.winget --accept-configuration-agreements --disable-interactivity
.NET .NET SDK 10 winget configure -f .\Workloads\dotnet\configuration.winget --accept-configuration-agreements --disable-interactivity
Go Go (rolling) winget configure -f .\Workloads\go\configuration.winget --accept-configuration-agreements --disable-interactivity
Java Microsoft Build of OpenJDK 25 LTS winget configure -f .\Workloads\java\configuration.winget --accept-configuration-agreements --disable-interactivity
Rust Rust stable via rustup winget configure -f .\Workloads\rust\configuration.winget --accept-configuration-agreements --disable-interactivity
Python Python 3.14 + uv winget configure -f .\Workloads\python\configuration.winget --accept-configuration-agreements --disable-interactivity
SQL Lightweight SQL Developer: SQL Server + sqlcmd + VS Code extension winget configure -f .\Workloads\sql\configuration.winget --accept-configuration-agreements --disable-interactivity
PowerShell PowerShell 7 + VS Code PowerShell extensions + PSScriptAnalyzer settings winget configure -f .\Workloads\powershell\configuration.winget --accept-configuration-agreements --disable-interactivity
WinForms .NET SDK 10 + Windows Forms desktop workload winget configure -f .\Workloads\winforms\configuration.winget --accept-configuration-agreements --disable-interactivity
WinUI 3 .NET SDK 10 + Visual Studio Community + Windows App SDK / WinUI 3 + WinAppCLI winget configure -f .\Workloads\winui\configuration.winget --accept-configuration-agreements --disable-interactivity

Want the PATH refresh in your current shell? Use the matching shim instead of calling winget configure directly:

.\Workloads\python\install.ps1

Heads up: WinForms and WinUI 3 pull down several gigabytes of Visual Studio components. Fine on a real workstation, painful on a small VM.


🎨 Command Palette extension (coming soon)

A PowerToys Command Palette extension lives under src/future/cmdpal/. It reads the same flow list as the rest of the repo and surfaces every flow as a launchable entry, so you don't have to remember which configuration.winget to point winget at.

See src/future/cmdpal/README.md for build and install instructions.


🩺 Troubleshooting

"Unrecognized command: configure"

Run winget configure --enable. If winget configure is still not recognized after that, Workloads/_common/assert-winget-configure.ps1 tells you whether App Installer is too old, policy has disabled configuration, or something else needs fixing.

winget configure fails with "internal error" / error code -2146233079

This usually means the Microsoft Visual C++ Redistributable is missing — winget configure depends on it when invoked from a non-elevated environment. Install it once with the command for your architecture, then re-run:

# x64:
winget install Microsoft.VCRedist.2015+.x64

# ARM64:
winget install Microsoft.VCRedist.2015+.arm64

See aka.ms/vcredist for the standalone installer. The repo's Workloads/_common/enable-winget-configure.ps1 script also installs it automatically as part of enabling winget configure.

A workload says it succeeded but python / node / the tool isn't on PATH

Open a new terminal, or run the matching install.ps1 shim to refresh PATH in the current session.

Windows Dev Config rebooted the machine and looks stuck

It registered a scheduled task named WindowsDevConfigResume, so the run picks itself back up about 30 seconds after you sign back in. A window opens on its own and finishes the WSL setup. If nothing appears after a couple of minutes, run the one-liner again — it's safe to re-run and skips everything already done. More detail in windows-dev-config/README.md.

Comfort Shell bootstrap fails because WSL is missing

Run .\wsl-comfort\install.ps1 on the Windows side instead. It installs WSL first.

WSL install fails with wsl --install ... failed with exit code -1

WSL needs hardware virtualization available to the OS. Two common root causes:

  • On bare metal: virtualization (VT-x / AMD-V) is disabled in BIOS/UEFI. Reboot into firmware settings, enable it, save, and reboot back into Windows. The exact label varies by vendor — check your motherboard or laptop manufacturer's documentation if you can't find it.

  • Inside a VM: the host hasn't exposed nested virtualization to the guest. For a Hyper-V host, run this from an elevated PowerShell session on the host (with the guest VM powered off):

    Set-VMProcessor -VMName <VM_NAME> -ExposeVirtualizationExtensions $true

    Other hypervisors have their own equivalent settings — check your hypervisor's documentation.


🐛 Reporting issues

Hit a bug, a stale doc, or a setup that fails on your machine? Open an issue at github.com/microsoft/WindowsDeveloperConfig/issues. Include your Windows build (winver), the exact command you ran, and the failing output. This helps us triage faster.


❤️ Contributing

Contributions of all kinds are welcome: bug reports, doc fixes, new workloads, voice-and-tone tweaks. Start with CONTRIBUTING.md, then read src/docs/development.md for the CI matrix, the "how to add a language" walkthrough, and how the sign pipeline works.

Note on the repo layout: the src/ tree is the source of truth. The top-level windows-dev-config/, Workloads/, and wsl-comfort/ folders are Authenticode-signed release copies regenerated by the sign pipeline, so please don't edit them directly. Full details in src/docs/development.md.

The single source of truth for every flow (paths, build/run commands, ids, language metadata) is src/manifest.yml. The Command Palette extension, the CI harness, and the per-flow shims all read from it, so keep it in sync when you add or rename a flow.

About

Automate the setup and configuration of your Windows development environment.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages