Windows Terminal replaced the old Command Prompt/PowerShell window years ago, but most people never touch the settings past the defaults. A few changes make a real difference day to day.
Most of the profiles worth setting up here are WSL-based — see the WSL2 setup guide if you haven't already got a Linux distro running underneath Windows Terminal.
Finding the settings
Ctrl+, opens settings.json directly — the JSON config is more powerful than the settings UI and worth editing by hand once you know what you're changing.
Set a sane default profile
If you use WSL regularly, make it the default instead of PowerShell:
{
"defaultProfile": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}"
}Each profile has a GUID — find yours under "profiles" → "list" in the same file, next to whichever profile you want as default.
| Action | Keybinding |
|---|---|
| Split pane | Alt+Shift+D (auto direction) |
| Command palette | Ctrl+Shift+P |
| New tab | Ctrl+Shift+T |
| Close pane | Ctrl+Shift+W (custom, shown below) |
Split panes instead of multiple windows
{
"command": "splitPane",
"keys": "alt+shift+d"
}Splitting panes (horizontally or vertically) inside one tab, rather than juggling separate terminal windows, keeps related work — a dev server in one pane, a git status/log in another — visible at once.
Default split keybindings are Alt+Shift+D (auto direction), or you can bind explicit horizontal/vertical splits.
Useful custom keybindings
{
"actions": [
{ "command": "closePane", "keys": "ctrl+shift+w" },
{ "command": { "action": "nextTab" }, "keys": "ctrl+tab" },
{ "command": { "action": "prevTab" }, "keys": "ctrl+shift+tab" },
{ "command": "find", "keys": "ctrl+shift+f" }
]
}Quake mode — a dropdown terminal
{
"command": "globalSummon",
"keys": "win+`"
}Bound to a global hotkey, this drops a terminal down from the top of the screen from anywhere in Windows, like classic "Quake console" terminals — genuinely useful for a quick command without alt-tabbing to find an existing terminal window.
Color schemes and fonts
{
"profiles": {
"defaults": {
"colorScheme": "One Half Dark",
"font": {
"face": "CascadiaCode Nerd Font",
"size": 11
}
}
}
}A Nerd Font (a patched font with extra glyphs) is worth installing if you use a shell prompt theme like Starship or Oh My Posh — without one, prompt icons render as broken boxes.
Starting profiles in a specific directory
{
"profiles": {
"list": [
{
"name": "Projects",
"commandline": "wsl.exe",
"startingDirectory": "//wsl$/Ubuntu/home/you/projects"
}
]
}
}Useful for a dedicated profile that always opens straight into your main project directory instead of your home folder.
The actual payoff
None of these changes are individually dramatic — but a terminal you've tuned to open in the right place, with the right shell, split the way you want, with keybindings you don't have to think about, removes a dozen small frictions from a tool you likely have open for most of your working day.
Command Palette and fuzzy actions
Ctrl+Shift+P opens Windows Terminal's own command palette — a searchable list of every action the terminal supports (splitting panes, switching profiles, renaming a tab), without needing to remember or bind a dedicated keybinding for each one:
{
"command": "commandPalette",
"keys": "ctrl+shift+p"
}This is genuinely useful for actions used rarely enough that a dedicated keybinding isn't worth memorizing (renaming a tab, changing a pane's color scheme on the fly) but common enough that hunting through a settings menu each time is annoying.
Custom actions for common WSL workflows
For developers splitting time between Windows tools and a WSL-based Linux environment, a dedicated action to open a new WSL pane in the current directory removes a repeated bit of friction:
{
"command": {
"action": "splitPane",
"commandline": "wsl.exe -d Ubuntu",
"split": "auto"
},
"keys": "alt+shift+l"
}Combined with the startingDirectory setting from the profile section above, this gets a new Linux pane opened directly into a project directory with one keybinding, instead of opening a new tab and cd-ing manually each time.
Backing up and syncing settings across machines
settings.json lives at a predictable path (%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json for the Store version), which makes it straightforward to keep under version control alongside other dotfiles rather than reconfiguring by hand on every new machine:
New-Item -ItemType SymbolicLink `
-Path "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json" `
-Target "$HOME\dotfiles\windows-terminal-settings.json"Symlinking (rather than copying) means future edits made through the settings UI or by hand still land in the tracked dotfiles repo automatically, the same pattern worth using for any per-machine config file you don't want to lose or re-create from memory.
Per-profile transparency and acrylic effects
Visual settings are scoped per-profile, not just global, which is useful for giving different profiles a distinct look — a subtle visual cue for "this is my production SSH profile" versus a local dev shell, for instance:
{
"profiles": {
"list": [
{
"name": "Production SSH",
"opacity": 85,
"useAcrylic": true,
"colorScheme": "Campbell",
"background": "#3a0000"
}
]
}
}A distinctly colored background on a profile used for connecting to production is a small, low-effort safeguard against the very real mistake of running a command in the wrong terminal window entirely — a quick glance at the color tells you which environment you're in before you type anything.
Common mistakes
- Editing
settings.jsonwith a trailing comma after the last item in an object or array — valid in some looser JSON parsers, invalid here, and it fails silently rather than with a clear error. - Binding a custom keybinding to a combination already used by the shell or a running application inside the pane (e.g.
Ctrl+Finside vim) — the terminal-level binding wins, which can make it look like the inner application's shortcut "stopped working." - Setting a Nerd Font as the profile font without actually installing it first — the terminal falls back to a default font and prompt icons render as empty boxes, which looks like a terminal bug but is actually a missing font.
- Forgetting that
startingDirectorypaths for WSL profiles use the\\wsl$\UNC path format, not a plain Linux path — a plain/home/you/projectswon't resolve from Windows Terminal's profile config.
Related reading
- WSL2 Setup Guide: Running Linux on Windows for Development — shares tags: windows, productivity (same category).
- Big O Notation Without the Math Panic — shares tags: productivity.
- Clean Code Principles That Actually Hold Up in Practice — shares tags: productivity.
- Understanding Cloud Cost Optimization Basics — shares tags: productivity.
- Git Hooks Explained: Automate Your Workflow — shares tags: productivity.