Initialize-DeveloperMachine
0.1.1
Bootstrap a Windows developer machine: relocate caches off C:, install winget tools, set up WSL + Docker Desktop. Modular tasks, idempotent, dry-run support.
Minimum PowerShell version
5.1
Installation Options
Owners
Copyright
(c) gonace. All rights reserved.
Package Details
Author(s)
- gonace
Tags
Developer Bootstrap Windows WSL DockerDesktop winget Junction Cache NuGet npm
Functions
PSEditions
Dependencies
This module has no dependencies.
Release Notes
Patch release. Mostly UX polish from running `v0.1.0` on real machines and finding rough edges.
```powershell
Install-Module Initialize-DeveloperMachine -RequiredVersion 0.1.1 -Scope CurrentUser
Initialize-DeveloperMachine
```
## ✨ First-run UX
- **Interactive config scaffold.** When the script runs in a terminal and finds no config file, it now offers to create one for you at `%AppData%\Initialize-DeveloperMachine\config.json`, prints the contents in a gray-boxed preview, then prompts `[P]roceed or [E]dit and reload`. Hitting `E` opens the file in your default editor and shows a spinner until you save — once saved, the preview reprints with your changes and the prompt loops. CI / `-Force` / redirected-stdin runs are unchanged (they fall through to built-in defaults silently).
- **Honest "no config" output.** Previously the script logged `[INFO] Config: <path>` even when that path didn't exist on disk. Now you get a clear `[INFO] No config file found; using built-in defaults.` plus the recommended location to drop one at.
- **Section banners restyled** as three-line boxed headers:
```
╔══════════════════════════════════════════════════════════╗
║ NuGet ║
╚══════════════════════════════════════════════════════════╝
```
## 🐛 Fixes
- The skip message in the `DockerDesktop` task referenced the obsolete `DockerDesktopWslHome` config key. Updated to the current `DockerDesktop.WslHome`.
- `Get-PathsConfig` now tolerates a `$null`/empty `-ConfigFile` cleanly.
- Successful winget installs (`[INFO] X installed.`) now render in green so they stand out from in-progress lines. Idempotent "already installed" lines stay default colour.
- Better post-install diagnostic when winget can't redetect a freshly-installed package: dumps the exit code in hex, the relevant `winget list` lines, and the matching Windows uninstall-registry entries — making it possible to tell a winget metadata bug apart from an actual install failure.
## 🔧 Defaults & internals
- Default `DockerDesktop.WslHome` is now `D:\.docker-wsl` (was `D:\.docker-desktop`). Reads more clearly alongside `D:\.docker` (the CLI config junction).
- Config-file lookup adds `%AppData%\Initialize-DeveloperMachine\config.json` ahead of the `~\.config\…` XDG-style path. Both still work; AppData wins when both exist.
- Bundled `Initialize-DeveloperMachine.config.json` is now also shipped inside the published module, and used as the seed template by the interactive scaffold (single source of truth, no duplicated string literal).
- New `Wait-ForFileSave` / `Open-EditorAndWaitForSave` helpers in `lib/ConfigScaffold.ps1`.
See the [README](https://github.com/gonace/Initialize-DeveloperMachine#readme) for full configuration details and known limitations.
FileList
- Initialize-DeveloperMachine.nuspec
- Initialize-DeveloperMachine.config.json
- Initialize-DeveloperMachine.ps1
- Initialize-DeveloperMachine.psd1
- Initialize-DeveloperMachine.psm1
- LICENSE
- README.md
- lib\CacheLocation.ps1
- lib\ConfigScaffold.ps1
- lib\Docker.ps1
- lib\EnvBroadcast.ps1
- lib\Junction.ps1
- lib\Lock.ps1
- lib\Node.ps1
- lib\PathsConfig.ps1
- lib\Preflight.ps1
- lib\Spinner.ps1
- lib\Status.ps1
- lib\TaskMenu.ps1
- lib\Winget.ps1
- lib\Wsl.ps1
- tasks\10-NuGet.ps1
- tasks\20-NPM.ps1
- tasks\30-VCPKG.ps1
- tasks\40-Dotnet.ps1
- tasks\50-Claude.ps1
- tasks\60-Wsl.ps1
- tasks\70-WslDistros.ps1
- tasks\90-DockerDesktop.ps1
Version History
| Version | Downloads | Last updated |
|---|---|---|
| 0.1.2 | 4 | 5/7/2026 |
| 0.1.1 (current version) | 3 | 5/7/2026 |
| 0.1.0 | 5 | 5/7/2026 |