Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Workloads/_common/apply-configuration.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ param(
[Parameter(Mandatory)] [string] $Id,
[Parameter(Mandatory)] [string] $ConfigFile,
# AllowEmptyCollection: Windows PowerShell 5.1 rejects empty arrays
# bound to Mandatory parameters. Some flows (e.g. mac-comfort-shell)
# bound to Mandatory parameters. Some flows (e.g. comfort-shell)
# have no post-install CLI to verify - the DSC only installs a font
# and pwsh - so they legitimately pass @() here.
[Parameter(Mandatory)] [AllowEmptyCollection()] [string[]] $RequireCommands
Expand Down
18 changes: 9 additions & 9 deletions src/docs/development.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# WindowsDevSetupScripts — Developer Guide
# Windows Developer Config — Developer Guide

> 👋 **Just want to run something?** See the
> [top-level README](../../README.md). This file is the contributor /
Expand All @@ -11,7 +11,7 @@ toolchains and Windows-desktop personalities using `winget` /
On Windows the **core artifact of each flow is a [winget DSC configuration
file](https://learn.microsoft.com/windows/package-manager/configuration/)**
(`configuration.winget` for language toolchains, `dev-config.winget` for the
Calm OS flow) — a declarative, idempotent description of the machine state
Windows Dev Config flow) — a declarative, idempotent description of the machine state
required for that flow. Where winget alone is not enough (e.g. `npm install
--global typescript`, registry tweaks, or a `RunOnce` reboot dance) the
configuration calls a DSC `Script` / `RunCommandOnSet` / `Registry`
Expand All @@ -27,7 +27,7 @@ configuration actually produced a working toolchain.

## Supported flows

Each flow's `configuration.winget` (or `dev-config.winget` for Calm OS)
Each flow's `configuration.winget` (or `dev-config.winget` for Windows Dev Config)
is the source of truth for what gets installed; the table below
summarizes it for quick scanning. Flows marked **manual** are excluded
from the automated CI matrix (they need an interactive desktop session
Expand All @@ -46,8 +46,8 @@ extension.
| Python | ✅ automated | `Python.Python.3.13`, `astral-sh.uv` |
| WinForms | 🙋 manual | `Microsoft.DotNet.SDK.10` + the .NET desktop workload (multi-GB; manual to spare CI minutes) |
| WinUI 3 | 🙋 manual | `Microsoft.DotNet.SDK.10`, `Microsoft.VisualStudio.Community`, `Microsoft.WinAppCLI` + WinUI/Universal/ManagedDesktop VS workloads |
| Calm OS | 🙋 manual | A full distraction-free workstation: apps + ~24 registry tweaks + WSL + Ubuntu (see [`windows-dev-config/README.md`](../windows-dev-config/README.md)) |
| Comfort Shell | 🙋 manual | WSL distro + zsh/bash + starship + modern CLI bundle + Cascadia Code Nerd Font + themed Windows Terminal profile (see [`wsl-comfort/readme.md`](../wsl-comfort/readme.md)) |
| Windows Dev Config| 🙋 manual | A full distraction-free workstation: apps + ~24 registry tweaks + WSL + Ubuntu (see [`windows-dev-config/README.md`](../windows-dev-config/README.md)) |
| WSL Comfort | 🙋 manual | WSL distro + zsh/bash + starship + modern CLI bundle + Cascadia Code Nerd Font + themed Windows Terminal profile (see [`wsl-comfort/readme.md`](../wsl-comfort/readme.md)) |

See [`manifest.yml`](../manifest.yml) for the canonical declarative
list (paths, build/run commands, onboarding URLs).
Expand Down Expand Up @@ -78,8 +78,8 @@ Workloads/
rust/ # configuration.winget (core) + install.ps1 (thin shim)
winforms/ # configuration.winget (core) + install.ps1 (thin shim)
winui/ # configuration.winget (core) + install.ps1 (thin shim)
windows-dev-config/ # Calm OS — dev-config.winget (single-file DSC) + install.ps1 + README.md
wsl-comfort/ # Comfort Shell — install.ps1 (Windows side) + comfort-shell-bootstrap.sh (Linux side, self-contained) + readme.md
windows-dev-config/ # Windows Dev Config — dev-config.winget (single-file DSC) + install.ps1 + README.md
wsl-comfort/ # WSL Comfort — install.ps1 (Windows side) + comfort-shell-bootstrap.sh (Linux side, self-contained) + readme.md
tests/
_harness/ # build-run-diff harness used by CI:
# run-flow.ps1 - all flows (build + run + diff stdout)
Expand All @@ -94,8 +94,8 @@ tests/
rust/ # Cargo.toml + src/main.rs + expected.txt
winforms/ # hello.csproj + Program.cs + expected.txt
winui/ # hello.csproj + Program.cs + expected.txt
calm-os/ # probe.ps1 + expected.txt (manual-only flow)
comfort-shell/ # hello.sh + expected.txt (manual-only flow)
windows-dev-config/# probe.ps1 + expected.txt (manual-only flow)
wsl-shell/ # hello.sh + expected.txt (manual-only flow)
manifest.yml # declarative list of flows consumed by CI **and** by the extension
future/
cmdpal/ # PowerToys Command Palette extension (reads manifest.yml)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public class WindowsTarget
/// Optional PowerShell step that runs in the same Windows Terminal tab
/// after <c>winget configure</c> succeeds. Use when a flow's DSC
/// installs the machine-side prerequisites but the real setup is an
/// interactive script (e.g. <c>mac-my-wsl.ps1 -Interactive</c>). The
/// interactive script (e.g. <c>comfort-shell-bootstrap.sh</c>). The
/// script path is repo-relative; args are appended verbatim.
/// </summary>
[JsonPropertyName("postConfigure")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public override IListItem[] GetItems()
var winSubtitle = $"winget configure {winPath}";

// Flows that need WSL even though they register as Windows-only
// (e.g. mac-comfort-shell installs a font via DSC but the
// (e.g. comfort-shell installs a font via DSC but the
// follow-up manual step runs inside a WSL distro). Surface the
// same ⚠️ affordances we show on Linux items.
if (_script.RequiresWsl)
Expand Down Expand Up @@ -191,8 +191,8 @@ public override ICommandResult Invoke()
return CommandResult.Dismiss();
}

// Resolve an optional post-configure step (e.g. mac-my-wsl.ps1
// -Interactive) and chain it in the same wt tab so the user gets
// Resolve an optional post-configure step (e.g. comfort-shell-bootstrap.sh)
// and chain it in the same wt tab so the user gets
// one continuous experience instead of a manual follow-up.
string? postPath = null;
string? postArgs = null;
Expand Down
2 changes: 1 addition & 1 deletion src/future/cmdpal/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ The list view groups by `category`, with this priority order:
| 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 | `user-experience` | OS-feel flows (windows-dev-config, wsl-comfort). |
| 4 | `shell` | Legacy alias for `user-experience`. New flows should pick `user-experience`. |

Within a rank, flows sort alphabetically by category then by name.
Expand Down
22 changes: 11 additions & 11 deletions src/manifest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
# - "user-experience" : OS-feel / shell flows that
# shape the desktop rather than
# install dev toolchains
# (wsl-comfort, calm-os,
# (wsl-comfort, windows-dev-config,
# common-adjustments).
# - "shell" : legacy alias for
# "user-experience"; new flows
Expand Down Expand Up @@ -221,8 +221,8 @@ flows:
expected: src/tests/python/expected.txt
version: "python --version; uv --version"

- id: comfort-shell
name: Comfort Shell
- id: wsl-comfort
name: WSL Comfort
description: Cozy WSL shell setup — zsh/bash, starship, modern CLI tools, and shims
category: user-experience
tags: [user-experience, wsl, zsh, bash, shell, starship, homebrew, terminal, nerd-font]
Expand All @@ -236,20 +236,20 @@ flows:
windows:
install: wsl-comfort/install.ps1
build: ""
run: wsl -- bash src/tests/comfort-shell/hello.sh
expected: src/tests/comfort-shell/expected.txt
run: wsl -- bash src/tests/wsl-comfort/hello.sh
expected: src/tests/wsl-comfort/expected.txt
version: "wsl --status"

- id: calm-os
name: Calm OS
- id: windows-dev-config
name: Windows Dev Config
description: Distraction-free dev workstation — apps + OS settings + WSL, all in one DSC
category: user-experience
tags: [user-experience, calm-os, distraction-free, taskbar, wsl, ubuntu]
tags: [user-experience, windows-dev-config, distraction-free, taskbar, wsl, ubuntu]
icon: 🧘
onboardingUrl: https://dev.windows.com
# Heavy machine-state changes (Sudo, Recall off, Click To Do off, WSL +
# Ubuntu install with a forced reboot, etc.) — keep out of the automated
# matrix. The probe under src/tests/calm-os/probe.ps1 is for a human running
# matrix. The probe under src/tests/windows-dev-config/probe.ps1 is for a human running
# the flow locally; it asserts that `git` resolves on PATH after the
# install (the apps module's first dep) as a fast smoke signal.
manual_test: true
Expand All @@ -258,8 +258,8 @@ flows:
install: windows-dev-config/install.ps1
configuration: windows-dev-config/dev-config.winget
build: ""
run: pwsh -NoProfile -File src/tests/calm-os/probe.ps1
expected: src/tests/calm-os/expected.txt
run: pwsh -NoProfile -File src/tests/windows-dev-config/probe.ps1
expected: src/tests/windows-dev-config/expected.txt
version: "git --version"

# Curated bundles of flows. Surfaced by the Command Palette extension; not
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Smoke-test probe for the calm-os user-experience flow.
# Smoke-test probe for the windows-dev-config user-experience flow.
#
# After the master config has been applied, the apps module installs
# git via winget. The simplest signal a human can use to confirm the
Expand Down
1 change: 0 additions & 1 deletion src/tests/wsl-comfort-shell/expected.txt

This file was deleted.

10 changes: 0 additions & 10 deletions src/tests/wsl-comfort-shell/hello.sh

This file was deleted.

File renamed without changes.
10 changes: 5 additions & 5 deletions src/windows-dev-config/install.ps1
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
<#
.SYNOPSIS
Apply the Calm OS user-experience configuration on Windows.
Apply the Windows Dev Config user-experience configuration on Windows.

.DESCRIPTION
Thin CI/dev shim around `dev-config.winget`, a winget DSC configuration
that sets up the full Calm OS developer workstation (apps, distraction-
free desktop, taskbar polish, Recall off, dark theme, WSL + Ubuntu).
that sets up the full Windows Dev Config developer workstation (apps,
distraction-free desktop, taskbar polish, Recall off, dark theme, WSL + Ubuntu).

The shim only:
* applies the DSC config with retry,
* rehydrates PATH in the current session,
* emits `INSTALL_OK: calm-os` for the test harness.
* emits `INSTALL_OK: windows-dev-config` for the test harness.

RequireCommands lists `git` because the master config installs it
unconditionally; asserting it on PATH catches a clean-install failure
Expand All @@ -24,6 +24,6 @@ $ErrorActionPreference = 'Stop'
Set-StrictMode -Version Latest

& (Join-Path $PSScriptRoot '..\Workloads\_common\apply-configuration.ps1') `
-Id 'calm-os' `
-Id 'windows-dev-config' `
-ConfigFile (Join-Path $PSScriptRoot 'dev-config.winget') `
-RequireCommands @('git')
Loading