Per-shortcut overrides
Give each shortcut its own layout, filters, sorting and appearance — plus scoped shortcuts.
Every switcher shortcut normally uses the global settings. shortcutOverrides lets a
shortcut disagree: a compact alphabetical list for one hotkey, full-size window
previews for another, from the same install.
This pairs with scopedShortcutList, which creates additional hotkeys that open the
switcher pre-filtered to a subset of windows. Together: one hotkey for "all my
windows as previews", another for "just this app's windows, as a list".
Targets
An override names the shortcut it applies to in its target field:
target | Shortcut |
|---|---|
switchApps | The main switcher (⌘Tab by default) |
switchWindows | The window switcher (⌘` by default) |
scoped.<id> | A scoped shortcut, where <id> is its id in scopedShortcutList |
{
"shortcutOverrides": [
{
"target": "switchWindows",
"layoutMode": "windowPreview",
"panelScalePercent": "140",
"sortOrder": "mruWindows"
},
{
"target": "scoped.0",
"layoutMode": "list",
"listWidthPercent": "60",
"showMinimized": "false"
}
]
}Override values are strings
Overrides are stored as string dictionaries, so every value is written as a JSON
string — "140" not 140, "false" not false. The global keys they mirror use
their natural types. The generated schema.json enforces this, so your editor will
flag it.
Any field you omit inherits the global setting. An override with nothing but a
target is the same as having no override at all, and is dropped when the file is
next written.
Fields
Field names mostly match the global key of the same name — see the
config reference for what each one does. Three are
shortened: showMinimized, showHidden and showWindowless map to
showMinimizedWindows, showHiddenApps and showWindowlessApps.
spaceScope takes an extra value here, "inherit", which follows the global setting.
Per-shortcut overrides of the global settings. Each entry names its shortcut in "target"; every other field is optional and inherits the global value when absent.
| Field | Type | Description |
|---|---|---|
target required | string | Which shortcut this entry overrides. |
applicationsOnly | string | Override: Show one entry per app instead of one per window.
|
backdropMaterial | string | Override: Blur material behind the rows. Ignored by the macOS 26 glass backdrop.
|
boldSelectedLabel | string | Override: Show the highlighted entry's title in bold.
|
expandBrowserTabsAsWindows | string | Override: List browser tabs (Safari, Chromium) as separate entries.
|
fontFace | string | Override: Typeface used for names and titles.
|
fontScale | string | Override: Size of the name/title text, independent of the panel scale.
|
gridMaxColumns | string | Override: Column cap for the grid layout. 0 = automatic (as many as fit). Accepted: 0…12. Written as a decimal string. |
layoutMode | string | Override: Switcher layout: list rows, an icon grid, or window previews.
|
letterHintsEnabled | string | Override: Show the letter that jumps to each entry.
|
listWidthPercent | string | Override: Width of list rows as a percentage of the automatic, screen-scaled width. Accepted: 30…100. Written as a decimal string. |
panelAppearance | string | Override: Light or dark switcher, independent of the rest of macOS.
|
panelCornerRadius | string | Override: Panel corner radius in points. 0 = automatic (follows the panel size), -1 = square corners. Accepted: -1…40. Written as a decimal string. |
panelOpacity | string | Override: Opacity of the panel background, in percent. Accepted: 30…100. Written as a decimal string. |
panelScalePercent | string | Override: Overall size of the switcher panel, in percent. Accepted: 50…150. Written as a decimal string. |
panelSize | string | Legacy size preset, read once and migrated to panelScalePercent.
|
previewTitleAlignment | string | Override: Where the title sits under each window-preview tile.
|
showApplicationNames | string | Override: Show application names next to the icons.
|
showHidden | string | Override: Include apps hidden with ⌘H.
|
showMinimized | string | Override: Include minimized windows.
|
showUnreadBadges | string | Override: Show each app's Dock unread badge on its entry.
|
showWindowless | string | Override: Include running apps that have no open window.
|
showWindowTitleLabel | string | Override: Show each window's title, not just its app.
|
sortOrder | string | Override: Order apps and windows are listed in.
|
spaceScope | string | Override: which Spaces windows are pulled from. "inherit" follows the global spaceScope.
|
stayOpenOnQuickTap | string | Override: Also keep it open after a quick tap of the shortcut.
|
stayOpenOnRelease | string | Override: Keep the switcher open after the modifier is released.
|
titleTruncationMode | string | Override: Which part of a too-long title is replaced by an ellipsis.
|
Unknown fields are preserved as-is rather than dropped, so opening your config with an older version of the app will not strip overrides it doesn't understand yet.
Scoped shortcuts
scopedShortcutList defines extra global hotkeys, each opening the switcher already
filtered. Add and remove them under Settings → Profiles.
{
"scopedShortcutList": [
{ "id": "0", "scope": "currentAppWindows", "name": "scopedSwitch1" },
{ "id": "1", "scope": "minimizedOnly", "name": "scopedSwitch2" }
]
}Scoped switcher shortcuts — each opens the panel already filtered to one subset of windows.
| Field | Type | Description |
|---|---|---|
id required | string | Stable id of this entry, as a decimal string. Keys its recorded trigger and its shortcutOverrides entry — never reused. |
name required | string | Name the trigger chord is recorded under (the chord itself is stored outside this file). |
scope | string | Which windows the shortcut shows.
|
The key combination is not in this file
name is the label the chord is recorded under; the chord itself lives outside the
Switcher.* namespace and is not synced. Copying your config to another Mac carries
the scoped shortcuts and their settings over — you re-record their key combinations
there, under Settings → Profiles.
Ids are allocated monotonically and never reused, so an entry keeps its recorded chord
and its shortcutOverrides entry across adds, removes and reordering. id is a
decimal string, matching how the list is stored.
Do not hand-pick ids that collide with an existing entry, and leave
nextScopedShortcutID alone — it is the allocator's counter. Adding entries through
the settings window avoids both problems.
Direct app hotkeys
Unrelated to scoped shortcuts, but often wanted alongside them: directActivationBindings
assigns a bundle ID to each of nine "focus or launch this app" hotkey slots. It is
always exactly nine entries; an empty string leaves a slot unused.
{
"directActivationBindings": [
"com.apple.Safari",
"com.googlecode.iterm2",
"",
"",
"",
"",
"",
"",
""
]
}The chords for these slots are, again, recorded outside this file.
Worked example
A setup with three distinct switchers:
{
"layoutMode": "iconDock",
"sortOrder": "mru",
"spaceScope": "allSpaces",
"scopedShortcutList": [
{ "id": "0", "scope": "currentAppWindows", "name": "scopedSwitch1" }
],
"shortcutOverrides": [
{
"target": "switchWindows",
"layoutMode": "windowPreview",
"sortOrder": "mruWindows",
"panelScalePercent": "130"
},
{
"target": "scoped.0",
"layoutMode": "list",
"listWidthPercent": "50",
"showWindowTitleLabel": "true",
"spaceScope": "inherit"
}
]
}- ⌘Tab — icon grid of apps, most-recent first, across all Spaces.
- ⌘` — large window previews of the front app, ordered by most recent window.
- The scoped hotkey — a narrow list of the current app's windows with full titles.