Setting up a fresh Windows 11 install used to mean 3 hours of clicking Next, Next, Finish. Now it takes 15 minutes. Here's the modern workflow — every command, every config file, every app — for a 2026 setup.
TL;DR — the 4-step workflow
- Boot OOBE, sign in, finish initial Windows setup (5 min)
- Open Terminal as Admin → paste a single winget import command (10 min auto)
- Run a 30-line PowerShell setup script for dotfiles + configs (1 min)
- Reboot, you're done
Total wall-clock: ~20 minutes. You'll spend more time waiting on Windows Update than on apps.
Step 1 — OOBE essentials (skip the bloat)
When Windows 11 first boots, you'll see the Out-of-Box Experience. Recommendations:
- Region: pick your real one (controls Store + time zone)
- Network: skip if you want a local account (see below)
- Account type: Microsoft Account is required by default on Win 11 Home. Workaround: at the network screen, press Shift+F10 → type
oobe\bypassnro→ Enter. Computer reboots, now offers "I don't have internet" → local account. - Telemetry settings: turn everything to "Required" minimum
- Privacy bundle: skip Cortana, OneDrive auto-backup, advertising ID
When you reach the desktop, install Windows Updates first (Settings → Windows Update → Check for updates). Reboot, then repeat until clean. This usually takes 10-20 minutes on a current image.
Step 2 — Open Terminal as Administrator
Press Win + X → click Terminal (Admin). If that menu item isn't there yet:
- Press Win + S, search "Terminal"
- Right-click → Run as administrator
Verify winget works:
winget --version
You should see v1.11.x or later. If not, see How to install winget on Windows 10 (works for Windows 11 too).
Step 3 — The one-command install
Pick from one of three approaches based on your setup type:
Approach A — Use a winget.tech bundle (fastest)
Pre-built bundles cover common roles. Pick one and copy the install command from its page:
- Developer — VS Code, Git, Node, Docker, Terminal, PowerShell, GitHub CLI…
- Gaming PC — Steam, Discord, OBS, Epic Games, GPU tools
- Office — Chrome, Slack, Zoom, password manager…
- Designer — Figma, GIMP, Inkscape, Krita, Blender…
Each bundle page has a one-click Add all to script button that gives you a ready-to-run install command.
Approach B — Build your own with the visual picker
- Go to winget.tech/browse
- Search and click + to add each app you want
- Hit Generate script (top right)
- Pick Batch (.bat) for double-click installs, or PowerShell for scripting
- Download or Copy, run in elevated Terminal
You can also pick Winget Import (.json) to save the list for future reuse.
Approach C — Use the example "dev machine" list below
Here's a battle-tested 18-app dev setup. Save as dev.json:
{
"$schema": "https://aka.ms/winget-packages.schema.2.0.json",
"CreationDate": "2026-05-29T00:00:00.000-00:00",
"Sources": [{
"Packages": [
{ "PackageIdentifier": "Microsoft.VisualStudioCode" },
{ "PackageIdentifier": "Microsoft.WindowsTerminal" },
{ "PackageIdentifier": "Microsoft.PowerShell" },
{ "PackageIdentifier": "Microsoft.PowerToys" },
{ "PackageIdentifier": "Git.Git" },
{ "PackageIdentifier": "GitHub.cli" },
{ "PackageIdentifier": "OpenJS.NodeJS.LTS" },
{ "PackageIdentifier": "Python.Python.3.13" },
{ "PackageIdentifier": "Docker.DockerDesktop" },
{ "PackageIdentifier": "Microsoft.WindowsSubsystemForLinux" },
{ "PackageIdentifier": "BurntSushi.ripgrep.MSVC" },
{ "PackageIdentifier": "sharkdp.fd" },
{ "PackageIdentifier": "Starship.Starship" },
{ "PackageIdentifier": "voidtools.Everything" },
{ "PackageIdentifier": "Google.Chrome" },
{ "PackageIdentifier": "Mozilla.Firefox" },
{ "PackageIdentifier": "Discord.Discord" },
{ "PackageIdentifier": "Spotify.Spotify" }
],
"SourceDetails": {
"Argument": "https://cdn.winget.microsoft.com/cache",
"Identifier": "Microsoft.Winget.Source_8wekyb3d8bbwe",
"Name": "winget",
"Type": "Microsoft.PreIndexed.Package"
}
}],
"WinGetVersion": "1.11.0"
}
Run:
winget import -i dev.json --accept-package-agreements --accept-source-agreements --ignore-unavailable
Wait 10–15 minutes. Walk away.
Step 4 — Configure Windows 11 itself
While installs run in the background, tune Windows settings:
Mandatory tweaks
Show file extensions and hidden items:
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" HideFileExt 0
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Hidden 1
Stop-Process -Name explorer -Force
Move Start to the left (Windows 11 default is centre):
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" TaskbarAl 0
Stop-Process -Name explorer -Force
Disable web search in Start menu:
Set-ItemProperty -Path "HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer" DisableSearchBoxSuggestions 1 -Type DWord -Force
Security baseline
# Enable controlled folder access (anti-ransomware)
Set-MpPreference -EnableControlledFolderAccess Enabled
# Enable cloud-delivered protection
Set-MpPreference -MAPSReporting Advanced -SubmitSamplesConsent SendSafeSamples
# BitLocker on system drive (if Pro / Enterprise)
Enable-BitLocker -MountPoint "C:" -EncryptionMethod XtsAes256 -UsedSpaceOnly -RecoveryPasswordProtector
Power & sleep
# Never sleep on AC, sleep after 15 min on battery
powercfg /change standby-timeout-ac 0
powercfg /change standby-timeout-dc 15
Step 5 — Dotfiles + profile
After install finishes, set up PowerShell profile, Terminal config, Git, SSH keys.
PowerShell profile ($PROFILE):
# Open profile for editing
notepad $PROFILE
Paste:
# Aliases
Set-Alias ll Get-ChildItem
Set-Alias g git
Set-Alias k kubectl
# Prompt — Starship
Invoke-Expression (&starship init powershell)
# Smart upgrade everything
function up { winget upgrade --all --include-unknown --accept-package-agreements --accept-source-agreements }
# cd helpers
function .. { Set-Location .. }
function ... { Set-Location ../.. }
Windows Terminal — open Settings → Open JSON file, paste your settings.json from a previous machine or a starter template.
Git — global config:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global pull.rebase true
SSH key — generate + add to GitHub:
ssh-keygen -t ed25519 -C "you@example.com"
gh auth login
gh ssh-key add ~/.ssh/id_ed25519.pub --title "$env:COMPUTERNAME"
Step 6 — Save your setup for next time
Once your machine is dialled in, export the install list:
winget export -o my-setup.json --include-versions
Save my-setup.json to OneDrive / a git repo. Next time you set up a machine:
winget import -i my-setup.json
Done — you've turned your machine setup into version-controlled code.
Common pitfalls
Docker Desktop won't start after install — WSL 2 isn't enabled. Run wsl --install once, reboot, then Docker works.
VS Code "system install" detected — winget installs the User install by default. If you want System, force it: winget install --id Microsoft.VisualStudioCode --scope machine.
Steam wants to update on first launch — normal. winget installs the bootstrapper; Steam itself self-updates.
Some apps installed but no Start Menu shortcut — they used per-user install under %LOCALAPPDATA%\Programs. Search Start by name, or check that folder manually.
What's next?
- Winget commands cheatsheet → — every command
- How to use winget import → — deep dive into the JSON format
- How to update all apps with winget upgrade → — keep current
- Pre-made bundles → — Developer, Gaming, Office, Designer starter packs
Got a setup workflow you love? Send it in — we feature the best ones.
