Windows-side configuration for a WSL2 development environment — tuned for security engineering work. Manages Windows Terminal, PowerShell, WSL2 VM settings, and package installation.
Bootstrap a fresh machine: open PowerShell as Admin and run:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUserthen clone and run:.\setup.ps1
| Layer | Tool | Notes |
|---|---|---|
| Terminal | Windows Terminal | TokyoNight scheme, CaskaydiaCove Nerd Font |
| Shell | PowerShell 7 | Starship prompt, vi mode via PSReadLine |
| Packages | winget | Declarative manifest |
| WSL2 | Ubuntu | Configured via wslconfig (VM limits) |
| Secrets | 1Password | SSH agent, browser extension |
dotfiles-Windows/
├── setup.ps1 # Bootstrap: installs packages, fonts, config
├── wslconfig # Goes to %USERPROFILE%\.wslconfig
├── winget/
│ └── packages.json # Declarative package manifest
├── windows-terminal/
│ └── settings.json # Full Windows Terminal configuration
└── powershell/
└── Microsoft.PowerShell_profile.ps1
# 1. Allow script execution (run as Admin once)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 2. Clone repo
git clone https://github.com/Gerrrt/dotfiles-Windows "$env:USERPROFILE\.config-windows"
cd "$env:USERPROFILE\.config-windows"
# 3. Run bootstrap
.\setup.ps1After setup: open Windows Terminal, install the CaskaydiaCove Nerd Font if not already present, and restart the terminal.
wslconfig controls the Windows-side Hyper-V VM that runs WSL2. It lives at
%USERPROFILE%\.wslconfig. The setup.ps1 copies it there automatically.
After any change to .wslconfig, restart WSL2 from PowerShell:
wsl --shutdownKey settings: memory limit, CPU count, networking mode. See the file for details.
The full settings.json is tracked in windows-terminal/settings.json.
setup.ps1 copies it to the correct location automatically.
Manual path:
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
The profile lives at powershell/Microsoft.PowerShell_profile.ps1 and is
symlinked to $PROFILE by setup.ps1. It includes:
- Starship prompt (consistent with the Linux/Mac setup)
- Vi mode via PSReadLine
- Unix-style aliases (
ls,cat,grep,which) - WSL2 helper functions
# Update all winget packages
winget upgrade --all
# Re-apply Windows Terminal settings after changes
copy .\windows-terminal\settings.json "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
# Reload PowerShell profile
. $PROFILE