cheat sheet

Windows Terminal

Configure Windows Terminal — settings.json structure, profiles for pwsh/cmd/wsl/ssh, keybindings, colour schemes, panes, and the wt.exe CLI.

Windows Terminal — Profiles, Keybindings, Schemes

What it is

Windows Terminal is Microsoft's open-source, GPU-accelerated terminal emulator for Windows 10 and 11, distributed through the Microsoft Store and the microsoft/terminal repository. It hosts any console application — pwsh, classic cmd, WSL distros, Azure Cloud Shell, and ssh — in a tabbed, splittable window driven by a single JSON config (settings.json). Reach for Windows Terminal whenever you want a single, scriptable shell host for mixed Windows + Linux workflows; the main alternative is WezTerm or the older Console Host (conhost.exe) that still ships as the legacy default.

What's new in 2026

Two parallel channels are active — Stable ships from the release-1.24 branch, Preview is on the release-1.25 branch. Current heads (May 2026):

ChannelLatestReleasedHighlights
Stablev1.24.11321.02026-05-13URL warning dialog; new safeUriSchemes setting; Store licensing checks disabled for faster cold start; fixes for Sixel image memory leak and spontaneous tab-title resets
Previewv1.25.1322.02026-05-13Same URL warning improvements; further fixes on top of v1.25.622

Headline preview features that landed in v1.25.622 (March 5, 2026):

  • Searchable Settings page — Ctrl+F inside Settings filters across every category.
  • Action / keybinding editor — fully GUI-editable bindings; you no longer have to hand-edit actions[] JSON.
  • Kitty keyboard protocol support, so apps that need disambiguated modifier keys (Helix, Neovim, etc.) work correctly.
  • Extensions page lists every fragment-installed profile, scheme, and action so you can see what an extension contributed.
  • Synchronized Output (DEC private mode ?2026) is now honored — terminal-rendered TUIs render without tearing.
  • Window layout persistence can survive sign-out via firstWindowPreference: persistedWindowLayout.
  • A back-port (v1.23.20211.0, January 24, 2026) adds DECSET 2026 Synchronized Output to the older stable line too.

If you installed from winget, upgrade with winget upgrade Microsoft.WindowsTerminal (or Microsoft.WindowsTerminal.Preview for the preview channel).

Install

Windows Terminal ships preinstalled on Windows 11 and is one winget (or choco) command away on Windows 10 22H2+. The Microsoft Store auto-updates the stable channel; the Preview channel ships pre-release features about a month early.

powershell
# Stable (recommended)
winget install --id Microsoft.WindowsTerminal

# Preview channel (new features early)
winget install --id Microsoft.WindowsTerminal.Preview

# Chocolatey alternative
choco install microsoft-windows-terminal -y

Output:

text
Found Windows Terminal [Microsoft.WindowsTerminal] Version 1.20.11781.0
Downloading https://github.com/microsoft/terminal/releases/download/v1.20.11781.0/Microsoft.WindowsTerminal_1.20.11781.0_8wekyb3d8bbwe.msixbundle
Successfully installed

Launching it

The window is launched via wt.exe (the protocol shortcut wt:), through the Start menu, or by right-clicking a folder in File Explorer for the "Open in Terminal" option (Windows 11 adds this by default).

powershell
# Open default profile in the user's home directory
wt

# Open in a specific path
wt -d "C:\Users\Alice\code\jockey"

# Open a specific profile by name
wt -p "Ubuntu"
wt -p "PowerShell"
wt -p "Command Prompt"

Output: (none — a new Terminal window opens)

settings.json structure

All configuration lives in a single settings.json file. Open it with Ctrl+, (or click the down-arrow in the tab bar → Settings → "Open JSON file"). The file uses three top-level keys you'll touch most often: defaults (settings inherited by every profile), profiles.list (one entry per shell), schemes (named colour palettes), and actions (keybindings).

powershell
# Stable channel location
C:\Users\Alice\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json

# Preview channel
C:\Users\Alice\AppData\Local\Packages\Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe\LocalState\settings.json

# Unpackaged (portable) install
%LOCALAPPDATA%\Microsoft\Windows Terminal\settings.json

Output: (path string only — no command output)

Skeleton of a minimal settings.json:

