devAlice
← Windows

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

  1. Install Windows Terminal from Microsoft Store (built into Win11)
  2. Ctrl+, (or ▼ → Settings) → JSON edit mode
  3. Download this guide's settings.example.json and edit for your machine
  4. JetBrains Mono font + dark theme + acrylic transparency
  5. 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 guid fields 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.WindowsTerminal

Open with Win + T or Start menu → "Terminal".

Default Shortcuts (pre-customization)

KeyAction
Ctrl+,Settings
Ctrl+Shift+TNew tab
Ctrl+TabNext tab
Ctrl+Shift+WClose 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"
}

-NoLogo hides 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-NF

Log 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.OhMyPosh

Open a new terminal.

6.2 Apply in the PowerShell Profile

notepad $PROFILE
# If missing: New-Item -Path $PROFILE -ItemType File -Force

Contents:

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\jandedobbeleer.omp.json" | Invoke-Expression

Immediate 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-Expression

Save 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)"' >> ~/.bashrc

7. 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       # reattach

Closing 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 scoop

Next Steps

References

Changelog

  • 2026-05-12 — Initial draft (devAlice M2 seed expansion)

Comments