Power User Software Inventory for Windows
A curated catalog of Windows 11 power-user software with winget install commands for every entry — browsers, terminals, editors, dev tools, and utilities.
This guide is the curated Windows software installation list that pairs with everything else on this site — privacy-respecting browsers, terminals, productivity tools, sync clients, and utilities, all installable via winget or as portable apps. It assumes a debloated Windows base from Tiny 11 vs Atlas OS vs ReviOS, and the Dropbox/Mega/KDE Connect entries are the same three apps that make cross-OS sync work in the dual-boot guide.
Quick Start
If you want to install the essentials right now:
# Run in PowerShell (as Administrator for some packages)
winget install --id Microsoft.PowerToys -e
winget install --id Mozilla.Firefox -e
winget install --id Microsoft.VisualStudioCode -e
winget install --id Git.Git -e
winget install --id Microsoft.WindowsTerminal -e
winget install --id 7zip.7zip -e
winget install --id Notepad++.Notepad++ -e
winget install --id AutoHotkey.AutoHotkey -e
That covers 80% of a power user’s daily needs. Below is the full curated catalog.
Prerequisites
Update Windows Package Manager
winget ships with Windows 11 and Windows 10 (1809+). It updates itself through the Microsoft Store (App Installer package), so there is usually nothing to do. If you must nudge it:
# Update winget itself (App Installer)
winget upgrade --id Microsoft.AppInstaller -e
Note: the winget repository version can trail your installed Store version — a “no applicable upgrade” result here is normal and means you’re already current.
Use --id and -e Flags
For reproducible installs, always use exact IDs with the -e (exact match) flag:
# Good - exact ID, version-locked
winget install --id Mozilla.Firefox -e
# Bad - name can match multiple packages
winget install Firefox
To find a package ID:
winget search "Firefox"
# Returns: Mozilla.Firefox Firefox ...
AI & Agentic Systems
Tools for autonomous coding, research, and AI-assisted workflows.
| Tool | Install | Purpose |
|---|---|---|
| Claude Code | winget install --id Anthropic.ClaudeCode -e | Agentic CLI for coding and research (packaged on winget, verified) |
| GitHub Copilot | VS Code extension (see below) | AI pair programmer in your editor |
| Ollama | winget install --id Ollama.Ollama -e | Run open LLMs locally (Llama, Mistral, etc.) |
| LM Studio | winget install --id ElementLabs.LMStudio -e | GUI for running local LLMs |
| Jan | winget install --id Jan.Jan -e | ChatGPT-like desktop client for local models |
VS Code AI Extensions
# GitHub Copilot (paid subscription)
code --install-extension GitHub.copilot
code --install-extension GitHub.copilot-chat
# Windsurf Plugin (formerly Codeium) — free autocomplete tier
# (the extension ID is still Codeium.codeium; the vendor lists it as maintenance mode)
code --install-extension Codeium.codeium
# Continue.dev (open source AI assistant)
code --install-extension Continue.continue
Core Development Environment
Languages, runtimes, and version managers.
| Tool | Install | Purpose |
|---|---|---|
| Git | winget install --id Git.Git -e | Version control |
| GitHub Desktop | winget install --id GitHub.GitHubDesktop -e | GUI for Git |
| Node.js (LTS) | winget install --id OpenJS.NodeJS.LTS -e | JavaScript runtime |
| Python 3.12 | winget install --id Python.Python.3.12 -e | Python interpreter |
| uv | pip install uv or winget install --id astral-sh.uv -e | Fast Python package manager |
| Rust | winget install --id Rustlang.Rustup -e | Rust toolchain |
| Go | winget install --id GoLang.Go -e | Go toolchain |
| Java JDK 21 | winget install --id EclipseAdoptium.Temurin.21.JDK -e | Java development kit |
| .NET SDK 8 | winget install --id Microsoft.DotNet.SDK.8 -e | .NET development |
Version Managers
For languages where you need multiple versions, fnm (Fast Node Manager) manages Node releases and is faster than nvm:
winget install --id Schniz.fnm -e
Editors & IDEs
The primary interfaces for code and document editing.
| Tool | Install | Purpose |
|---|---|---|
| VS Code | winget install --id Microsoft.VisualStudioCode -e | Primary extensible IDE |
| Zed | winget install --id ZedIndustries.Zed -e | High-performance, memory-efficient editor |
| Notepad++ | winget install --id Notepad++.Notepad++ -e | Lightweight text editor (replaces Notepad) |
| Sublime Text | winget install --id SublimeHQ.SublimeText.4 -e | Fast commercial editor |
| Neovim | winget install --id Neovim.Neovim -e | Modal terminal editor |
| Cursor | winget install --id Anysphere.Cursor -e | AI-first VS Code fork |
| Windsurf | winget install --id Codeium.Windsurf -e | AI-powered VS Code fork |
VS Code Essential Extensions
# Language & tooling
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension EditorConfig.EditorConfig
# Git
code --install-extension eamodio.gitlens
# Containers & remote
code --install-extension ms-vscode-remote.remote-containers
code --install-extension ms-azuretools.vscode-docker
# Markdown
code --install-extension yzhang.markdown-all-in-one
code --install-extension davidanson.vscode-markdownlint
# Productivity
code --install-extension usernamehw.errorlens
code --install-extension christian-kohler.path-intellisense
Data Analysis & Science
Statistical computing, data science, and research tools.
| Tool | Install | Purpose |
|---|---|---|
| R 4.x | Download from cran.r-project.org/bin/windows/base/ | Statistical computing |
| RStudio | winget install --id Posit.RStudio -e | R IDE |
| Python (via uv) | See above | Data science alternative |
| JupyterLab | pip install jupyterlab | Notebook environment |
| Stata | Official installer from stata.com (license required — no winget package exists) | Professional statistics |
| SPSS | IBM installer only | IBM statistics |
| Julia | winget install --id Julialang.Julia -e | High-performance scientific computing |
System Utilities & Optimization
Tools for monitoring, backup, and system management.
| Tool | Install | Purpose |
|---|---|---|
| PowerToys | winget install --id Microsoft.PowerToys -e | Microsoft power user toolbox |
| 7-Zip | winget install --id 7zip.7zip -e | Archive manager (replaces built-in) |
| Everything | winget install --id voidtools.Everything -e | Instant file search (like macOS Spotlight) |
| QuickLook | winget install --id QL-Win.QuickLook -e | macOS-style Spacebar file preview |
| PDFgear | winget install --id PDFgear.PDFgear -e | Free PDF reading, editing, and conversion |
| Sysinternals Suite | winget install --id Microsoft.Sysinternals.Suite -e | Advanced system tools (ID was renamed from Microsoft.SysinternalsSuite) |
| BleachBit | winget install --id BleachBit.BleachBit -e | System cleaner (CCleaner alternative) |
| HWMonitor | winget install --id CPUID.HWMonitor -e | Hardware temperature monitoring |
| CrystalDiskInfo | winget install --id CrystalDewWorld.CrystalDiskInfo -e | Disk health monitoring |
| CPU-Z | winget install --id CPUID.CPU-Z -e | Detailed hardware info |
| GPU-Z | winget install --id TechPowerUp.GPU-Z -e | GPU detailed info |
| Revo Uninstaller | winget install --id RevoUninstaller.RevoUninstaller -e | Thorough app removal |
| Eyes Guard | winget install --id Avestura.EyesGuard -e | Screen-time reminders for eye rest (EyeLeo is a solid alternative) |
Backup & Recovery
| Tool | Install | Purpose |
|---|---|---|
| Veeam Agent for Windows (Free) | Download from veeam.com | Full system image backup |
| Clonezilla | Download from clonezilla.org | Open-source disk imaging/cloning (bootable) |
| Rescuezilla | Download from rescuezilla.com | GUI frontend for Clonezilla images (bootable, no winget package) |
| File History | Built into Windows | Continuous file backup |
Note: Macrium Reflect Free was discontinued in January 2024 (no longer distributed or patched). Legacy copies found on third-party mirrors receive no security fixes — prefer the tools above.
Internet & Communication
Browsers, email, messaging, and remote access.
| Tool | Install | Purpose |
|---|---|---|
| Firefox | winget install --id Mozilla.Firefox -e | Privacy-respecting browser |
| Google Chrome | winget install --id Google.Chrome -e | Mainstream browser |
| Brave | winget install --id Brave.Brave -e | Chromium with built-in ad blocking |
| Thunderbird | winget install --id Mozilla.Thunderbird -e | Email client |
| Zoom | winget install --id Zoom.Zoom -e | Video conferencing |
| Discord | winget install --id Discord.Discord -e | Community chat |
| Slack | winget install --id SlackTechnologies.Slack -e | Work chat |
| Signal | winget install --id OpenWhisperSystems.Signal -e | Private messaging |
| Telegram | winget install --id Telegram.TelegramDesktop -e | Cloud messaging |
| Microsoft Teams (personal) | winget install --id Microsoft.Teams -e | Microsoft’s chat |
| Mullvad VPN | winget install --id MullvadVPN.MullvadVPN -e | Privacy VPN |
| Proton VPN | winget install --id Proton.ProtonVPN -e | Privacy VPN with free tier |
| qBittorrent | winget install --id qBittorrent.qBittorrent -e | BitTorrent client |
| LocalSend | winget install --id LocalSend.LocalSend -e | Cross-device file sharing |
| RustDesk | Download from rustdesk.com | Self-hosted remote desktop (no winget package currently) |
| KDE Connect | winget install --id KDE.KDEConnect -e | Cross-device clipboard, notifications, file sharing (pairs with phone and Linux) |
Cloud Storage (CLI)
For automated sync, use the official CLI tools:
| Tool | Install | Purpose |
|---|---|---|
| rclone | winget install --id Rclone.Rclone -e | Sync any cloud storage (Google Drive, Dropbox, S3, etc.) |
| AWS CLI | winget install --id Amazon.AWSCLI -e | Amazon Web Services |
| Azure CLI | Download from aka.ms/installazurecliwindows | Microsoft Azure |
| Google Cloud CLI | Download from cloud.google.com/sdk | Google Cloud Platform |
Cloud Storage (Desktop Sync)
Desktop clients with selective sync and “available offline” support. These are the same three apps that make cross-OS sync work in the dual-boot guide — install the equivalent clients on LMDE to keep your synced folders accessible from both operating systems.
| Tool | Install | Purpose |
|---|---|---|
| Dropbox | winget install --id Dropbox.Dropbox -e | File sync with selective offline folders |
| MEGAsync | winget install --id Mega.MEGASync -e | End-to-end encrypted sync with selective folders (note the capital S — exact match is case-sensitive) |
Tip for dual-boot setups: always relocate the local sync folder to a shared NTFS partition (not C:) through each app’s official Move feature. Manual drag-and-drop in File Explorer breaks the app’s tracking and triggers a full re-download. Any folder you want to read from LMDE must be set to available offline in Windows — online-only files are tied to Windows’ proprietary cloud-filter driver and won’t show up on the Linux side.
Media & Entertainment
Audio, video, image, and creative tools.
| Tool | Install | Purpose |
|---|---|---|
| VLC | winget install --id VideoLAN.VLC -e | Universal media player |
| mpv | winget install --id shinchiro.mpv -e | Minimalist video player (power user favorite) |
| Spotify | winget install --id Spotify.Spotify -e | Music streaming |
| Audacity | winget install --id Audacity.Audacity -e | Audio editor |
| HandBrake | winget install --id HandBrake.HandBrake -e | Video transcoder |
| OBS Studio | winget install --id OBSProject.OBSStudio -e | Recording and streaming |
| Kdenlive | winget install --id KDE.Kdenlive -e | Video editor (Linux-style on Windows) |
| GIMP | winget install --id GIMP.GIMP -e | Image editor (Photoshop alternative) |
| Inkscape | winget install --id Inkscape.Inkscape -e | Vector graphics (Illustrator alternative) |
| Krita | winget install --id KDE.Krita -e | Digital painting |
| ShareX | winget install --id ShareX.ShareX -e | Screenshot and recording |
| ImageGlass | winget install --id DuongDieuPhap.ImageGlass -e | Image viewer (replaces Photos) |
Fonts
For development work, monospace fonts matter. The winget catalog no longer carries the NerdFonts.* or Microsoft.CascadiaCode packages — what remains:
# Nerd-patched JetBrains Mono (verified on winget)
winget install --id DEVCOM.JetBrainsMonoNerdFont -e
# Hack typeface (regular, not Nerd-patched)
winget install --id SourceFoundry.HackFonts -e
For everything else, grab the installers directly from GitHub releases and run them (font installs are silent and per-user):
- Cascadia Code: github.com/microsoft/cascadia-code/releases (
CascadiaCode-*.zip→ right-clickttf→ Install) - Nerd Font patches of FiraCode / Hack / others: github.com/ryanoasis/nerd-fonts/releases
Input & Localization
Multilingual Input
| Tool | Install | Purpose |
|---|---|---|
| Microsoft IME | Built into Windows 11 | Multilingual typing (Chinese, Japanese, Korean) |
| Avro Keyboard | winget install --id OmicronLab.Avro -e | Bangla phonetic input (packaged on winget, verified) |
| Google Input Tools | Download from google.com/inputtools | Many languages |
| KeyMan | Download from keyman.com | 1,000+ keyboards |
Bangla Fonts (PowerShell Installer)
Avro covers typing; this script installs the fonts themselves. It pulls 20 of the most-used Bangla fonts — Unicode standards (SolaimanLipi, Kalpurush, Siyam Rupali), government/formal (Nikosh), print-era classics (SutonnyMJ, AdorshoLipi, Chitra MJ), and modern Google fonts (Noto Sans Bengali, Hind Siliguri) — from pinned GitHub raw URLs. All 20 URLs verified live August 2026.
Run in an administrator PowerShell (the script checks and pauses if you forgot):
# ==========================================
# BANGLA FONT INSTALLER (20 fonts, verified URLs)
# ==========================================
# 1. Admin check (pauses instead of closing the window)
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
Write-Host "`nERROR: Run PowerShell as Administrator to install fonts.`n" -ForegroundColor Red
Read-Host "Press Enter to exit..."
Exit
}
# 2. TLS 1.2 (older PowerShell defaults get rejected by GitHub)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# 3. Verified raw font URLs (case-sensitive and exact)
$fonts = @(
# --- Modern Unicode ---
@{ Name = "SolaimanLipi"; Url = "https://raw.githubusercontent.com/shiftenterdev/bangla-font/master/SolaimanLipi.ttf"; FileName = "SolaimanLipi.ttf" }
@{ Name = "Kalpurush"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/kalpurush.ttf"; FileName = "kalpurush.ttf" }
@{ Name = "Siyam Rupali"; Url = "https://raw.githubusercontent.com/potasiyam/Siyam-Rupali/master/Siyamrupali_1_070ship.ttf"; FileName = "SiyamRupali.ttf" }
@{ Name = "Lohit Bengali"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/Lohit_14-04-2007.ttf"; FileName = "Lohit_14-04-2007.ttf" }
# --- Official & formal ---
@{ Name = "Nikosh"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/Nikosh.ttf"; FileName = "Nikosh.ttf" }
@{ Name = "NikoshBAN"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/NikoshBAN.ttf"; FileName = "NikoshBAN.ttf" }
@{ Name = "Mukti Narrow"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/muktinarrow.ttf"; FileName = "muktinarrow.ttf" }
# --- Print & legacy (ANSI/Bijoy era) ---
@{ Name = "SutonnyMJ"; Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/SutonnyMJ.ttf"; FileName = "SutonnyMJ.ttf" }
@{ Name = "AdorshoLipi"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/AdorshoLipi_20-07-2007.ttf"; FileName = "AdorshoLipi.ttf" }
@{ Name = "Chitra MJ Bold"; Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Chitra%20MJ%20Bold.ttf"; FileName = "ChitraMJBold.ttf" }
# --- Stylized & creative ---
@{ Name = "BenSen"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/BenSen.ttf"; FileName = "BenSen.ttf" }
@{ Name = "BenSen Handwriting"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/BenSenHandwriting.ttf"; FileName = "BenSenHandwriting.ttf" }
@{ Name = "Amar Bangla"; Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Amar%20Bangla.ttf"; FileName = "AmarBangla.ttf" }
@{ Name = "3D Sonar Bangla"; Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/3D%20Sonar%20Bangla.ttf"; FileName = "3DSonarBangla.ttf" }
@{ Name = "Aparajita"; Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Aparajita.ttf"; FileName = "Aparajita.ttf" }
# --- Modern clean & corporate ---
@{ Name = "Hind Siliguri"; Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Hind%20Siliguri.ttf"; FileName = "HindSiliguri.ttf" }
@{ Name = "Robi"; Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Robi.ttf"; FileName = "Robi.ttf" }
@{ Name = "Akaash"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/akaashnormal.ttf"; FileName = "akaashnormal.ttf" }
@{ Name = "Mitra"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/mitra.ttf"; FileName = "mitra.ttf" }
@{ Name = "Sagar"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/sagarnormal.ttf"; FileName = "sagarnormal.ttf" }
)
$fontFolder = "C:\Windows\Fonts"
$tempFolder = "$env:TEMP\BanglaFonts"
$registryPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
if (-not (Test-Path $tempFolder)) { New-Item -ItemType Directory -Path $tempFolder | Out-Null }
$successCount = 0
foreach ($font in $fonts) {
$tempPath = Join-Path $tempFolder $font.FileName
$destPath = Join-Path $fontFolder $font.FileName
$nameInRegistry = "$($font.Name) (TrueType)"
Write-Host "-> Fetching $($font.Name)... " -NoNewline
# Skip if already installed (file or registry entry exists)
if ((Test-Path $destPath) -or (Get-ItemProperty -Path $registryPath -Name $nameInRegistry -ErrorAction SilentlyContinue)) {
Write-Host "Already installed. Skipped." -ForegroundColor DarkGray
continue
}
try {
Invoke-WebRequest -Uri $font.Url -OutFile $tempPath -UseBasicParsing -ErrorAction Stop
# Guard against HTML error pages saved as .ttf
if ((Get-Item $tempPath).Length -lt 10000) { throw "Downloaded file too small - URL may be broken" }
Copy-Item $tempPath -Destination $destPath -Force
New-ItemProperty -Path $registryPath -Name $nameInRegistry -Value $font.FileName -PropertyType String -Force | Out-Null
Write-Host "Installed!" -ForegroundColor Yellow
$successCount++
} catch {
Write-Host "Failed! ($($_.Exception.Message))" -ForegroundColor Red
}
}
Remove-Item -Path $tempFolder -Recurse -Force | Out-Null
Write-Host "`nComplete: $successCount new fonts installed. Restart open apps to load them.`n" -ForegroundColor Cyan
Notes from real use:
- GitHub raw URLs are case-sensitive and exact —
BenSen.ttf≠Bensen.ttf, and some fonts carry date stamps (AdorshoLipi_20-07-2007.ttf). A 404 here means the filename drifted; browse the repo to find the new name. - Vrinda and Sonar Bangla ship with Windows’ Bangla language support, so they’re not in the list.
- To add more fonts, append another
@{ Name = ...; Url = ...; FileName = ... }entry with a direct.ttfURL.
Windows-Specific Input Tweaks
After installing AutoHotkey v2, remap Caps Lock to Ctrl:
; capslock_to_ctrl.ahk
#Requires AutoHotkey v2.0
CapsLock::Ctrl
Terminal & Shell
Modern Windows terminals beat Command Prompt and Windows PowerShell 5.1.
| Tool | Install | Purpose |
|---|---|---|
| Windows Terminal | winget install --id Microsoft.WindowsTerminal -e | Modern terminal (tabs, splits, GPU rendering) |
| PowerShell 7 | winget install --id Microsoft.PowerShell -e | Modern cross-platform shell |
| Oh My Posh | winget install --id JanDeDobbeleer.OhMyPosh -e | Terminal prompt theming |
| Nerd Font | See Media section above | Icons in terminal |
| fzf | winget install --id junegunn.fzf -e | Fuzzy file finder |
| zoxide | winget install --id ajeetdsouza.zoxide -e | Smarter cd command |
| bat | winget install --id sharkdp.bat -e | Syntax-highlighted cat |
| eza | winget install --id eza-community.eza -e | Modern ls replacement |
| fd | winget install --id sharkdp.fd -e | Fast find alternative |
| ripgrep | winget install --id BurntSushi.ripgrep.MSVC -e | Fast grep alternative |
| lazygit | winget install --id JesseDuffield.lazygit -e | Git TUI |
| delta | winget install --id dandavison.delta -e | Better git diff |
Productivity
| Tool | Install | Purpose |
|---|---|---|
| Obsidian | winget install --id Obsidian.Obsidian -e | Markdown knowledge base |
| Logseq | winget install --id Logseq.Logseq -e | Outliner-style notes |
| Zotero | winget install --id DigitalScholar.Zotero -e | Reference manager |
| Calibre | winget install --id calibre.calibre -e | Ebook library manager |
| KeePassXC | winget install --id KeePassXCTeam.KeePassXC -e | Local password manager |
| Bitwarden | winget install --id Bitwarden.Bitwarden -e | Cloud password manager |
| 1Password | winget install --id AgileBits.1Password -e | Paid password manager |
| ShareX | (see Media) | Screenshot tool |
| Greenshot | winget install --id Greenshot.Greenshot -e | Screenshot alternative |
Windows-Specific Power User Tools
These make Windows behave more like a real developer OS:
| Tool | Install | Purpose |
|---|---|---|
| PowerToys | (see Utilities) | Includes FancyZones, PowerRename, Keyboard Manager |
| EarTrumpet | winget install --id File-New-Project.EarTrumpet -e | Per-app volume control |
| AutoHotkey v2 | winget install --id AutoHotkey.AutoHotkey -e | Keyboard automation, custom hotkeys |
| Windows Subsystem for Linux | wsl --install | Run Linux inside Windows |
Configure WSL
wsl --install -d Ubuntu
wsl --install defaults to WSL 2 and requires one reboot. Add -d Ubuntu (or any distro name) to pick the distribution in the same step.
Setting Up a Fresh Windows Workstation (Under 1 Hour)
If you’ve just installed a debloated Windows and want to get to a productive state fast, run this single script.
Important: winget install accepts exactly one package per invocation — you cannot stack multiple --id flags on one command. The loop below is the correct pattern:
# Run as Administrator in PowerShell 7
# 1. Refresh package sources
winget source update
# 2. Install everything (one winget call per package, silent, no popups)
$packages = @(
'Microsoft.PowerToys', # utilities
'7zip.7zip',
'voidtools.Everything',
'Notepad++.Notepad++',
'Microsoft.WindowsTerminal',
'Microsoft.PowerShell', # PowerShell 7
'AutoHotkey.AutoHotkey',
'Mozilla.Firefox', # browsers
'Google.Chrome',
'Microsoft.VisualStudioCode', # editor
'Git.Git', # development tools
'OpenJS.NodeJS.LTS',
'Python.Python.3.12',
'VideoLAN.VLC', # media
'Spotify.Spotify',
'DEVCOM.JetBrainsMonoNerdFont' # fonts
)
foreach ($id in $packages) {
Write-Host "Installing $id..." -ForegroundColor Cyan
winget install --id $id -e --silent `
--accept-package-agreements --accept-source-agreements `
--disable-interactivity
if ($LASTEXITCODE -ne 0) {
Write-Warning "$id failed (exit $LASTEXITCODE) - continuing with the rest"
}
}
# 3. Install WSL (for Linux tools; requires reboot)
wsl --install
# 4. Configure PowerShell profile
code $PROFILE
# Add:
# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\agnoster.omp.json" | Invoke-Expression
# Set-PSReadLineOption -PredictionSource History
# Import-Module Terminal-Icons
Write-Host "Setup complete! Restart your terminal." -ForegroundColor Green
Save this as setup.ps1 and run it on any new Windows machine.
Verify & Remove
# Everything winget can upgrade
winget upgrade
# Find an installed package by name (output is text — filter with Select-String)
winget list firefox
# Uninstall cleanly by exact ID
winget uninstall --id Mozilla.Firefox -e
Silent & Elevated Installs (No Popups)
For unattended installs and updates — no wizards, no UAC spam beyond one elevation, no interruptions:
# Run this from an ELEVATED PowerShell 7 session (right-click Terminal → Run as administrator)
winget install --id <Package.Id> -e `
--silent `
--accept-package-agreements `
--accept-source-agreements `
--disable-interactivity
What each flag does:
| Flag | Effect |
|---|---|
--silent / -s | Suppresses the installer’s own UI (uses NSIS /S, Inno /VERYSILENT, MSI quiet mode, etc.) |
-e | Exact ID match — prevents installing a similarly-named package |
--accept-package-agreements | Auto-accepts the package’s license |
--accept-source-agreements | Auto-accepts the source (winget/msstore) agreements |
--disable-interactivity | Fails fast instead of hanging on any interactive prompt |
Batch-upgrade everything at once:
# Review what would be upgraded first
winget upgrade
# Then apply all of it silently
winget upgrade --all --silent `
--accept-package-agreements --accept-source-agreements `
--disable-interactivity
Notes from real use:
- Run elevated. Machine-scoped installers need admin; without it you get one UAC prompt per package (or silent failures). One elevated terminal = zero mid-install prompts.
- Close running apps first. Installers for running apps (sync clients, download managers, editors) either wait for exit or abort in silent mode. Stop the process before upgrading.
- Some packages reject winget upgrades entirely (“No applicable upgrade found”). When that happens, download the official installer directly and run its silent switch yourself — NSIS uses
/S, Inno uses/VERYSILENT /NORESTART, MSIs use/qn. Always verify the SHA-256 against the manifest (winget show <id>) before executing. - MSIX/Store apps ignore
--silent(they’re always quiet) but may need the Store service running.
The Frozen-Update Maintenance Routine
This site’s dual-boot setup runs Windows with automatic updates disabled (services stopped via the Revision Tool) so work is never interrupted. That control comes with a responsibility: you are now the update scheduler. Budget 15–30 minutes once a month:
- Review pending app updates (safe, reversible):
winget source update winget upgrade # read the list first winget upgrade --all --silent --accept-package-agreements --accept-source-agreements --disable-interactivity - Check the OS servicing state occasionally (every 2–3 months): open
Settings → Windows Updateand let it scan manually. On this setup the update services are set to Manual, so a manual check still works — you decide when, and can reboot on your schedule. Skipping OS security patches indefinitely is the single riskiest part of a debloated setup. - Antivirus reality check: if your debloat removed Microsoft Defender rather than pausing it, “update virus definitions when I feel like it” isn’t possible — there is no engine to update. Verify with
Get-Service WinDefend. If absent, either re-enable Defender through your debloat tool periodically, or run a third-party AV you update on your own schedule. - Keep a changelog — note the date and packages after each pass, so a future breakage has a suspect list.
What Didn’t Work (and Why)
| Approach | Why It Failed |
|---|---|
Stacking multiple --id flags on one winget install command | winget takes exactly one package per invocation — use a loop or separate commands |
Typing a package ID with different casing under -e | Exact-match IDs are case-sensitive (Mega.MEGASync ≠ Mega.MEGAsync) — copy the ID from winget search output |
Trusting winget upgrade to cover every installed app | Some manifests report “No applicable upgrade found” forever; fall back to the vendor’s silent installer (see above) |
Official References
- winget Documentation
- winget Package Catalog — Community-curated package index
- PowerToys Features
- Windows Terminal Documentation
- AutoHotkey v2 Documentation
Related Guides
- Debloated Windows: Tiny 11 vs Atlas OS vs ReviOS — Choose your Windows 11 base
- Stata + VS Code Workflow on Windows — Development environment setup