diff --git a/src/Workloads/_common/apply-configuration.ps1 b/src/Workloads/_common/apply-configuration.ps1 index 9f8b949..54412e4 100644 --- a/src/Workloads/_common/apply-configuration.ps1 +++ b/src/Workloads/_common/apply-configuration.ps1 @@ -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 diff --git a/src/docs/development.md b/src/docs/development.md index 9364fca..868d3de 100644 --- a/src/docs/development.md +++ b/src/docs/development.md @@ -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 / @@ -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` @@ -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 @@ -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). @@ -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) @@ -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) diff --git a/src/future/cmdpal/QuickWingetSetup/QuickWingetSetup/Models/ScriptEntry.cs b/src/future/cmdpal/QuickWingetSetup/QuickWingetSetup/Models/ScriptEntry.cs index ec559be..c0038f9 100644 --- a/src/future/cmdpal/QuickWingetSetup/QuickWingetSetup/Models/ScriptEntry.cs +++ b/src/future/cmdpal/QuickWingetSetup/QuickWingetSetup/Models/ScriptEntry.cs @@ -116,7 +116,7 @@ public class WindowsTarget /// Optional PowerShell step that runs in the same Windows Terminal tab /// after winget configure succeeds. Use when a flow's DSC /// installs the machine-side prerequisites but the real setup is an - /// interactive script (e.g. mac-my-wsl.ps1 -Interactive). The + /// interactive script (e.g. comfort-shell-bootstrap.sh). The /// script path is repo-relative; args are appended verbatim. /// [JsonPropertyName("postConfigure")] diff --git a/src/future/cmdpal/QuickWingetSetup/QuickWingetSetup/Pages/ScriptDetailPage.cs b/src/future/cmdpal/QuickWingetSetup/QuickWingetSetup/Pages/ScriptDetailPage.cs index ed5531c..3b9bfc5 100644 --- a/src/future/cmdpal/QuickWingetSetup/QuickWingetSetup/Pages/ScriptDetailPage.cs +++ b/src/future/cmdpal/QuickWingetSetup/QuickWingetSetup/Pages/ScriptDetailPage.cs @@ -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) @@ -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; diff --git a/src/future/cmdpal/README.md b/src/future/cmdpal/README.md index d1111d6..3f56f5c 100644 --- a/src/future/cmdpal/README.md +++ b/src/future/cmdpal/README.md @@ -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. diff --git a/src/manifest.yml b/src/manifest.yml index 083142b..2416cb2 100644 --- a/src/manifest.yml +++ b/src/manifest.yml @@ -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 @@ -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] @@ -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 @@ -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 diff --git a/src/tests/calm-os/expected.txt b/src/tests/windows-dev-config/expected.txt similarity index 100% rename from src/tests/calm-os/expected.txt rename to src/tests/windows-dev-config/expected.txt diff --git a/src/tests/calm-os/probe.ps1 b/src/tests/windows-dev-config/probe.ps1 similarity index 94% rename from src/tests/calm-os/probe.ps1 rename to src/tests/windows-dev-config/probe.ps1 index a73dc46..34f433d 100644 --- a/src/tests/calm-os/probe.ps1 +++ b/src/tests/windows-dev-config/probe.ps1 @@ -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 diff --git a/src/tests/wsl-comfort-shell/expected.txt b/src/tests/wsl-comfort-shell/expected.txt deleted file mode 100644 index af5626b..0000000 --- a/src/tests/wsl-comfort-shell/expected.txt +++ /dev/null @@ -1 +0,0 @@ -Hello, world! diff --git a/src/tests/wsl-comfort-shell/hello.sh b/src/tests/wsl-comfort-shell/hello.sh deleted file mode 100644 index aa02f77..0000000 --- a/src/tests/wsl-comfort-shell/hello.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env zsh -# Minimal hello-world for the wsl-comfort-shell flow. -# -# Invoked via `wsl -d -- zsh -lc 'bash tests/wsl-comfort-shell/hello.sh'`. -# Running this under zsh -lc proves that the shell this flow configures -# (zsh with the wsl-comfort managed block in ~/.zprofile) at least -# dot-sources its login files without errors. -# -# Note: this flow is manual_test: true — CI does not execute this. -echo "Hello, world!" diff --git a/src/tests/comfort-shell/expected.txt b/src/tests/wsl-comfort/expected.txt similarity index 100% rename from src/tests/comfort-shell/expected.txt rename to src/tests/wsl-comfort/expected.txt diff --git a/src/tests/comfort-shell/hello.sh b/src/tests/wsl-comfort/hello.sh similarity index 100% rename from src/tests/comfort-shell/hello.sh rename to src/tests/wsl-comfort/hello.sh diff --git a/src/windows-dev-config/install.ps1 b/src/windows-dev-config/install.ps1 index 1194635..c2facff 100644 --- a/src/windows-dev-config/install.ps1 +++ b/src/windows-dev-config/install.ps1 @@ -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 @@ -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')