dots/aerospace/.aerospace.toml
2026-02-20 20:25:37 -05:00

181 lines
5.1 KiB
TOML

# AeroSpace config - https://nikitabobko.github.io/AeroSpace/guide
#
# Keybinding philosophy:
# alt+* = AeroSpace (focus, workspaces, layout)
# alt+shift+* = AeroSpace (move, modes)
# ctrl+h/j/k/l = Karabiner vim nav (arrows, scroll) - DO NOT USE
# ctrl+1-6 = Karabiner app launchers - DO NOT USE
# alt+w = tmux prefix (via Karabiner Right Cmd) - DO NOT USE
# C-h/j/k/l = nvim window nav (inside terminal) - no conflict
# zsh ctrl+j/k = autosuggestion nav (inside terminal) - no conflict
config-version = 2
start-at-login = true
# Normalizations
enable-normalization-flatten-containers = true
enable-normalization-opposite-orientation-for-nested-containers = true
# Layout defaults
default-root-container-layout = 'tiles'
default-root-container-orientation = 'auto'
accordion-padding = 30
# Mouse follows focus when switching monitors
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
# Gaps between windows
[gaps]
inner.horizontal = 10
inner.vertical = 10
outer.left = 10
outer.right = 10
outer.top = 10
outer.bottom = 10
# -------------------------------------------------------------------
# Main keybindings
# -------------------------------------------------------------------
[mode.main.binding]
# Focus windows: alt + h/j/k/l
alt-h = 'focus left'
alt-j = 'focus down'
alt-k = 'focus up'
alt-l = 'focus right'
# Move windows: alt+shift + h/j/k/l
alt-shift-h = 'move left'
alt-shift-j = 'move down'
alt-shift-k = 'move up'
alt-shift-l = 'move right'
# Switch workspaces: alt + number
alt-1 = 'workspace 1'
alt-2 = 'workspace 2'
alt-3 = 'workspace 3'
alt-4 = 'workspace 4'
alt-5 = 'workspace 5'
alt-6 = 'workspace 6'
alt-7 = 'workspace 7'
alt-8 = 'workspace 8'
alt-9 = 'workspace 9'
# Move window to workspace: alt+shift + number
alt-shift-1 = 'move-node-to-workspace 1'
alt-shift-2 = 'move-node-to-workspace 2'
alt-shift-3 = 'move-node-to-workspace 3'
alt-shift-4 = 'move-node-to-workspace 4'
alt-shift-5 = 'move-node-to-workspace 5'
alt-shift-6 = 'move-node-to-workspace 6'
alt-shift-7 = 'move-node-to-workspace 7'
alt-shift-8 = 'move-node-to-workspace 8'
alt-shift-9 = 'move-node-to-workspace 9'
# Layout toggles
alt-slash = 'layout tiles horizontal vertical'
alt-comma = 'layout accordion horizontal vertical'
# Fullscreen (replaces Rectangle: Option+F maximize)
alt-f = 'fullscreen'
# Float toggle (replaces Rectangle: Option+Shift+F almost-maximize)
alt-shift-f = 'layout floating tiling'
# Balance window sizes
alt-shift-b = 'balance-sizes'
# Last workspace (using backtick instead of tab to preserve macOS app switcher)
alt-backtick = 'workspace-back-and-forth'
# Monitor focus/move (replaces Rectangle: Ctrl+Option+Cmd+Space next display)
alt-period = 'focus-monitor next'
alt-shift-period = 'move-node-to-monitor next'
alt-shift-comma = 'move-workspace-to-monitor next'
# Modes
alt-shift-r = 'mode resize'
alt-shift-semicolon = 'mode service'
# Screenshot to clipboard
alt-shift-s = 'exec-and-forget screencapture -i -c'
# -------------------------------------------------------------------
# Resize mode: alt+shift+r to enter, esc to exit
# -------------------------------------------------------------------
[mode.resize.binding]
h = 'resize width -50'
j = 'resize height +50'
k = 'resize height -50'
l = 'resize width +50'
minus = 'resize smart -50'
equal = 'resize smart +50'
enter = 'mode main'
esc = 'mode main'
# -------------------------------------------------------------------
# Service mode: alt+shift+; to enter, esc to exit
# -------------------------------------------------------------------
[mode.service.binding]
r = ['reload-config', 'mode main']
f = ['flatten-workspace-tree', 'mode main']
b = ['balance-sizes', 'mode main']
esc = 'mode main'
backspace = ['close-all-windows-but-current', 'mode main']
# -------------------------------------------------------------------
# Auto-assign apps to workspaces
# -------------------------------------------------------------------
# Browsers -> workspace 1
[[on-window-detected]]
if.app-id = 'com.apple.Safari'
run = 'move-node-to-workspace 1'
[[on-window-detected]]
if.app-id = 'company.thebrowser.Browser'
run = 'move-node-to-workspace 1'
# Terminals -> workspace 2
[[on-window-detected]]
if.app-id = 'com.apple.Terminal'
run = 'move-node-to-workspace 2'
[[on-window-detected]]
if.app-id = 'com.mitchellh.ghostty'
run = 'move-node-to-workspace 2'
[[on-window-detected]]
if.app-id = 'com.googlecode.iterm2'
run = 'move-node-to-workspace 2'
# Editors -> workspace 3
[[on-window-detected]]
if.app-id = 'com.microsoft.VSCode'
run = 'move-node-to-workspace 3'
[[on-window-detected]]
if.app-id = 'dev.zed.Zed'
run = 'move-node-to-workspace 3'
# Chat -> workspace 4
[[on-window-detected]]
if.app-id = 'com.tinyspeck.slackmacgap'
run = 'move-node-to-workspace 4'
[[on-window-detected]]
if.app-id = 'ru.keepcoder.Telegram'
run = 'move-node-to-workspace 4'
[[on-window-detected]]
if.app-id = 'org.whispersystems.signal-desktop'
run = 'move-node-to-workspace 4'
[[on-window-detected]]
if.app-id = 'com.apple.MobileSMS'
run = 'move-node-to-workspace 4'
# Media -> workspace 5
[[on-window-detected]]
if.app-id = 'com.spotify.client'
run = 'move-node-to-workspace 5'