From 2855553ad9253afa255fd417ac73c0b1c70e057f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Jun 2026 10:31:52 +0000 Subject: [PATCH 1/4] Initial plan From 098bf9926ce638d2aa5a59e2ecdfafe1e2408b7f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Jun 2026 10:35:33 +0000 Subject: [PATCH 2/4] Add winget configure baseline and document selective WSL comfort adoption --- README.md | 41 ++++++- TO_ADD.md | 2 +- windows/setup.winget | 273 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 314 insertions(+), 2 deletions(-) create mode 100644 windows/setup.winget diff --git a/README.md b/README.md index 317b92d..534b66e 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,25 @@ bash <(curl -sSL https://raw.githubusercontent.com/richeney/setup/master/bootstrap.sh) ``` +* WSL Comfort Shell (optional, alongside bootstrap) + + This repo now **selectively adopts** [WindowsDeveloperConfig](https://github.com/microsoft/WindowsDeveloperConfig): + + - ✅ Use `wsl-comfort` and language workloads + - ❌ Skip the full `windows-dev-config/dev-config.winget` baseline (too opinionated for this setup) + + Overlap with this repo: + + - `playbook.yml` + `bashrc_user_customisations` already set up many CLI tools and shell tweaks + - this repo currently uses **Oh My Posh**; WSL Comfort uses **Starship** + + Decision: keep this bootstrap as the default and use WSL Comfort as an **optional profile** when you want Starship + comfort-shell defaults. + + ```powershell + # run from a local clone of WindowsDeveloperConfig + .\wsl-comfort\install.ps1 -NonInteractive + ``` + * Oh My Posh *Not working?* @@ -79,6 +98,26 @@ winget source update ``` +* Preferred install path: `winget configure` + + Enable once, then apply the repo config: + + ```powershell + winget configure --enable + winget configure -f .\windows\setup.winget --accept-configuration-agreements --disable-interactivity + ``` + + `.\windows\setup.winget` includes: + + - existing Windows package baseline from this README + - `Microsoft.Coreutils` + - language workloads aligned to WindowsDeveloperConfig: + - Node.js LTS + global TypeScript + - Python 3.13 + `uv` + - .NET SDK 10 + - Rust (rustup stable + VS Build Tools VC workload) + - Go + * List installed apps ```powershell @@ -104,7 +143,7 @@ ## winget uninstall "Teams Machine-Wide Installer" ``` -* Install software +* Install software (fallback/manual reference) ⚠️ Check the desktop - Reset my PC now adds a list of the software that was lost. Update the winget list below. diff --git a/TO_ADD.md b/TO_ADD.md index 2a2fb70..a590bd2 100644 --- a/TO_ADD.md +++ b/TO_ADD.md @@ -1,7 +1,7 @@ # To Add * Docker -* Go +* Go ✅ (via `windows/setup.winget` workload) * Kind * azcopy diff --git a/windows/setup.winget b/windows/setup.winget new file mode 100644 index 0000000..c46fd0d --- /dev/null +++ b/windows/setup.winget @@ -0,0 +1,273 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2023/08/config/document.json +$schema: https://raw.githubusercontent.com/PowerShell/DSC/main/schemas/2023/08/config/document.json +metadata: + winget: + processor: dscv3 +resources: + # Core dev tools + - type: Microsoft.WinGet/Package + name: Git + properties: + id: Git.Git + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: GitHubCli + properties: + id: GitHub.cli + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: GitHubCopilot + properties: + id: GitHub.Copilot + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: AzureCLI + properties: + id: Microsoft.AzureCLI + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: AzureStorageExplorer + properties: + id: Microsoft.Azure.StorageExplorer + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: AzureFunctionsCoreTools + properties: + id: Microsoft.Azure.FunctionsCoreTools + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: DevTunnel + properties: + id: Microsoft.devtunnel + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: AzureVpnClient + properties: + id: Microsoft.AzureVPNClient + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: NvmForWindows + properties: + id: CoreyButler.NVMforWindows + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: PowerShell + properties: + id: Microsoft.PowerShell + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: MicrosoftCoreutils + properties: + id: Microsoft.Coreutils + source: winget + acceptAgreements: true + + # Editors & productivity + - type: Microsoft.WinGet/Package + name: VSCode + properties: + id: XP9KHM4BK9FZ7Q + source: msstore + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: PowerToys + properties: + id: XP89DCGQ3K6VLD + source: msstore + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: Notion + properties: + id: Notion.Notion + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: Espanso + properties: + id: Espanso.Espanso + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: FilesPreview + properties: + id: FilesCommunity.FilesPreview + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: Chrome + properties: + id: Google.Chrome.EXE + source: winget + acceptAgreements: true + + # Hardware / peripherals + - type: Microsoft.WinGet/Package + name: LogiTune + properties: + id: Logitech.LogiTune + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: LogiOptionsPlus + properties: + id: Logitech.OptionsPlus + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: DellDisplayAndPeripheralManager + properties: + id: Dell.DisplayAndPeripheralManager + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: RodeCentral + properties: + id: RODE.RODECentral + source: winget + acceptAgreements: true + + # Media & entertainment + - type: Microsoft.WinGet/Package + name: WhatsApp + properties: + id: 9NKSQGP7F2NH + source: msstore + acceptAgreements: true + # Keep HP Smart / Netflix / Amazon Prime / Disney+ as manual fallback installs in README + + # Language workloads (WindowsDeveloperConfig-aligned) + - name: Node + type: Microsoft.WinGet/Package + properties: + id: OpenJS.NodeJS.LTS + source: winget + acceptAgreements: true + + - name: InstallTypeScript + type: Microsoft.DSC.Transitional/RunCommandOnSet + dependsOn: + - Node + properties: + executable: powershell + arguments: + "0": -NoProfile + "1": -NoLogo + "2": -Command + "3": >- + $machine = [Environment]::GetEnvironmentVariable('Path','Machine'); + $user = [Environment]::GetEnvironmentVariable('Path','User'); + $env:Path = (($machine, $user) | Where-Object { $_ }) -join ';'; + if (Get-Command tsc -ErrorAction SilentlyContinue) { exit 0 }; + if (-not (Get-Command npm -ErrorAction SilentlyContinue)) { throw 'npm not found on PATH after Node install; cannot install typescript.' }; + & npm install --global --no-fund --no-audit typescript; + if ($LASTEXITCODE -ne 0) { throw "npm install --global typescript failed with exit code $LASTEXITCODE" } + treatAsArray: true + + - name: Python + type: Microsoft.WinGet/Package + properties: + id: Python.Python.3.13 + source: winget + acceptAgreements: true + + - name: Uv + type: Microsoft.WinGet/Package + properties: + id: astral-sh.uv + source: winget + acceptAgreements: true + + - name: DotNetSdk + type: Microsoft.WinGet/Package + properties: + id: Microsoft.DotNet.SDK.10 + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: Rustup + properties: + id: Rustlang.Rustup + source: winget + acceptAgreements: true + + - type: Microsoft.WinGet/Package + name: VisualStudioBuildTools + properties: + id: Microsoft.VisualStudio.2022.BuildTools + source: winget + acceptAgreements: true + + - type: Microsoft.DSC.Transitional/RunCommandOnSet + name: VSBuildToolsVCWorkload + dependsOn: + - VisualStudioBuildTools + properties: + executable: powershell + arguments: + "0": -NoProfile + "1": -NoLogo + "2": -Command + "3": >- + $ErrorActionPreference = 'Stop'; + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; + $bootstrapper = Join-Path $env:TEMP 'vs_BuildTools.exe'; + Invoke-WebRequest -Uri 'https://aka.ms/vs/17/release/vs_BuildTools.exe' -OutFile $bootstrapper -UseBasicParsing; + $proc = Start-Process -FilePath $bootstrapper -ArgumentList @('--quiet','--wait','--norestart','--nocache','--add','Microsoft.VisualStudio.Workload.VCTools','--includeRecommended') -Wait -PassThru; + if ($proc.ExitCode -ne 0 -and $proc.ExitCode -ne 3010) { throw "vs_BuildTools.exe exited with code $($proc.ExitCode)" } + treatAsArray: true + + - type: Microsoft.DSC.Transitional/RunCommandOnSet + name: InstallStableToolchain + dependsOn: + - Rustup + - VSBuildToolsVCWorkload + properties: + executable: powershell + arguments: + "0": -NoProfile + "1": -NoLogo + "2": -Command + "3": >- + $machine = [Environment]::GetEnvironmentVariable('Path','Machine'); + $user = [Environment]::GetEnvironmentVariable('Path','User'); + $env:Path = (($machine, $user) | Where-Object { $_ }) -join ';'; + if (-not (Get-Command rustup -ErrorAction SilentlyContinue)) { throw 'rustup not found on PATH after Rustup install; cannot install toolchain.' }; + & rustup default stable; + if ($LASTEXITCODE -ne 0) { throw "rustup default stable failed with exit code $LASTEXITCODE" } + treatAsArray: true + + - name: Go + type: Microsoft.WinGet/Package + properties: + id: GoLang.Go + source: winget + acceptAgreements: true From ef68af932406e9f624176890feeb1015b22fb7ba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Jun 2026 10:36:23 +0000 Subject: [PATCH 3/4] Clarify WSL Comfort clone-and-run instructions --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 534b66e..70a3cb6 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,9 @@ Decision: keep this bootstrap as the default and use WSL Comfort as an **optional profile** when you want Starship + comfort-shell defaults. ```powershell - # run from a local clone of WindowsDeveloperConfig + # clone and run from a local checkout of WindowsDeveloperConfig + git clone https://github.com/microsoft/WindowsDeveloperConfig.git + cd .\WindowsDeveloperConfig .\wsl-comfort\install.ps1 -NonInteractive ``` From 9ec88b63226486ee27bfda3e3b6c1dcdd39614c3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Jun 2026 10:38:05 +0000 Subject: [PATCH 4/4] Refine Rust workload and review polish --- README.md | 4 ++-- windows/setup.winget | 29 +---------------------------- 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 70a3cb6..9395318 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ This repo now **selectively adopts** [WindowsDeveloperConfig](https://github.com/microsoft/WindowsDeveloperConfig): - ✅ Use `wsl-comfort` and language workloads - - ❌ Skip the full `windows-dev-config/dev-config.winget` baseline (too opinionated for this setup) + - ❌ Skip the full upstream `windows-dev-config/dev-config.winget` baseline (too opinionated for this setup) Overlap with this repo: @@ -117,7 +117,7 @@ - Node.js LTS + global TypeScript - Python 3.13 + `uv` - .NET SDK 10 - - Rust (rustup stable + VS Build Tools VC workload) + - Rust (rustup stable) - Go * List installed apps diff --git a/windows/setup.winget b/windows/setup.winget index c46fd0d..878361a 100644 --- a/windows/setup.winget +++ b/windows/setup.winget @@ -186,7 +186,7 @@ resources: $user = [Environment]::GetEnvironmentVariable('Path','User'); $env:Path = (($machine, $user) | Where-Object { $_ }) -join ';'; if (Get-Command tsc -ErrorAction SilentlyContinue) { exit 0 }; - if (-not (Get-Command npm -ErrorAction SilentlyContinue)) { throw 'npm not found on PATH after Node install; cannot install typescript.' }; + if (-not (Get-Command npm -ErrorAction SilentlyContinue)) { throw 'npm not found on PATH after Node install; cannot install TypeScript.' }; & npm install --global --no-fund --no-audit typescript; if ($LASTEXITCODE -ne 0) { throw "npm install --global typescript failed with exit code $LASTEXITCODE" } treatAsArray: true @@ -219,37 +219,10 @@ resources: source: winget acceptAgreements: true - - type: Microsoft.WinGet/Package - name: VisualStudioBuildTools - properties: - id: Microsoft.VisualStudio.2022.BuildTools - source: winget - acceptAgreements: true - - - type: Microsoft.DSC.Transitional/RunCommandOnSet - name: VSBuildToolsVCWorkload - dependsOn: - - VisualStudioBuildTools - properties: - executable: powershell - arguments: - "0": -NoProfile - "1": -NoLogo - "2": -Command - "3": >- - $ErrorActionPreference = 'Stop'; - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; - $bootstrapper = Join-Path $env:TEMP 'vs_BuildTools.exe'; - Invoke-WebRequest -Uri 'https://aka.ms/vs/17/release/vs_BuildTools.exe' -OutFile $bootstrapper -UseBasicParsing; - $proc = Start-Process -FilePath $bootstrapper -ArgumentList @('--quiet','--wait','--norestart','--nocache','--add','Microsoft.VisualStudio.Workload.VCTools','--includeRecommended') -Wait -PassThru; - if ($proc.ExitCode -ne 0 -and $proc.ExitCode -ne 3010) { throw "vs_BuildTools.exe exited with code $($proc.ExitCode)" } - treatAsArray: true - - type: Microsoft.DSC.Transitional/RunCommandOnSet name: InstallStableToolchain dependsOn: - Rustup - - VSBuildToolsVCWorkload properties: executable: powershell arguments: