wingetsetupwindows-11guidetutorial

Complete Fresh Windows 11 Setup with winget (2026 Edition)

From OOBE to fully-loaded Windows 11 in under 20 minutes. The 2026 guide: drivers, dotfiles, dev tools, security baseline, and one winget script that installs everything.

· 6 min read
Complete Fresh Windows 11 Setup with winget (2026 Edition)

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

  1. Boot OOBE, sign in, finish initial Windows setup (5 min)
  2. Open Terminal as Admin → paste a single winget import command (10 min auto)
  3. Run a 30-line PowerShell setup script for dotfiles + configs (1 min)
  4. 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

  1. Go to winget.tech/browse
  2. Search and click + to add each app you want
  3. Hit Generate script (top right)
  4. Pick Batch (.bat) for double-click installs, or PowerShell for scripting
  5. 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.

Skip the JSON wrangling
Use the visual picker at winget.tech to build install scripts in a browser. Save bundles to your account.
Browse 10,000+ packages →

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?

Got a setup workflow you love? Send it in — we feature the best ones.

Continue reading