# ::: # :::: espadonne (mfw) aerospace config :::: # ::::::::::::::::::::::::::::::::::::::::::::::: # # TODO: @espadonne (mfw) look into mouse move options # TODO: @espadonne (mfw) consider dynamic padding if possible? # TODO: @espadonne (mfw) padding? no, what was it, monitors? idk dude. cmd+up # isn't fast enough sometimes # TODO: @espadonne (mfw) toolbox/setting apps float away from taskbar? # TODO: @espadonne (mfw) utility mode to launch apple default apps # TODO: @espadonne (mfw) don't shadow unix keybinds you use # TODO: matt. # matt. # matt. # you 'fixed' that unix kb shadow with another unix kb. fix that. # # # ::: SEE: # :::: COMMANDS : https://nikitabobko.github.io/AeroSpace/commands # :::: MONITORS?: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors # # ::: # :::: DEFAULTS & GLOBALS :::: # ::::::::::::::::::::::::::::::::: # # ::: # Start AeroSpace at login start-at-login = true # ::: # This is for after a # macOS user session login, and not # the machine startup, and not aerospace startup # # :::: NOTE: @espadonne requirement: # ::::: `start-at-login` must be set to `true` in # ::::: for this to work. # ::::: # after-login-command = [] # ::: # This is for aerospace # post-startup, not the machine # For commands, see: https://nikitabobko.github.io/AeroSpace/commands after-startup-command = ['exec-and-forget wezterm'] # ::: # Normalizations, nothing # to here-see, notta-thing outtan-ordinary # See: https://nikitabobko.github.io/AeroSpace/guide#normalization enable-normalization-flatten-containers = true enable-normalization-opposite-orientation-for-nested-containers = true # ::: # To disable accordion # padding altogether, set to zed accordion-padding = 18 # ::: # Set to 'tiles' or 'accordion' # See: https://nikitabobko.github.io/AeroSpace/guide#layouts default-root-container-layout = 'tiles' # # ::: # Possible values: # Set to 'horizontal', 'vertical', or 'auto' # # :::: NOTE: on auto: # ::::: portrait viewport :: vertical # ::::: landscape viewport :: horizontal # ::::: anything else should follow this gist default-root-container-orientation = 'auto' # ::: # Commentout to disable behavior, # and falls back to empty list, `[]`, See my todo #1 # See: https://nikitabobko.github.io/AeroSpace/commands#move-mouse # See: https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks on-focus-changed = ['move-mouse window-lazy-center'] on-focused-monitor-changed = ['move-mouse monitor-lazy-center'] # ::: # Map it to qwerked # up quirty, or everyone's # favorite New World Symphonist # ie, # Possible values: 'qwerty', 'dvorak' # # :::: NOTE: @espadonne on keymappings: # ::::: you can do some kind # ::::: of cool things like alias keys! # # See: https://nikitabobko.github.io/AeroSpace/guide#key-mapping [key-mapping] preset = 'qwerty' # ::: # According to the # CSS folks th- well hey what # exactly would the container be here? # # :::: NOTE: @espadonne params(?) # ::::: constants: # ::::: inner.{horizontal,vertical} = n # ::::: outer.{top,left,right,bottom} = n # ::::: # ::::: multimonitor: # ::::: I don't really follow it yet; # ::::: DIRECT from the docs: # ::::: # Per monitor: # gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24] # In this example, 24 is a default value when there is no match. # Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'. # See: # https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors [gaps] outer.top = [{ monitor.main = 6 }, { monitor."LU28R55" = 48 }, { monitor."LC34G55T" = 48 }, { monitor."Odyssey*" = 48 }, { monitor."HP*" = 48 }, 12] outer.left = [{ monitor.main = 12 }, { monitor."LU28R55" = 12 }, { monitor."LC34G55T" = 12 }, { monitor."Odyssey*" = 12 }, { monitor."HP*" = 12 }, 12] outer.bottom = [{ monitor.main = 12 }, { monitor."LU28R55" = 12 }, { monitor."LC34G55T" = 12 }, { monitor."Odyssey*" = 12 }, { monitor."HP*" = 12 }, 12] outer.right = [{ monitor.main = 12 }, { monitor."LU28R55" = 12 }, { monitor."LC34G55T" = 12 }, { monitor."Odyssey*" = 12 }, { monitor."HP*" = 12 }, 12] inner.horizontal = 6 inner.vertical = 6 # Ensure Homebrew’s bins are in the PATH for all `exec-*` calls [exec.env-vars] PATH = "/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:${PATH}" # ::: # :::: MODES & MODE BINDINGS :::: # ::::: ::::::::::::::::::::: ::::: # # NOTE: you can create multiple # sets of bindings by making # different modes # # # VALID KEYS: # - Digits: 0-9 # - Letters: a-z # - F-Key digits: `f{1,2,...,?}` # - Numpad digits: `keypad{0,1,...,9}` # - Specially Named: minus, equal, period, comma, # slash, backslash, quote, semicolon, # backtick, leftSquareBracket, rightSquareBracket, # space, enter, esc, backspace, tab # - Keypad specials: keypad{Clear,DecimalMark,Divide,Enter,Equal,Minus,Multiply,Plus} # # - Arrows: up, down, left, right # # VALID MODIFIERS: # - cmd # - alt # - ctrl # - shift # ::: # psvm or is it # pvsm o- hang on is it # not like int main(something.. # # necessary main mode keybinds # # :::: NOTE: @ on missing key # ::::: fallback value is `{}`, so # ::::: don't come cryna me when you # ::::: are waxing pythonic, matthias # # See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes [mode.main.binding] # ::: # :::: MODE DEFINITIONS :::: # ::::: :::::::::::::::: ::::: # alt-a = 'mode apps' alt-u = 'mode utility' alt-p = 'mode monitor' cmd-enter = 'exec-and-forget wezterm start' cmd-alt-enter = 'exec-and-forget open -n -a iTerm' cmd-shift-enter = 'exec-and-forget open -na Ghostty' ctrl-alt-tab = 'workspace-back-and-forth' # == Node focus (pane navigation) ctrl-shift-left = 'focus left' ctrl-shift-down = 'focus down' ctrl-shift-up = 'focus up' ctrl-shift-right = 'focus right' # == Move node (pane reposition) ctrl-alt-shift-left = 'move left' ctrl-alt-shift-down = 'move down' ctrl-alt-shift-up = 'move up' ctrl-alt-shift-right = 'move right' # == Workspace select ctrl-0 = 'workspace 0' ctrl-1 = 'workspace 1' ctrl-2 = 'workspace 2' ctrl-3 = 'workspace 3' ctrl-4 = 'workspace 4' ctrl-5 = 'workspace 5' ctrl-6 = 'workspace 6' ctrl-7 = 'workspace 7' ctrl-8 = 'workspace 8' ctrl-9 = 'workspace 9' ctrl-i = 'workspace I' ctrl-m = 'workspace M' # ctrl-z = 'workspace Z' # == Move node to workspace ctrl-shift-0 = 'move-node-to-workspace 0 --focus-follows-window' ctrl-shift-1 = 'move-node-to-workspace 1 --focus-follows-window' ctrl-shift-2 = 'move-node-to-workspace 2 --focus-follows-window' ctrl-shift-3 = 'move-node-to-workspace 3 --focus-follows-window' ctrl-shift-4 = 'move-node-to-workspace 4 --focus-follows-window' ctrl-shift-5 = 'move-node-to-workspace 5 --focus-follows-window' ctrl-shift-6 = 'move-node-to-workspace 6 --focus-follows-window' ctrl-shift-7 = 'move-node-to-workspace 7 --focus-follows-window' ctrl-shift-8 = 'move-node-to-workspace 8 --focus-follows-window' ctrl-shift-9 = 'move-node-to-workspace 9 --focus-follows-window' ctrl-shift-i = 'move-node-to-workspace I --focus-follows-window' # ctrl-shift-g = 'move-node-to-workspace G --focus-follows-window' ctrl-shift-m = 'move-node-to-workspace M --focus-follows-window' # ctrl-shift-s = 'move-node-to-workspace S --focus-follows-window' # ctrl-shift-f = 'move-node-to-workspace F --focus-follows-window' ctrl-shift-w = 'move-node-to-workspace W --focus-follows-window' # ctrl-shift-z = 'move-node-to-workspace Z --focus-follows-window' # == Monitor focus ctrl-alt-left = 'focus-monitor prev --wrap-around' ctrl-alt-right = 'focus-monitor next --wrap-around' # == Move node to monitor cmd-ctrl-shift-left = 'move-node-to-monitor prev --wrap-around --focus-follows-window' cmd-ctrl-shift-right = 'move-node-to-monitor next --wrap-around --focus-follows-window' # == Move workspace to monitor cmd-alt-shift-left = 'move-workspace-to-monitor prev' cmd-alt-shift-right = 'move-workspace-to-monitor next' # ::: # Eh, pretty self-expl # if you ask me? But maybe not accordion, idk # # See: https://nikitabobko.github.io/AeroSpace/commands#layout alt-slash = 'layout horizontal vertical' ctrl-alt-slash = 'layout floating tiling' alt-shift-slash = 'layout tiles accordion' # ::: # See: https://nikitabobko.github.io/AeroSpace/commands#resize alt-minus = 'resize smart -50' alt-equal = 'resize smart +50' ctrl-alt-minus = 'resize smart -75' ctrl-alt-equal = 'resize smart +75' alt-shift-minus = 'resize smart -100' alt-shift-equal = 'resize smart +100' ctrl-alt-shift-minus = 'resize smart -150' ctrl-alt-shift-equal = 'resize smart +150' # Launch morkgui via macOS Terminal for dynamic workspace moving, then bring Terminal to front ctrl-alt-shift-m = [ "exec-and-forget osascript -e 'tell application \"Terminal\" to do script \"/usr/local/bin/morkgui; exit\"' -e 'tell application \"Terminal\" to activate'", "mode main" ] # :::: NOTE: @espadonne broken # ::::: don't feel like searching # ::::: through binaries atm # :::: # :::: NOTE: @ espadonne some just go by name # :::: # ctrl-alt-i = 'exec-and-forget open -a /System/Applications/Utilities/Activity Monitor.app' # ctrl-alt-j = 'exec-and-forget open -a /System/Volumes/Data/Applications/DaVinci Resolve/DaVinci Resolve.app' # ::: # :::: FLOATING WINDOWS :::: # ::::: :::::::::::::::: ::::: # # NOTE: you'll float too ;) # - Coppersage the C(L)ow(N) # - @espadonne # - mfw (just a bittabanta) # # TODO: @espadonne there's a better way # [[on-window-detected]] if.app-name-regex-substring = '(?i)^(finder|zotero|skim)' run = 'layout floating' [[on-window-detected]] if.app-name-regex-substring = '(?i)^(camera|quicktime|synergy)' run = 'layout floating' [[on-window-detected]] if.app-name-regex-substring = '(?i)^(safari|app store|contacts)' run = 'layout floating' [[on-window-detected]] if.app-name-regex-substring = '(?i)^(chatgpt|bitwarden|calculator)' run = 'layout floating' [[on-window-detected]] if.app-name-regex-substring = '(?i)^(zoom|balena|activity monitor)' run = 'layout floating' [[on-window-detected]] if.app-name-regex-substring = '(?i)^(passwords|preview|facetime|music|ticktick)' run = 'layout floating' [[on-window-detected]] if.app-name-regex-substring = '(?i)^(reminders|siri|weather|books|clock|notes|ghostty|terminal|alacritty)' run = 'layout floating' [[on-window-detected]] if.window-title-regex-substring = '(?i)wulftp' run = 'layout floating' # ::: # :::: DEDICATED WORKSPINDOWS :::: # ::::: :::::::::::::::::::::: ::::: # # [[on-window-detected]] # if.app-name-regex-substring = '(?i)ghostty' # run = [ # 'layout tiling', # 'move-node-to-workspace G', # ] # [[on-window-detected]] # if.app-name-regex-substring = '(?i)wezterm' # run = [ # 'layout tiling', # 'move-node-to-workspace W', # ] # [[on-window-detected]] # if.app-name-regex-substring = '(?i)terminal' # run = [ # 'layout tiling', # 'move-node-to-workspace T' # ] # [[on-window-detected]] # if.app-name-regex-substring = '(?i)discord' # run = [ # 'layout tiling', # 'move-node-to-workspace I', # ] [[on-window-detected]] if.app-name-regex-substring = '(?i)messages' run = [ 'layout tiling', 'move-node-to-workspace M', ] [[on-window-detected]] if.app-name-regex-substring = '(?i)firefox' run = [ 'layout tiling', 'move-node-to-workspace 1', ] # [[on-window-detected]] # if.app-name-regex-substring = '(?i)zen' # run = [ # 'layout tiling', # 'move-node-to-workspace Z', # ] # [[on-window-detected]] # if.app-name-regex-substring = '(?i)davinci' # run = [ # 'layout tiling', # 'move-node-to-workspace V', # ] # Float only if launched with title "WezFloat" (broken) [[on-window-detected]] if.window-title-regex-substring = 'WezFloat' run = 'layout floating' # Default tiling for other WezTerm windows (but the other thing is broken anyway) [[on-window-detected]] if.app-name-regex-substring = '(?i)wezterm' run = 'layout tiling' # ::: # :::: APPLE APPS // UTILITY MODE :::: # ::::: :::::::::::::::::::::::::: ::::: # [mode.utility.binding] u = ['exec-and-forget open -a Preview', 'mode main'] i = ['exec-and-forget open -a Siri', 'mode main'] b = ['exec-and-forget open -a Books', 'mode main'] m = ['exec-and-forget open -a Music', 'mode main'] n = ['exec-and-forget open -a Notes', 'mode main'] e = ['exec-and-forget open -a Finder', 'mode main'] w = ['exec-and-forget open -a Weather', 'mode main'] t = ['exec-and-forget open -a Terminal', 'mode main'] f = ['exec-and-forget open -a FaceTime', 'mode main'] d = ['exec-and-forget open -a Freeform', 'mode main'] l = ['exec-and-forget open -a Launchpad', 'mode main'] r = ['exec-and-forget open -a Reminders', 'mode main'] c = ['exec-and-forget open -a Calculator', 'mode main'] v = ['exec-and-forget open -a Voice Memos', 'mode main'] s = ['exec-and-forget open -a /Applications/Safari.app', 'mode main'] h = ['exec-and-forget open -a /Applications/ChatGPT.app', 'mode main'] # ::: # yeah, y'all he bit the bullet, # but it kinda gets in the way from my # brief tinkering thus far. Like it'll propose # decisions that are really just clear downstream problems and u- # nless you read along with some care it's easy to miss the trenchfootgu # -n. p = ['exec-and-forget open -a /Applications/Bitwarden.app', 'mode main'] esc = 'mode main' ctrl-esc = ['reload-config', 'mode main'] ctrl-r = ['flatten-workspace-tree', 'mode main'] backspace = ['close-all-windows-but-current', 'mode main'] # TODO: mfw look into, pulled from dfault config alt-shift-k = ['join-with up', 'mode main'] alt-shift-j = ['join-with down', 'mode main'] alt-shift-h = ['join-with left', 'mode main'] alt-shift-l = ['join-with right', 'mode main'] [mode.apps.binding] z = ['exec-and-forget open -a /Applications/Zen.app', 'mode main'] s = ['exec-and-forget open -a /Applications/Slack.app', 'mode main'] w = ['exec-and-forget open -a WezTerm', 'mode main'] f = ['exec-and-forget open -a /Applications/Firefox.app', 'mode main'] g = ['exec-and-forget open -a /Applications/Ghostty.app', 'mode main'] i = ['exec-and-forget open -a /Applications/Discord.app', 'mode main'] a = ['exec-and-forget open -a /Applications/Audacity.app', 'mode main'] m = ['exec-and-forget open -a /System/Applications/Messages.app', 'mode main'] o = ['exec-and-forget open -a ticktick', 'mode main'] esc = 'mode main'