|
# ============================================================================ |
|
# AeroSpace Configuration |
|
# Tiling Window Manager for macOS |
|
# Documentation: https://nikitabobko.github.io/AeroSpace/guide |
|
# ============================================================================ |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Startup & General Settings |
|
# ---------------------------------------------------------------------------- |
|
|
|
# Commands to run after AeroSpace starts |
|
after-startup-command = [] |
|
|
|
# Start AeroSpace at login |
|
start-at-login = true |
|
|
|
# Normalizations keep layouts clean and predictable |
|
# See: https://nikitabobko.github.io/AeroSpace/guide#normalization |
|
enable-normalization-flatten-containers = true |
|
enable-normalization-opposite-orientation-for-nested-containers = true |
|
|
|
# Accordion layout padding (set 0 to disable) |
|
accordion-padding = 30 |
|
|
|
# Default layout: tiles or accordion |
|
default-root-container-layout = 'tiles' |
|
|
|
# Default orientation: horizontal, vertical, or auto |
|
# 'auto' = wide monitors get horizontal, tall monitors get vertical |
|
default-root-container-orientation = 'auto' |
|
|
|
# Mouse follows focus when switching monitors |
|
# See: https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks |
|
on-focused-monitor-changed = ['move-mouse monitor-lazy-center'] |
|
|
|
# Disable macOS "Hide application" (cmd-h) workaround |
|
# See: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app |
|
automatically-unhide-macos-hidden-apps = false |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Keyboard Layout |
|
# ---------------------------------------------------------------------------- |
|
|
|
# Possible values: qwerty, dvorak, colemak |
|
# See: https://nikitabobko.github.io/AeroSpace/guide#key-mapping |
|
[key-mapping] |
|
preset = 'qwerty' |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Gaps Configuration |
|
# ---------------------------------------------------------------------------- |
|
|
|
# Gaps between windows (inner) and monitor edges (outer) |
|
# Supports per-monitor values - see documentation for details |
|
[gaps] |
|
inner.horizontal = 10 |
|
inner.vertical = 10 |
|
outer.left = 10 |
|
outer.bottom = 10 |
|
outer.top = 10 |
|
outer.right = 10 |
|
|
|
# ============================================================================ |
|
# MAIN MODE KEYBINDINGS |
|
# ============================================================================ |
|
|
|
[mode.main.binding] |
|
|
|
# All possible keys: |
|
# - Letters. a, b, c, ..., z |
|
# - Numbers. 0, 1, 2, ..., 9 |
|
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9 |
|
# - F-keys. f1, f2, ..., f20 |
|
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, |
|
# backtick, leftSquareBracket, rightSquareBracket, space, enter, esc, |
|
# backspace, tab, pageUp, pageDown, home, end, forwardDelete, |
|
# sectionSign (ISO keyboards only, european keyboards only) |
|
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual, |
|
# keypadMinus, keypadMultiply, keypadPlus |
|
# - Arrows. left, down, up, right |
|
|
|
# All possible modifiers: cmd, alt, ctrl, shift |
|
|
|
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands |
|
|
|
# ------------------------------------------------------------------------ |
|
# Window Navigation (vim-style hjkl) |
|
# ------------------------------------------------------------------------ |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#focus |
|
alt-h = 'focus left' |
|
alt-j = 'focus down' |
|
alt-k = 'focus up' |
|
alt-l = 'focus right' |
|
|
|
# ------------------------------------------------------------------------ |
|
# Window Swap |
|
# ------------------------------------------------------------------------ |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#swap |
|
# Swap in main mode |
|
ctrl-shift-h = 'swap left' |
|
ctrl-shift-j = 'swap down' |
|
ctrl-shift-k = 'swap up' |
|
ctrl-shift-l = 'swap right' |
|
|
|
# ------------------------------------------------------------------------ |
|
# Window Resizing |
|
# ------------------------------------------------------------------------ |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#resize |
|
alt-minus = 'resize smart -50' |
|
alt-equal = 'resize smart +50' |
|
|
|
# ------------------------------------------------------------------------ |
|
# Layout Controls |
|
# ------------------------------------------------------------------------ |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#layout |
|
alt-ctrl-h = 'layout horizontal' # Force horizontal split |
|
alt-ctrl-v = 'layout vertical' # Force vertical split |
|
|
|
# Balance window sizes in workspace |
|
alt-0 = 'balance-sizes' |
|
|
|
# Flatten all nested containers (simplify layout) |
|
alt-shift-0 = 'flatten-workspace-tree' |
|
|
|
alt-slash = 'layout tiles horizontal vertical' |
|
alt-comma = 'layout accordion horizontal vertical' |
|
|
|
# ------------------------------------------------------------------------ |
|
# Workspace Navigation & App Launchers |
|
# ------------------------------------------------------------------------ |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget |
|
|
|
# Development Tools |
|
alt-1 = 'exec-and-forget open -a /Applications/Visual\ Studio\ Code.app' |
|
alt-2 = 'exec-and-forget open -a /Applications/Ghostty.app' |
|
alt-d = 'exec-and-forget open -a /Applications/Dbeaver.app' |
|
alt-r = 'exec-and-forget open -a /Applications/ResponsivelyApp.app' |
|
|
|
# Browsers |
|
alt-3 = 'exec-and-forget open -a /Applications/Brave\ Browser.app/' |
|
alt-b = 'exec-and-forget open -a /Applications/Firefox.app' |
|
|
|
# Communication |
|
alt-4 = 'exec-and-forget open -a /Applications/Microsoft\ Outlook.app' |
|
alt-5 = 'exec-and-forget open -a /Applications/Microsoft\ Teams.app' |
|
alt-w = 'exec-and-forget open -a /Applications/WhatsApp.app' |
|
alt-z = 'exec-and-forget open -a /Applications/zoom.us.app' |
|
|
|
# Google & AI Apps (Brave PWAs) |
|
alt-6 = 'exec-and-forget open -b com.brave.Browser.app.fmgjjmmmlfnkbppncabfkddbjimcfncm' # GMAIL |
|
alt-7 = 'exec-and-forget open -b com.brave.Browser.app.kpmdbogdmbfckbgdfdffkleoleokbhod' # PERPLEXITY |
|
alt-8 = 'exec-and-forget open -b com.brave.Browser.app.fmpnliohjhemenmnlpbfagaolkdacoja' # CLAUDE |
|
alt-9 = 'exec-and-forget open -a /Applications/ChatGPT.app' |
|
alt-t = 'exec-and-forget open -b com.brave.Browser.app.ibblmnobmgdmpoeblocemifbpglakpoi' |
|
alt-x = 'exec-and-forget open -b com.brave.Browser.app.lodlkdfmihgonocnmddehnfgiljnadcf' |
|
|
|
# Productivity & Utilities |
|
alt-a = 'exec-and-forget open -a /Applications/Utilities/Activity\ Monitor.app/' |
|
alt-e = 'exec-and-forget open -a /Applications/Microsoft\ Excel.app' |
|
alt-m = 'exec-and-forget open -a /Applications/Meld.app' |
|
alt-n = 'exec-and-forget open -a /Applications/Microsoft\ OneNote.app/' |
|
alt-o = 'exec-and-forget open -a /Applications/Overcast.app/' |
|
alt-p = 'exec-and-forget open -a /Applications/Preview.app' |
|
alt-y = 'exec-and-forget open -a /Applications/FreeTube.app' |
|
|
|
# Workspaces without dedicated apps |
|
alt-c = 'workspace C' |
|
alt-f = 'workspace F' |
|
alt-g = 'workspace G' |
|
alt-i = 'workspace I' |
|
alt-q = 'workspace Q' |
|
alt-s = 'workspace S' |
|
alt-u = 'workspace U' |
|
alt-v = 'workspace V' |
|
|
|
# You can uncomment the following lines to open up terminal with alt + enter shortcut |
|
# (like in i3) |
|
# alt-enter = '''exec-and-forget osascript -e ' |
|
# tell application "Terminal" |
|
# do script |
|
# activate |
|
# end tell' |
|
# ''' |
|
|
|
# ------------------------------------------------------------------------ |
|
# Move Window to Workspace |
|
# ------------------------------------------------------------------------ |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace |
|
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' |
|
alt-shift-a = 'move-node-to-workspace A' |
|
alt-shift-b = 'move-node-to-workspace B' |
|
alt-shift-c = 'move-node-to-workspace C' |
|
alt-shift-d = 'move-node-to-workspace D' |
|
alt-shift-e = 'move-node-to-workspace E' |
|
alt-shift-f = 'move-node-to-workspace F' |
|
alt-shift-g = 'move-node-to-workspace G' |
|
alt-shift-i = 'move-node-to-workspace I' |
|
alt-shift-m = 'move-node-to-workspace M' |
|
alt-shift-n = 'move-node-to-workspace N' |
|
alt-shift-o = 'move-node-to-workspace O' |
|
alt-shift-p = 'move-node-to-workspace P' |
|
alt-shift-q = 'move-node-to-workspace Q' |
|
alt-shift-r = 'move-node-to-workspace R' |
|
alt-shift-s = 'move-node-to-workspace S' |
|
alt-shift-t = 'move-node-to-workspace T' |
|
alt-shift-u = 'move-node-to-workspace U' |
|
alt-shift-v = 'move-node-to-workspace V' |
|
alt-shift-w = 'move-node-to-workspace W' |
|
alt-shift-x = 'move-node-to-workspace X' |
|
alt-shift-y = 'move-node-to-workspace Y' |
|
alt-shift-z = 'move-node-to-workspace Z' |
|
|
|
# ------------------------------------------------------------------------ |
|
# Workspace Switching |
|
# ------------------------------------------------------------------------ |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth |
|
alt-tab = 'workspace-back-and-forth' |
|
|
|
# Multi-monitor workspace movement (uncomment if using multiple monitors) |
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move-workspace-to-monitor |
|
# alt-shift-tab = 'move-workspace-to-monitor --wrap-around next' |
|
|
|
# ------------------------------------------------------------------------ |
|
# Enter Service Mode |
|
# ------------------------------------------------------------------------ |
|
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes |
|
alt-shift-semicolon = 'mode service' |
|
|
|
# ============================================================================ |
|
# SERVICE MODE KEYBINDINGS |
|
# ============================================================================ |
|
|
|
# Service mode provides advanced window manipulation commands |
|
# Enter with: Alt-Shift-; |
|
# Exit with: Esc (also reloads config) |
|
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes |
|
|
|
[mode.service.binding] |
|
esc = ['reload-config', 'mode main'] |
|
r = ['flatten-workspace-tree', 'mode main'] # reset layout |
|
f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout |
|
backspace = ['close-all-windows-but-current', 'mode main'] |
|
|
|
# sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2 |
|
#s = ['layout sticky tiling', 'mode main'] |
|
|
|
# Join windows - essential for creating grid layouts (2x2, 3x2, etc.) |
|
alt-shift-h = ['join-with left', 'mode main'] |
|
alt-shift-j = ['join-with down', 'mode main'] |
|
alt-shift-k = ['join-with up', 'mode main'] |
|
alt-shift-l = ['join-with right', 'mode main'] |
|
|
|
# Volume controls |
|
down = 'volume down' |
|
up = 'volume up' |
|
shift-down = ['volume set 0', 'mode main'] |
|
|
|
# ============================================================================ |
|
# WINDOW DETECTION RULES |
|
# ============================================================================ |
|
|
|
# Automatically move windows to designated workspaces when they open |
|
# Find app-id with: mdls -name kMDItemCFBundleIdentifier /Applications/AppName.app |
|
|
|
#[[on-window-detected]] |
|
# check-further-callbacks = true |
|
# run = 'layout floating' |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Development Tools |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.microsoft.VSCode' |
|
run = ['move-node-to-workspace 1'] |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.googlecode.iterm2' |
|
run = 'move-node-to-workspace 2' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.jetbrains.intellij.ce' |
|
run = ['move-node-to-workspace I'] # mnemonics I - IDE |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.jetbrains.pycharm.ce' |
|
run = ['move-node-to-workspace I'] |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.todesktop.230313mzl4w4u92' |
|
run = 'move-node-to-workspace C' # Cursor |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'org.jkiss.dbeaver.core.product' |
|
run = 'move-node-to-workspace D' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'dev.kdrag0n.MacVirt' |
|
run = 'move-node-to-workspace D' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'app.responsively' |
|
run = 'move-node-to-workspace R' |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Browsers |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser' |
|
run = ['move-node-to-workspace 3'] # mnemonics W - Web browser |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'org.mozilla.firefox' |
|
run = ['move-node-to-workspace B'] # mnemonics W - Web browser |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Communication & Email |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-name-regex-substring = 'com.microsoft.Outlook' |
|
run = 'move-node-to-workspace 4' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.microsoft.teams2' |
|
run = 'move-node-to-workspace 5' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'net.whatsapp.WhatsApp' |
|
run = 'move-node-to-workspace W' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.ibblmnobmgdmpoeblocemifbpglakpoi' |
|
run = 'move-node-to-workspace T' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.apple.MobileSMS' |
|
run = 'move-node-to-workspace W' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'us.zoom.xos' |
|
run = 'move-node-to-workspace Z' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.apple.mail' |
|
run = ['move-node-to-workspace M'] |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Google Apps (Brave PWAs) |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.fmgjjmmmlfnkbppncabfkddbjimcfncm' |
|
run = 'move-node-to-workspace 6' #GMAIL |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.pmcngklofgngifnoceehmchjlildnhkj' |
|
run = 'move-node-to-workspace 6' #Google Contacts |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.kjgfgldnnfoeklkmfkjfagphfepbbdan' |
|
run = 'move-node-to-workspace 6' #Google Meet |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.jenjnolmmadjmjpcmkkhfehpjfdhoadg' |
|
run = 'move-node-to-workspace 6' #GCP |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.aghbiahbpaijignceidepookljebhfak' |
|
run = 'move-node-to-workspace 6' #G DRIVE |
|
|
|
# ---------------------------------------------------------------------------- |
|
# AI Tools |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.kpmdbogdmbfckbgdfdffkleoleokbhod' |
|
run = 'move-node-to-workspace 7' #Perplexity |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.fmpnliohjhemenmnlpbfagaolkdacoja' |
|
run = 'move-node-to-workspace 8' #CLAUDE |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.openai.chat' |
|
run = 'move-node-to-workspace 9' # OPENAI |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Productivity & Office |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.microsoft.Excel' |
|
run = ['move-node-to-workspace E'] |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.microsoft.onenote.mac' |
|
run = 'move-node-to-workspace N' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'abnerworks.Typora' |
|
run = 'move-node-to-workspace T' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.apple.iCal' |
|
run = 'move-node-to-workspace C' |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Utilities & System |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.apple.ActivityMonitor' |
|
run = ['move-node-to-workspace A'] |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.apple.finder' |
|
run = ['move-node-to-workspace F'] |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.apple.Preview' |
|
run = ['move-node-to-workspace P'] |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.coteditor.CotEditor' |
|
run = 'move-node-to-workspace A' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.neohtop.dev' |
|
run = 'move-node-to-workspace T' # TOP |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'org.gnome.Meld' |
|
run = 'move-node-to-workspace M' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.apple.iBooksX' |
|
run = 'move-node-to-workspace A' |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Security & VPN |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'org.keepassxc.keepassxc' |
|
run = 'move-node-to-workspace V' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.wireguard.macos' |
|
run = 'move-node-to-workspace V' |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.fortinet.forticlient.vpn' |
|
run = 'move-node-to-workspace V' |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Media & Entertainment |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'io.freetubeapp.freetube' |
|
run = ['move-node-to-workspace Y'] |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'fm.overcast.overcast' |
|
run = 'move-node-to-workspace O' #Overcast |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.agimnkijcaahngcdmfeangaknmldooml' |
|
run = 'move-node-to-workspace Y' #YOUTUBE |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Social & Misc PWAs |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.magkoliahgffibhgfkmoealggombgknl' |
|
run = 'move-node-to-workspace X' # Discord |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.ohghonlafcimfigiajnmhdklcbjlbfda' |
|
run = 'move-node-to-workspace X' # LinkedIn |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.hhmfhkhhhimecngbjafdnmaokhncedbb' |
|
run = 'move-node-to-workspace X' #Slack |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'com.brave.Browser.app.lodlkdfmihgonocnmddehnfgiljnadcf' |
|
run = 'move-node-to-workspace X' #X Twitter |
|
|
|
# ---------------------------------------------------------------------------- |
|
# Other |
|
# ---------------------------------------------------------------------------- |
|
|
|
[[on-window-detected]] |
|
if.app-id = 'edu.mit.scratch.scratch-desktop' |
|
run = 'move-node-to-workspace S' |