json
{
  "$schema": "https://aka.ms/terminal-profiles-schema",
  "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
  "copyOnSelect": true,
  "copyFormatting": "none",
  "theme": "dark",
  "profiles": {
    "defaults": {
      "fontFace": "Cascadia Code NF",
      "fontSize": 11,
      "useAcrylic": true,
      "opacity": 90,
      "padding": "8, 8, 8, 8",
      "antialiasingMode": "cleartype",
      "scrollbarState": "hidden"
    },
    "list": [
      {
        "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
        "name": "PowerShell",
        "commandline": "pwsh.exe -NoLogo",
        "colorScheme": "Campbell Powershell",
        "startingDirectory": "%USERPROFILE%"
      }
    ]
  },
  "schemes": [],
  "actions": []
}

Output: (config file only — no shell output)

Top-level settings

These keys live at the root of settings.json and govern the whole window — startup behaviour, theme, and global keybind handlers. Edit them once and every profile and tab inherits the result.

KeyPurpose
defaultProfileGUID of the profile that opens in a new tab
initialCols / initialRowsStartup window dimensions in cells
launchMode"default", "maximized", "fullscreen", "focus", "maximizedFocus"
theme"light", "dark", "system", or a custom theme name
copyOnSelectAuto-copy selected text
copyFormatting"none", "html", "rtf", "all"
wordDelimitersCharacters that act as word boundaries for double-click selection
tabSwitcherMode"mru" (most-recently-used), "inOrder", or "disabled"
startOnUserLoginAuto-launch on sign-in
firstWindowPreference"defaultProfile" or "persistedWindowLayout" (restore last layout)

Profiles

A profile defines a single launchable shell — a name, a command line to run, an icon, a colour scheme, and any overrides for the defaults block. Each profile has a stable guid that other config keys (notably defaultProfile) reference. New shells (a fresh winget install of pwsh, a new WSL distro) are auto-discovered and given a generated profile that you can then customise.

json
{
  "guid": "{a5a97cb8-8961-5535-816d-772efe0c6a3f}",
  "name": "PowerShell 7 — dev",
  "commandline": "pwsh.exe -NoLogo -WorkingDirectory C:\\Users\\Alice\\code",
  "icon": "ms-appx:///ProfileIcons/{61c54bbd-c2c6-5271-96e7-009a87ff44bf}.png",
  "startingDirectory": "%USERPROFILE%\\code",
  "tabTitle": "dev",
  "suppressApplicationTitle": false,
  "hidden": false,
  "colorScheme": "One Half Dark",
  "fontFace": "JetBrainsMono NF",
  "fontSize": 12,
  "cursorShape": "filledBox",
  "useAcrylic": false,
  "opacity": 100,
  "scrollbarState": "visible",
  "experimental.retroTerminalEffect": false
}

Output: (profile entry inside profiles.list — no shell output)

Per-profile keys worth knowing

These keys are the most useful overrides per profile — point them at a non-default font, a custom prompt, or a specific working directory without touching the global defaults.

KeyMeaning
commandlineExecutable + arguments to launch
startingDirectoryWorking directory; supports %USERPROFILE% and absolute paths
tabTitleOverride the tab caption (otherwise the shell sets it)
colorSchemeName of an entry in the schemes array
fontObject: { "face": "...", "size": 11, "weight": "normal" } (newer schema)
fontFace / fontSizeLegacy flat keys (still work)
cursorShape"bar", "vintage", "underscore", "filledBox", "emptyBox", "doubleUnderscore"
useAcrylic + opacityTranslucent window with desktop blur
backgroundImagePath to an image file shown behind the text
paddingCSS-style "top, right, bottom, left"
closeOnExit"always", "graceful", "never", "automatic"
elevatetrue to always launch this profile elevated (UAC prompt)
hiddentrue to hide the profile from the dropdown but keep it usable via wt -p

Profile for PowerShell 7

The "PowerShell" profile that ships out of the box launches the built-in Windows PowerShell 5.1 (powershell.exe). For PowerShell 7, install Microsoft.PowerShell via winget and add this profile manually — or let Terminal auto-discover it after a restart.

json
{
  "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
  "name": "PowerShell 7",
  "commandline": "pwsh.exe -NoLogo",
  "source": "Windows.Terminal.PowershellCore",
  "icon": "ms-appx:///ProfileIcons/{61c54bbd-c2c6-5271-96e7-009a87ff44bf}.png",
  "startingDirectory": "%USERPROFILE%",
  "colorScheme": "Campbell Powershell",
  "fontFace": "Cascadia Code NF"
}

