Windows Terminal Setup — Tabs · Splits · WSL/PowerShell + Oh My Posh
Make Windows Terminal feel like macOS iTerm. Lock down profiles / keybindings / theme in one settings.json.
Windows dev starts with Windows Terminal. Bundle WSL, PowerShell, and Command Prompt as tabs and splits in one window, and freeze the whole config in a single JSON file (settings.json). With one good setup, you get a working environment nearly equal to macOS iTerm + tmux.
This guide targets Windows 11 / Windows Terminal 1.21+. It's the daily-driver-terminal polish step after Windows initial setup and WSL tuning.
TL;DR
- Install Windows Terminal from Microsoft Store (built into Win11)
Ctrl+,(or ▼ → Settings) → JSON edit mode- Download this guide's
settings.example.jsonand edit for your machine - JetBrains Mono font + dark theme + acrylic transparency
- Oh My Posh to dress up the PowerShell prompt
Prerequisites
- Windows 11 (10 works too; some acrylic effects differ)
- WSL2 installed — WSL tuning
- (Optional) PowerShell 7 (
winget install Microsoft.PowerShell)
Download settings.json
The devAlice recommended baseline — paste GUIDs from your own machine and you're set.
settings.json# 1. Download
Invoke-WebRequest `
-Uri https://devalice.jaceclub.com/assets/windows/windows-terminal-setup/settings.example.json `
-OutFile settings.json
# 2. Verify SHA-256 (Windows PowerShell)
Get-FileHash settings.json -Algorithm SHA256
# Expected (Hash): BBDEBB16B68F5BBD9041DBE4FEFEC8BA5F30B497325F2A11B922C1DAEDB8525F
# (lowercase: bbdebb16b68f5bbd9041dbe4fefec8ba5f30b497325f2a11b922c1daedb8525f)
# 3. Inspect
notepad settings.json
# 4. Copy to actual location (Windows Terminal Stable)
$dst = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
Copy-Item settings.json $dst -Force⚠️ Replace the four
guidfields with your machine values. Open Windows Terminal once and look at the auto-generated GUIDs in the menu.
1. Install Windows Terminal — 1 min
Built into Win11. Otherwise:
winget install Microsoft.WindowsTerminalOpen with Win + T or Start menu → "Terminal".
Default Shortcuts (pre-customization)
| Key | Action |
|---|---|
Ctrl+, | Settings |
Ctrl+Shift+T | New tab |
Ctrl+Tab | Next tab |
Ctrl+Shift+W | Close tab |
Alt+Shift++ | Split right |
Alt+Shift+- | Split down |
2. Edit settings.json Directly — 5 min
The GUI has limits. Go JSON.
Ctrl+, (Settings) → bottom-left ⚙ Open JSON file → settings.json opens in your default editor.
Path:
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
Windows Terminal Preview uses the same path under
Microsoft.WindowsTerminalPreview_.... Different file.
Five Key Settings
{
"$schema": "https://aka.ms/terminal-profiles-schema",
// Default profile (GUID)
"defaultProfile": "{2c4de342-...}", // e.g., Ubuntu WSL
// Auto-copy on selection — iTerm style
"copyOnSelect": true,
"copyFormatting": "none", // plain text only (no color/format)
// Theme
"theme": "dark"
}3. Profiles — WSL + PowerShell 7 + Hidden — 10 min
3.1 Ubuntu (WSL) Profile
{
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", // your machine value
"name": "Ubuntu (WSL)",
"source": "Windows.Terminal.Wsl",
"commandline": "wsl.exe -d Ubuntu",
"startingDirectory": "//wsl$/Ubuntu/home/%USERNAME%",
"colorScheme": "One Half Dark",
"icon": "ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png"
}Pointing startingDirectory to your WSL home opens every new tab at ~/.
3.2 PowerShell 7 Profile
{
"guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", // your machine value
"name": "PowerShell 7",
"commandline": "pwsh.exe -NoLogo",
"startingDirectory": "%USERPROFILE%",
"colorScheme": "Campbell Powershell",
"icon": "ms-appx:///ProfileIcons/pwsh.png"
}
-NoLogohides the PowerShell welcome banner. Don't need to see it every time.
3.3 Hide Profiles You Don't Use
If you don't use Command Prompt, Azure Cloud Shell, or Windows PowerShell (5.1):
{
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"hidden": true
}4. Font + Theme — 5 min
4.1 Install JetBrains Mono
winget install JetBrains.JetBrainsMono
# Or: scoop bucket add nerd-fonts; scoop install JetBrainsMono-NFLog out / back in after install (font cache refresh).
4.2 Apply Font Defaults
"profiles": {
"defaults": {
"fontFace": "JetBrains Mono",
"fontSize": 12,
"fontWeight": "normal",
"useAcrylic": true,
"acrylicOpacity": 0.85,
"cursorShape": "filledBox",
"antialiasingMode": "cleartype",
"padding": "10",
"scrollbarState": "hidden",
"snapOnInput": true,
"historySize": 50000
},
// list...
}defaults applies to every profile; per-profile overrides allowed.
4.3 Extra Themes (optional)
Add palettes to the schemes array. Copy JSON from Windows Terminal Themes.
5. Keybindings — Mimic Mac Standard — 5 min
Add to actions. The downloadable asset already includes:
"actions": [
{ "command": "find", "keys": "ctrl+shift+f" },
{ "command": "paste", "keys": "ctrl+shift+v" },
{ "command": "copy", "keys": "ctrl+shift+c" },
{ "command": { "action": "splitPane", "split": "right" }, "keys": "alt+shift+plus" },
{ "command": { "action": "splitPane", "split": "down" }, "keys": "alt+shift+minus" },
{ "command": "closePane", "keys": "ctrl+shift+w" },
{ "command": { "action": "moveFocus", "direction": "left" }, "keys": "alt+left" },
{ "command": { "action": "moveFocus", "direction": "right" }, "keys": "alt+right" },
{ "command": { "action": "newTab" }, "keys": "ctrl+shift+t" },
{ "command": { "action": "nextTab" }, "keys": "ctrl+tab" }
]A natural map for migrators from iTerm / Terminal.app.
6. Oh My Posh — Dress Up the PowerShell Prompt — 10 min
PS C:\Users\u> is information-poor. Add git branch, exit code, shortened paths.
6.1 Install
winget install JanDeDobbeleer.OhMyPoshOpen a new terminal.
6.2 Apply in the PowerShell Profile
notepad $PROFILE
# If missing: New-Item -Path $PROFILE -ItemType File -ForceContents:
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\jandedobbeleer.omp.json" | Invoke-ExpressionImmediate effect in a new PowerShell window.
6.3 Change Theme
Get-PoshThemes # preview all themes
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\powerlevel10k_rainbow.omp.json" | Invoke-ExpressionSave the chosen theme to $PROFILE to persist.
6.4 Apply to bash/zsh in WSL (optional)
# Inside WSL bash/zsh
curl -s https://ohmyposh.dev/install.sh | bash -s
echo 'eval "$(oh-my-posh init bash --config ~/.poshthemes/jandedobbeleer.omp.json)"' >> ~/.bashrc7. Daily Patterns
7.1 Quick split + different command
Alt+Shift++ to split right → new pane runs wsl -d Ubuntu. Left is PowerShell, right is WSL — Mac iTerm + tmux feel.
7.2 tmux Inside WSL
Windows Terminal does window splitting only — real session management (detach/reattach) lives in tmux inside WSL:
# In WSL bash
sudo apt install tmux
tmux new -s dev # new session
# Work, then Ctrl+B → D (detach)
tmux attach -t dev # reattachClosing Windows Terminal doesn't kill the tmux session.
7.3 Keep settings.json in Git
$src = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
$dst = "$HOME\dotfiles\windows-terminal\settings.json"
mkdir "$HOME\dotfiles\windows-terminal" -ErrorAction SilentlyContinue
Copy-Item $src $dst -Force
cd "$HOME\dotfiles"
git add windows-terminal/settings.json
git commit -m "feat: windows terminal settings"Reverse the copy on a new machine for instant sync.
8. Troubleshooting
Font Not Applied
Font cache must refresh after JetBrains Mono install. Log out / back in or reboot.
Acrylic Transparency Missing
Windows 11 disables acrylic in battery saver or with transparency effects off. Settings → Personalization → Colors → enable Transparency effects.
WSL Profile startingDirectory Ignored
Must start with //wsl$/... (two forward slashes). \\wsl$\\... breaks in some environments.
PowerShell 7 Prompt Glyphs Broken
Some Oh My Posh themes need a Nerd Font. Switch font to a Nerd variant:
winget install JetBrains.JetBrainsMono # base
# Nerd Font variant via https://www.nerdfonts.com/ or scoopNext Steps
- Windows initial setup — Windows 11 + WSL
- WSL tuning — memory/CPU/network
- PowerShell profile —
$PROFILEstartup - Scoop vs Winget — package manager comparison
References
Changelog
- 2026-05-12 — Initial draft (devAlice M2 seed expansion)