Skip to main content
This page documents every top-level key accepted by FlightDeck’s TOML configuration file. The config file is loaded from ~/.flightdeck.toml, ${XDG_CONFIG_HOME}/flightdeck/flightdeck.toml, ~/.aerospace.toml, or ${XDG_CONFIG_HOME}/aerospace/aerospace.toml (a flightdeck.toml takes precedence; see Custom config location). See the Guide for a narrative introduction, and default-config.toml for a ready-to-copy starter. A dynamic value can be either a scalar or a per-monitor array:

config-version

Type: Integer · Default: 1 · Range: 12 Declares the config format version. Required to use options that are only available from a given version (e.g. persistent-workspaces requires config-version = 2).

after-startup-command

Type: String or array of FlightDeck commands · Default: [] Commands to run after FlightDeck starts.

after-login-command

Type: Array · Default: [] · Status: Deprecated since AeroSpace 0.19.0 Previously ran commands after macOS login. Removed in favour of after-startup-command. An empty array is accepted for backwards compatibility; any non-empty value is a parse error.

start-at-login

Type: Boolean · Default: false Register FlightDeck as a login item so it starts automatically when you log in to macOS.

auto-reload-config

Type: Boolean · Default: false Reload the config automatically whenever the config file is saved. After enabling this option, reload once manually to activate auto-reload.

automatically-unhide-macos-hidden-apps

Type: Boolean · Default: false Automatically un-hide applications that were hidden with macOS ⌘H / ⌘⌥H. Useful if you never intentionally hide apps and want to avoid accidentally losing windows.

focus-follows-mouse

Type: Table · Default: disabled Focus the normal managed window under the pointer when the pointer enters it. Fullscreen windows and accessibility elements that do not represent normal windows are ignored.

Nested keys

focus-next-window-on-window-closed

Type: Boolean · Default: true Controls what happens to focus when the focused application’s final managed window is closed. When true (the default), FlightDeck lets focus move to the next window. This matches standard macOS behavior and avoids leaving a focused application that no longer has any windows. When false, FlightDeck keeps the now-windowless application focused instead of transferring focus elsewhere. This is useful if you want an immediate ⌘Q to quit the application whose last window you just closed.
Regardless of this setting, macOS may activate a same-application window that lives on another, non-visible workspace when you close the application’s visible window — leaving keyboard focus on a window you cannot see. This is a macOS behavior that the setting cannot override. Because of this, false is only useful when an application’s windows stay on a single workspace; if you keep windows of the same application spread across workspaces, leave this option at its default.

accordion-padding

Type: Integer in pixels · Default: 30 Width of the overlap padding shown in accordion layout. Set to 0 to disable the padding effect entirely.

default-root-container-layout

Type: String · Default: tiles · Values: tiles, accordion Default layout for the root container of every workspace.

default-root-container-orientation

Type: String · Default: auto · Values: horizontal, vertical, auto Default orientation for the root container of every workspace. auto uses horizontal for monitors wider than they are tall, and vertical otherwise.

enable-normalization-flatten-containers

Type: Boolean · Default: true Automatically flatten redundant nested containers that have the same orientation as their parent. See the Normalization section of the Guide.
NOTE: Enabling this option makes the split command have no effect. Use join-with instead.

enable-normalization-opposite-orientation-for-nested-containers

Type: Boolean · Default: true Automatically set the orientation of a new nested container to be the opposite of its parent. See the Normalization section of the Guide.

persistent-workspaces

Type: Array of strings · Default: [] · Requires: config-version = 2 Workspace names that remain alive even when empty and invisible. Without this option, empty workspaces are destroyed and their names freed.

on-focus-changed

Type: String or array of FlightDeck commands · Default: [] Commands to run every time focus changes (window or monitor). See on-focus-changed callbacks in the Guide.

on-focused-monitor-changed

Type: String or array of FlightDeck commands · Default: [] Commands to run when the focused monitor changes. A common use is to warp the mouse cursor to the new monitor’s center.

on-mode-changed

Type: String or array of FlightDeck commands · Default: [] Commands to run every time the active binding mode changes. See Binding modes in the Guide.

exec-on-workspace-change

Type: Array of shell command tokens · Default: [] · Status: Deprecated Shell command tokens to execute whenever the focused workspace changes. The environment exposes AEROSPACE_FOCUSED_WORKSPACE and AEROSPACE_PREV_WORKSPACE.

exec

Type: Table Controls the environment that exec-and-forget and exec-on-workspace-change commands run in.

Nested keys

key-mapping

Type: Table Configures the keyboard preset used to resolve key names in binding mode definitions. See Key mapping in the Guide.

Nested keys

gaps

Type: Table Spacing between windows and between windows and monitor edges. Each sub-key accepts a constant integer or a dynamic per-monitor array.

Nested keys

workspace-to-monitor-force-assignment

Type: Table mapping workspace names to monitor patterns or arrays Pin named workspaces to specific monitors. See Assign workspaces to monitors in the Guide.

mode

Type: Table mapping mode names to binding tables Defines binding modes and their key bindings. The main mode must always be present. See Binding modes in the Guide.

on-window-detected

Type: Array of tables Callbacks that run when a new window is detected. Each entry may use any command as its condition. See on-window-detected in the Guide.

Keys

The legacy if.app-id, if.app-name-regex-substring, if.window-title-regex-substring, if.workspace, and if.during-aerospace-startup matcher keys remain supported for compatibility.

indent-for-nested-containers-with-the-same-orientation

Type: Ignored · Status: Deprecated Drop this key from your config. See AeroSpace#96.

non-empty-workspaces-root-containers-layout-on-startup

Type: String · Status: Deprecated Drop this key from your config. Only the value "smart" is accepted (for backwards-compatibility error reporting).