Output: (profile entry — no shell output)

Profile for WSL

WSL distros installed via wsl --install -d Ubuntu are auto-discovered by Windows Terminal and appear with a source of Windows.Terminal.Wsl. You generally only override startingDirectory and colorScheme; the commandline is computed by Terminal.

json
{
  "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
  "name": "Ubuntu",
  "source": "Windows.Terminal.Wsl",
  "startingDirectory": "//wsl.localhost/Ubuntu/home/alice",
  "colorScheme": "One Half Dark",
  "fontFace": "FiraCode NF"
}

Output: (profile entry — no shell output)

Profile for SSH

Windows Terminal has no native SSH client; instead, point a profile at OpenSSH (ssh.exe, shipped in Windows 10/11). This makes every common SSH host a one-click profile in the dropdown.

json
{
  "guid": "{8e4b2c64-9c1b-4f1d-8c1a-9b9d8e5f7a01}",
  "name": "MYHOST via SSH",
  "commandline": "ssh.exe alice@myhost",
  "icon": "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
  "colorScheme": "Solarized Dark",
  "tabTitle": "MYHOST",
  "closeOnExit": "graceful"
}

Output: (profile entry — no shell output)

Profile for cmd.exe

Classic cmd.exe is auto-discovered too and is worth keeping pinned for legacy batch files and tools that misbehave under PowerShell. Override commandline if you want it to chain into a setup .bat (e.g. a Visual Studio developer environment).

json
{
  "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
  "name": "Developer Command Prompt for VS",
  "commandline": "cmd.exe /k \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\Tools\\VsDevCmd.bat\"",
  "icon": "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
  "startingDirectory": "%USERPROFILE%\\source\\repos",
  "colorScheme": "Campbell"
}

Output: (profile entry — no shell output)

Colour schemes

A scheme is a named 16-colour palette plus a background, foreground, cursorColor, and selectionBackground. Terminal ships with ~10 built-ins (Campbell, Vintage, One Half Dark, Solarized Dark/Light, Tango Dark/Light) — add your own under the top-level schemes array and reference it from a profile's colorScheme field.

json
"schemes": [
  {
    "name": "Catppuccin Mocha",
    "background": "#1E1E2E",
    "foreground": "#CDD6F4",
    "cursorColor": "#F5E0DC",
    "selectionBackground": "#585B70",
    "black":         "#45475A",
    "red":           "#F38BA8",
    "green":         "#A6E3A1",
    "yellow":        "#F9E2AF",
    "blue":          "#89B4FA",
    "purple":        "#F5C2E7",
    "cyan":          "#94E2D5",
    "white":         "#BAC2DE",
    "brightBlack":   "#585B70",
    "brightRed":     "#F38BA8",
    "brightGreen":   "#A6E3A1",
    "brightYellow":  "#F9E2AF",
    "brightBlue":    "#89B4FA",
    "brightPurple":  "#F5C2E7",
    "brightCyan":    "#94E2D5",
    "brightWhite":   "#A6ADC8"
  }
]

Output: (scheme entry — no shell output)

Apply the scheme to a profile:

json
{
  "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
  "name": "PowerShell",
  "colorScheme": "Catppuccin Mocha"
}

Output: (profile entry — no shell output)

Keybindings (the actions array)

actions (formerly keybindings) is an array of objects, each binding one or more key chords to a single action. Each entry has a command (string or object), one or more keys, and optionally an id so it can be edited from the Settings UI without losing custom bindings. Use the unbound command to remove a default binding.

json
"actions": [
  { "command": { "action": "newTab", "profile": "PowerShell" },              "keys": "ctrl+shift+1" },
  { "command": { "action": "newTab", "profile": "Ubuntu"     },              "keys": "ctrl+shift+2" },
  { "command": "closeTab",                                                    "keys": "ctrl+w" },
  { "command": "find",                                                        "keys": "ctrl+shift+f" },
  { "command": "commandPalette",                                              "keys": "ctrl+shift+p" },
  { "command": { "action": "splitPane", "split": "right", "splitMode": "duplicate" }, "keys": "alt+shift+d" },
  { "command": { "action": "splitPane", "split": "down"  }, "keys": "alt+shift+minus" },
  { "command": { "action": "splitPane", "split": "right" }, "keys": "alt+shift+plus"  },
  { "command": { "action": "moveFocus", "direction": "right" }, "keys": "alt+right" },
  { "command": { "action": "moveFocus", "direction": "left"  }, "keys": "alt+left"  },
  { "command": { "action": "resizePane", "direction": "right" }, "keys": "ctrl+alt+right" },
  { "command": { "action": "copy", "singleLine": false },                     "keys": "ctrl+c" },
  { "command": "paste",                                                       "keys": "ctrl+v" },
  { "command": "scrollUpPage",                                                "keys": "shift+pageup" },
  { "command": "scrollDownPage",                                              "keys": "shift+pagedown" },
  { "command": "toggleFullscreen",                                            "keys": "f11" },
  { "command": "unbound",                                                     "keys": "ctrl+t" }
]

