Skip to content
Draft
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
43 changes: 42 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,27 @@
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 upstream `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
# clone and run from a local checkout of WindowsDeveloperConfig
git clone https://github.com/microsoft/WindowsDeveloperConfig.git
cd .\WindowsDeveloperConfig
.\wsl-comfort\install.ps1 -NonInteractive
```

* Oh My Posh

*Not working?*
Expand Down Expand Up @@ -79,6 +100,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)
- Go

* List installed apps

```powershell
Expand All @@ -104,7 +145,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.

Expand Down
2 changes: 1 addition & 1 deletion TO_ADD.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# To Add

* Docker
* Go
* Go ✅ (via `windows/setup.winget` workload)
* Kind

* azcopy
Expand Down
246 changes: 246 additions & 0 deletions windows/setup.winget
Original file line number Diff line number Diff line change
@@ -0,0 +1,246 @@
# 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.DSC.Transitional/RunCommandOnSet
name: InstallStableToolchain
dependsOn:
- Rustup
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