A PowerToys Command Palette
extension that surfaces the developer flows defined in this repo's
manifest.yml. Pick a flow, hit Enter, and the extension
launches winget configure or a PowerShell-native setup entry point (Windows),
or wsl bash (Linux), in a new Windows Terminal tab.
DSC-backed flows launch through winget configure. PowerShell-native flows,
including the AI workloads, launch their windows.install script directly.
If the configuration subcommand is not wired up on the host, DSC-backed flows
cannot succeed. See the developer guide's
Prerequisites (Windows)
section for the three conditions that must hold (current App Installer, the
configuration feature enabled, and no blocking ADMX policy) and the
one-line smoke test. The shared preflight
Workloads/_common/assert-winget-configure.ps1
enforces this at runtime with an actionable error message.
The extension reads the same manifest.yml that drives CI. Each flow's UX
metadata (name, description, category, tags, icon, onboardingUrl,
dependsOn) plus its windows.configuration, windows.install, and
linux.install paths come
straight from that file — adding a flow there makes it appear in CmdPal
automatically.
The list view groups by category, with this priority order:
| Rank | Category | Notes |
|---|---|---|
| 0 | essentials |
Reserved for "you almost certainly want this" flows. |
| 1 | languages |
Language toolchains (typescript, python, dotnet, ...). |
| 2 | desktop |
Desktop frameworks on top of a language (winforms, winui). |
| 3 | (other / default) | Any unrecognized category sorts here. |
| 4 | user-experience |
OS-feel flows (common-adjustments, mac-comfort-shell, calm-os). |
| 4 | shell |
Legacy alias for user-experience. New flows should pick user-experience. |
Within a rank, flows sort alphabetically by category then by name.
If a flow declares dependsOn: [<id>, ...] in manifest.yml, the list
entry's subtitle gets a · Requires: <id> suffix. This is purely an
informational hint today — the extension still launches the chosen flow
independently. (Future: we may chain installs in the same Terminal tab.)
The extension keeps an optional config at
%LocalAppData%\QuickWingetSetup\config.json. Defaults are sane for a local
clone of this repo:
While WindowsDevSetupScripts is private, keep source: "local". Once the
repo is public, switch to "github" to pull straight from
raw.githubusercontent.com with no clone required.
cd cmdpal/QuickWingetSetup
dotnet restore .\QuickWingetSetup\QuickWingetSetup.csproj -r win-x64
dotnet build .\QuickWingetSetup\QuickWingetSetup.csproj -c Debug -r win-x64For a self-contained MSIX-ready Release build:
dotnet publish .\QuickWingetSetup\QuickWingetSetup.csproj -c Release -r win-x64 -p:Platform=x64The project targets net9.0-windows10.0.26100.0 and is AOT/trim friendly.
| Manifest field | What the extension does |
|---|---|
windows.configuration |
winget configure <path> in a new Windows Terminal tab, after a confirmation dialog |
windows.install without a configuration |
Runs the PowerShell setup entry point directly in a new Windows Terminal tab |
onboardingUrl |
Opens in the default browser via 📖 Official Docs action |
icon, name, description, ... |
Rendered on the list/detail pages |
If windows.configuration is omitted, the extension uses windows.install.
This supports PowerShell-native flows such as Windows Dev Config, Comfort
Shell, and the hardware-aware AI workloads when source is local. GitHub
source mode currently hides multi-file PowerShell-native flows because fetching
only the entry script would omit their relative dependencies; a packaged
repository snapshot is required before enabling them remotely.
winget configure against a real DSC config can install packages, change
registry values, disable services, and so on — not the kind of thing we
want to launch on a stray Enter key. So 🪟 Run Windows Setup is a
ConfirmableCommand:
selecting it pops a confirmation dialog with the script path and a short
note that the flows are idempotent. Confirm to launch the wt.exe tab;
cancel to back out.
This extension is Windows-only today. Flows whose manifest.yml entry
omits a windows.* block (e.g. a hypothetical Linux-only flow) are
filtered out of the list. The linux.install field is parsed and stored
on ScriptEntry.Linux for future use, but no 🐧 Run WSL Setup action is
rendered.
{ // "local" reads from disk, "github" fetches via raw.githubusercontent.com. "source": "local", "localPath": "C:\\Users\\crutkas\\WindowsDevSetupScripts", "githubRepo": "crutkas/WindowsDevSetupScripts", "githubBranch": "master", "manifestFile": "manifest.yml", "cacheTTLDays": 7 }