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):
| Channel | Latest | Released | Highlights |
|---|---|---|---|
| Stable | v1.24.11321.0 | 2026-05-13 | URL warning dialog; new safeUriSchemes setting; Store licensing checks disabled for faster cold start; fixes for Sixel image memory leak and spontaneous tab-title resets |
| Preview | v1.25.1322.0 | 2026-05-13 | Same 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.
# 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:
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).
# 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).
# 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:
{
"$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.
| Key | Purpose |
|---|---|
defaultProfile | GUID of the profile that opens in a new tab |
initialCols / initialRows | Startup window dimensions in cells |
launchMode | "default", "maximized", "fullscreen", "focus", "maximizedFocus" |
theme | "light", "dark", "system", or a custom theme name |
copyOnSelect | Auto-copy selected text |
copyFormatting | "none", "html", "rtf", "all" |
wordDelimiters | Characters that act as word boundaries for double-click selection |
tabSwitcherMode | "mru" (most-recently-used), "inOrder", or "disabled" |
startOnUserLogin | Auto-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.
{
"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.
| Key | Meaning |
|---|---|
commandline | Executable + arguments to launch |
startingDirectory | Working directory; supports %USERPROFILE% and absolute paths |
tabTitle | Override the tab caption (otherwise the shell sets it) |
colorScheme | Name of an entry in the schemes array |
font | Object: { "face": "...", "size": 11, "weight": "normal" } (newer schema) |
fontFace / fontSize | Legacy flat keys (still work) |
cursorShape | "bar", "vintage", "underscore", "filledBox", "emptyBox", "doubleUnderscore" |
useAcrylic + opacity | Translucent window with desktop blur |
backgroundImage | Path to an image file shown behind the text |
padding | CSS-style "top, right, bottom, left" |
closeOnExit | "always", "graceful", "never", "automatic" |
elevate | true to always launch this profile elevated (UAC prompt) |
hidden | true 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.
{
"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.
{
"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.
{
"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).
{
"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.
"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:
{
"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.
"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.
| Chord | Action |
|---|---|
Ctrl+Shift+P | Command palette (fuzzy-search every action) |
Ctrl+Shift+T | New tab with default profile |
Ctrl+Tab / Ctrl+Shift+Tab | Next / previous tab |
Ctrl+Shift+Space | Open the profile dropdown |
Alt+Shift+D | Split pane (auto direction) |
Alt+Shift+- / Alt+Shift++ | Split pane vertically / horizontally |
Alt+arrow | Move focus between panes |
Ctrl+Shift+W | Close pane (or tab if only one pane) |
Ctrl+Shift+F | Find in scrollback |
Ctrl+0 | Reset font size |
Ctrl++ / Ctrl+- | Zoom in / out |
Alt+Enter | Toggle 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.
> 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.
# 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)
# 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.
# 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)
# 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.
| Flag | Meaning |
|---|---|
-p, --profile NAME | Profile to use for the tab/pane |
-d, --startingDirectory PATH | Override working dir for the tab/pane |
--title TEXT | Initial tab title |
--tabColor #RRGGBB | Tinted tab strip |
-w, --window ID|NAME | Target an existing window by id, name, or 0 (current) |
--maximized / --fullscreen / --focus | Launch mode |
--colorScheme NAME | Override scheme for the new pane |
new-tab | Sub-command — open a new tab |
split-pane -H|-V | Sub-command — split horizontally / vertically |
focus-tab -t N | Sub-command — focus tab by index |
move-focus DIR | Sub-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.
{
"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:
# 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:
%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:
{
"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.
# 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
commandlinepaths with spaces — must be JSON-escaped:"C:\\Program Files\\...". Single backslashes silently break the profile.- Profile
hidden: true— Terminal sometimes flips this on auto-discovered profiles you've never seen; check it before assuming a shell is missing. startingDirectoryfor WSL — use the//wsl.localhost/<distro>/home/aliceUNC path, not aC:\path, or PowerShell-style\paths fail.- GUID conflicts — every profile needs a unique
guid; reusing one across two entries silently merges them at runtime. 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.- Default profile dropped on update — if
defaultProfilereferences a GUID that no longer exists, Terminal silently picks the first profile on launch. Reseat it after uninstalling a shell. elevate: truedoesn'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.
$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.
{
"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)
# $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:
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.
{ "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.
$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:
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.
{
"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.
{
"startOnUserLogin": true,
"firstWindowPreference": "persistedWindowLayout",
"windowingBehavior": "useExisting"
}
Output: (config — auto-launch on next sign-in)