Output: (keybindings only — no shell output)

Most useful built-in bindings

These bindings ship enabled by default; learn the ones you don't already know and you'll work faster without editing settings.json at all.

ChordAction
Ctrl+Shift+PCommand palette (fuzzy-search every action)
Ctrl+Shift+TNew tab with default profile
Ctrl+Tab / Ctrl+Shift+TabNext / previous tab
Ctrl+Shift+SpaceOpen the profile dropdown
Alt+Shift+DSplit pane (auto direction)
Alt+Shift+- / Alt+Shift++Split pane vertically / horizontally
Alt+arrowMove focus between panes
Ctrl+Shift+WClose pane (or tab if only one pane)
Ctrl+Shift+FFind in scrollback
Ctrl+0Reset font size
Ctrl++ / Ctrl+-Zoom in / out
Alt+EnterToggle fullscreen
Ctrl+Shift+,Open settings.json in default editor

Command palette

The command palette (Ctrl+Shift+P) is a fuzzy-search overlay listing every command, profile, and tab. Type a few letters to invoke any keybinding without remembering its chord — invaluable when you've added 30+ custom actions. Switch the palette into "command-line mode" by prefixing the input with > to enter raw wt-style sub-commands.

text
> split-pane -p "Ubuntu" -d /home/alice
> new-tab -p "PowerShell 7" -d C:\code
> move-focus right

Output: (palette input — palette executes the command in-context)

Split panes

Panes split the current tab into independent shell views you can rearrange and resize without spawning new tabs. The auto-split heuristic (Alt+Shift+D) picks the orientation based on the current pane's aspect ratio; explicit split: "right" / "down" keys force a direction. Closing the last pane in a tab closes the tab.

powershell
# Open the window with a PS7 pane and a WSL pane already split
wt -p "PowerShell 7" `; split-pane -V -p "Ubuntu" `; focus-pane -t 0

Output: (none — a new window opens already split)

powershell
# Three panes: pwsh on the left, two stacked on the right
wt new-tab -p "PowerShell 7" `; `
   split-pane -H -p "PowerShell 7" -d C:\logs `; `
   split-pane -V -p "Ubuntu"

Output: (none — three-pane layout opens)

The wt.exe CLI

wt.exe is the command-line entry point: every action that the GUI can do is also a sub-command. Sub-commands are chained with the backtick semicolon ( ; ) in PowerShell (or a literal ;in cmd) so that one launch can build a full multi-tab, multi-pane workspace. Combine withStart-Process` to launch detached.

powershell
# Three tabs in one window: shell, logs, monitor
wt new-tab -p "PowerShell 7" -d C:\Users\Alice\code `; `
   new-tab -p "PowerShell 7" -d C:\logs       --title "Logs" `; `
   new-tab -p "Ubuntu"                         --title "WSL"

Output: (none — new window with 3 named tabs)

powershell
# A "dashboard" layout — single window, 4 panes
wt new-tab -p "PowerShell 7" -d C:\Users\Alice\code `; `
   split-pane -V -p "PowerShell 7" -d C:\logs   `; `
   split-pane -H -p "Ubuntu"                    `; `
   move-focus left                              `; `
   split-pane -H -p "Ubuntu"

Output: (none — 4-pane dashboard opens)

wt.exe flags worth knowing

These are the flags most often used in launcher scripts and shortcut targets.

FlagMeaning
-p, --profile NAMEProfile to use for the tab/pane
-d, --startingDirectory PATHOverride working dir for the tab/pane
--title TEXTInitial tab title
--tabColor #RRGGBBTinted tab strip
-w, --window ID|NAMETarget an existing window by id, name, or 0 (current)
--maximized / --fullscreen / --focusLaunch mode
--colorScheme NAMEOverride scheme for the new pane
new-tabSub-command — open a new tab
split-pane -H|-VSub-command — split horizontally / vertically
focus-tab -t NSub-command — focus tab by index
move-focus DIRSub-command — move focus within a tab

Window layouts (firstWindowPreference)

Set "firstWindowPreference": "persistedWindowLayout" to make Terminal save and restore every window, tab, and pane on exit — including working directories. Combine with the windowingBehavior setting to control whether wt.exe opens a new window or attaches to an existing one.

json
{
  "firstWindowPreference": "persistedWindowLayout",
  "windowingBehavior": "useNew",
  "useAcrylicInTabRow": true
}

Output: (config — affects next launch)

Default terminal application

On Windows 11 22H2+, Windows Terminal can register itself as the system-wide default for all console apps (replacing the legacy conhost.exe). Configure under Settings → Startup → Default terminal application, or set it programmatically:

powershell
# Set Windows Terminal as the default for cmd, pwsh, ssh, etc.
$reg = "HKCU:\Console\%%Startup"
New-Item -Path $reg -Force | Out-Null
Set-ItemProperty -Path $reg -Name DelegationConsole `
  -Value "{2EACA947-7F5F-4CFA-BA87-8F7FBEEFBE69}"
Set-ItemProperty -Path $reg -Name DelegationTerminal `
  -Value "{E12CFF52-A866-4C77-8A90-F1B1F00EE6E0}"

Output: (none — affects new console launches)

Multiple settings layers (fragments)

Apps can ship "fragment" extensions that register their own profiles or schemes without touching settings.json. PowerShell 7 and Azure CLI use this to install themselves cleanly. Drop a fragment JSON under:

text
%LOCALAPPDATA%\Microsoft\Windows Terminal\Fragments\<app>\<file>.json
%ProgramData%\Microsoft\Windows Terminal\Fragments\<app>\<file>.json

Output: (path only — fragment loaded on next start)

A minimal fragment that adds a "Cloud" SSH profile to every user who installs your app:

json
{
  "profiles": [
    {
      "updates": "{auto-generated-guid}",
      "name": "Acme Cloud SSH",
      "commandline": "ssh.exe alice@acme.example.com",
      "icon": "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
      "colorScheme": "One Half Dark"
    }
  ],
  "schemes": []
}

Output: (fragment file — profile appears on next launch)

Fonts and Nerd Fonts

Cascadia Code (Microsoft's terminal font) is bundled with Windows Terminal. For powerline arrows, devicons, and modern shell prompts (oh-my-posh, starship), install a Nerd Font variant — Cascadia Code NF, JetBrainsMono NF, or FiraCode NF are the usual picks. Then point fontFace at the patched family.

powershell
# Install Nerd Fonts via scoop
scoop bucket add nerd-fonts
scoop install Cascadia-Code FiraCode-NF JetBrainsMono-NF

# Or via Chocolatey
choco install cascadia-code-nerd-font -y

Output: (none — fonts installed for the current user)

Common pitfalls

  1. commandline paths with spaces — must be JSON-escaped: "C:\\Program Files\\...". Single backslashes silently break the profile.
  2. Profile hidden: true — Terminal sometimes flips this on auto-discovered profiles you've never seen; check it before assuming a shell is missing.
  3. startingDirectory for WSL — use the //wsl.localhost/<distro>/home/alice UNC path, not a C:\ path, or PowerShell-style \ paths fail.
  4. GUID conflicts — every profile needs a unique guid; reusing one across two entries silently merges them at runtime.
  5. copyOnSelect + Ctrl+C — when both are enabled, Ctrl+C is a copy when text is selected and SIGINT when it isn't. This catches people who expect to break a hanging command.
  6. Default profile dropped on update — if defaultProfile references a GUID that no longer exists, Terminal silently picks the first profile on launch. Reseat it after uninstalling a shell.
  7. elevate: true doesn't elevate the existing window — it spawns a new elevated window; mixed-elevation tabs aren't supported.

Real-world recipes

One-liner that opens a development workspace

The goal is a Start menu shortcut that opens a window with three named tabs: PS7 in the repo, PS7 in the logs folder, and an Ubuntu pane for git/make. Wrap the wt invocation in a .ps1 and bind it to a Win key shortcut.

powershell
$cmd = @"
new-tab -p "PowerShell 7" -d C:\Users\Alice\code\jockey --title "code" ;
new-tab -p "PowerShell 7" -d C:\logs                    --title "logs" ;
new-tab -p "Ubuntu"                                      --title "wsl"
"@
Start-Process wt.exe -ArgumentList $cmd.Replace("`r`n", " ")

Output: (none — a 3-tab window opens)

Profile that loads oh-my-posh and PSReadLine predictive history

Combine a customised pwsh.exe commandline with a $PROFILE script and oh-my-posh for a polished shell. The commandline itself just launches pwsh -NoLogo; the heavy lifting lives in the profile script that runs on every new pane.

json
{
  "guid": "{a5a97cb8-8961-5535-816d-772efe0c6a3f}",
  "name": "PowerShell 7 — Pretty",
  "commandline": "pwsh.exe -NoLogo",
  "fontFace": "JetBrainsMono NF",
  "fontSize": 12,
  "colorScheme": "Catppuccin Mocha",
  "useAcrylic": true,
  "opacity": 88,
  "cursorShape": "filledBox"
}

Output: (profile entry — no shell output)

powershell
# $PROFILE.CurrentUserAllHosts — loaded by every pwsh process
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\catppuccin_mocha.omp.json" | Invoke-Expression
Import-Module PSReadLine
Set-PSReadLineOption -PredictionSource HistoryAndPlugin -PredictionViewStyle ListView -EditMode Windows
Set-PSReadLineKeyHandler -Key Tab        -Function MenuComplete
Set-PSReadLineKeyHandler -Key UpArrow    -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow  -Function HistorySearchForward

Output:

text
   Alice in ~/code/jockey on  main [+1]
❯

Tab-tinted "production / staging / dev" environment indicators

Use distinct tabColor values per environment so it is impossible to mis-target a kubectl apply at production. Wire each environment to its own profile.

json
{ "guid": "{...prod}",    "name": "kube — PROD",    "commandline": "pwsh -NoLogo -NoExit -Command \"kubectl config use-context prod\"",    "tabColor": "#c0392b", "colorScheme": "Catppuccin Mocha" },
{ "guid": "{...staging}", "name": "kube — staging", "commandline": "pwsh -NoLogo -NoExit -Command \"kubectl config use-context staging\"", "tabColor": "#f39c12", "colorScheme": "One Half Dark" },
{ "guid": "{...dev}",     "name": "kube — dev",     "commandline": "pwsh -NoLogo -NoExit -Command \"kubectl config use-context dev\"",     "tabColor": "#27ae60", "colorScheme": "Tango Dark"     }

Output: (3 profile entries — tabs render with coloured strips on launch)

Export and version-control settings

settings.json is plain JSON, so check it into a dotfiles repo and symlink it back into place on a new machine. The schema URL keeps your editor's IntelliSense pointed at the latest fields.

powershell
$wt   = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
$repo = "C:\Users\Alice\dotfiles\windows-terminal\settings.json"

# Snapshot current config into the repo
Copy-Item $wt $repo -Force

# Replace the live file with a symlink so future edits go to the repo
Remove-Item $wt -Force
New-Item -ItemType SymbolicLink -Path $wt -Target $repo

Output:

text
    Directory: C:\Users\Alice\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
l----          5/24/2026  10:15 AM              0 settings.json -> C:\Users\Alice\dotfiles\windows-terminal\settings.json

Background image and acrylic for a personalised look

Tasteful translucency makes the terminal feel "native"; a faint background image at low opacity is a personal touch that doesn't get in the way of text.

json
{
  "guid": "{a5a97cb8-8961-5535-816d-772efe0c6a3f}",
  "name": "PowerShell 7 — Pretty",
  "useAcrylic": true,
  "opacity": 85,
  "backgroundImage": "C:\\Users\\Alice\\Pictures\\terminal-bg.png",
  "backgroundImageOpacity": 0.15,
  "backgroundImageStretchMode": "uniformToFill",
  "backgroundImageAlignment": "bottomRight"
}

Output: (profile entry — visual change only)

Boot directly into a pinned workspace on login

startOnUserLogin + firstWindowPreference: persistedWindowLayout means your last layout is back the instant you sign in. Useful on a dedicated dev VM.

json
{
  "startOnUserLogin": true,
  "firstWindowPreference": "persistedWindowLayout",
  "windowingBehavior": "useExisting"
}

Output: (config — auto-launch on next sign-in)

Sources