TOML · 14898 bytes Raw Blame History
1 # :::
2 # :::: espadonne (mfw) aerospace config ::::
3 # :::::::::::::::::::::::::::::::::::::::::::::::
4 #
5 # TODO: @espadonne (mfw) look into mouse move options
6 # TODO: @espadonne (mfw) consider dynamic padding if possible?
7 # TODO: @espadonne (mfw) padding? no, what was it, monitors? idk dude. cmd+up
8 # isn't fast enough sometimes
9 # TODO: @espadonne (mfw) toolbox/setting apps float away from taskbar?
10 # TODO: @espadonne (mfw) utility mode to launch apple default apps
11 # TODO: @espadonne (mfw) don't shadow unix keybinds you use
12 # TODO: matt.
13 # matt.
14 # matt.
15 # you 'fixed' that unix kb shadow with another unix kb. fix that.
16 #
17 #
18 # ::: SEE:
19 # :::: COMMANDS : https://nikitabobko.github.io/AeroSpace/commands
20 # :::: MONITORS?: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
21 #
22
23 # :::
24 # :::: DEFAULTS & GLOBALS ::::
25 # :::::::::::::::::::::::::::::::::
26 #
27
28 # :::
29 # Start AeroSpace at login
30 start-at-login = true
31
32 # :::
33 # This is for after a
34 # macOS user session login, and not
35 # the machine startup, and not aerospace startup
36 #
37 # :::: NOTE: @espadonne requirement:
38 # ::::: `start-at-login` must be set to `true` in
39 # ::::: for this to work.
40 # :::::
41 # after-login-command = []
42
43 # :::
44 # This is for aerospace
45 # post-startup, not the machine
46 # For commands, see: https://nikitabobko.github.io/AeroSpace/commands
47 after-startup-command = ['exec-and-forget wezterm']
48
49 # :::
50 # Normalizations, nothing
51 # to here-see, notta-thing outtan-ordinary
52 # See: https://nikitabobko.github.io/AeroSpace/guide#normalization
53 enable-normalization-flatten-containers = true
54 enable-normalization-opposite-orientation-for-nested-containers = true
55
56 # :::
57 # To disable accordion
58 # padding altogether, set to zed
59 accordion-padding = 18
60
61 # :::
62 # Set to 'tiles' or 'accordion'
63 # See: https://nikitabobko.github.io/AeroSpace/guide#layouts
64 default-root-container-layout = 'tiles'
65
66 #
67 # :::
68 # Possible values:
69 # Set to 'horizontal', 'vertical', or 'auto'
70 #
71 # :::: NOTE: on auto:
72 # ::::: portrait viewport :: vertical
73 # ::::: landscape viewport :: horizontal
74 # ::::: anything else should follow this gist
75 default-root-container-orientation = 'auto'
76
77
78 # :::
79 # Commentout to disable behavior,
80 # and falls back to empty list, `[]`, See my todo #1
81 # See: https://nikitabobko.github.io/AeroSpace/commands#move-mouse
82 # See: https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
83 on-focus-changed = ['move-mouse window-lazy-center']
84 on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
85
86
87
88 # :::
89 # Map it to qwerked
90 # up quirty, or everyone's
91 # favorite New World Symphonist
92 # ie,
93 # Possible values: 'qwerty', 'dvorak'
94 #
95 # :::: NOTE: @espadonne on keymappings:
96 # ::::: you can do some kind
97 # ::::: of cool things like alias keys!
98 #
99 # See: https://nikitabobko.github.io/AeroSpace/guide#key-mapping
100 [key-mapping]
101 preset = 'qwerty'
102
103 # :::
104 # According to the
105 # CSS folks th- well hey what
106 # exactly would the container be here?
107 #
108 # :::: NOTE: @espadonne params(?)
109 # ::::: constants:
110 # ::::: inner.{horizontal,vertical} = n
111 # ::::: outer.{top,left,right,bottom} = n
112 # :::::
113 # ::::: multimonitor:
114 # ::::: I don't really follow it yet;
115 # ::::: DIRECT from the docs:
116 # :::::
117 # Per monitor:
118 # gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
119 # In this example, 24 is a default value when there is no match.
120 # Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
121 # See:
122 # https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
123 [gaps]
124 outer.top = [{ monitor.main = 6 },
125 { monitor."LU28R55" = 48 },
126 { monitor."LC34G55T" = 48 },
127 { monitor."Odyssey*" = 48 },
128 { monitor."HP*" = 48 },
129 12]
130 outer.left = [{ monitor.main = 12 },
131 { monitor."LU28R55" = 12 },
132 { monitor."LC34G55T" = 12 },
133 { monitor."Odyssey*" = 12 },
134 { monitor."HP*" = 12 },
135 12]
136 outer.bottom = [{ monitor.main = 12 },
137 { monitor."LU28R55" = 12 },
138 { monitor."LC34G55T" = 12 },
139 { monitor."Odyssey*" = 12 },
140 { monitor."HP*" = 12 },
141 12]
142 outer.right = [{ monitor.main = 12 },
143 { monitor."LU28R55" = 12 },
144 { monitor."LC34G55T" = 12 },
145 { monitor."Odyssey*" = 12 },
146 { monitor."HP*" = 12 },
147 12]
148
149 inner.horizontal = 6
150 inner.vertical = 6
151
152 # Ensure Homebrew’s bins are in the PATH for all `exec-*` calls
153 [exec.env-vars]
154 PATH = "/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:${PATH}"
155
156 # :::
157 # :::: MODES & MODE BINDINGS ::::
158 # ::::: ::::::::::::::::::::: :::::
159 #
160 # NOTE: you can create multiple
161 # sets of bindings by making
162 # different modes
163 #
164 #
165 # VALID KEYS:
166 # - Digits: 0-9
167 # - Letters: a-z
168 # - F-Key digits: `f{1,2,...,?}`
169 # - Numpad digits: `keypad{0,1,...,9}`
170 # - Specially Named: minus, equal, period, comma,
171 # slash, backslash, quote, semicolon,
172 # backtick, leftSquareBracket, rightSquareBracket,
173 # space, enter, esc, backspace, tab
174 # - Keypad specials: keypad{Clear,DecimalMark,Divide,Enter,Equal,Minus,Multiply,Plus}
175 #
176 # - Arrows: up, down, left, right
177 #
178 # VALID MODIFIERS:
179 # - cmd
180 # - alt
181 # - ctrl
182 # - shift
183
184
185 # :::
186 # psvm or is it
187 # pvsm o- hang on is it
188 # not like int main(something..
189 #
190 # necessary main mode keybinds
191 #
192 # :::: NOTE: @ on missing key
193 # ::::: fallback value is `{}`, so
194 # ::::: don't come cryna me when you
195 # ::::: are waxing pythonic, matthias
196 #
197 # See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
198 [mode.main.binding]
199
200 # :::
201 # :::: MODE DEFINITIONS ::::
202 # ::::: :::::::::::::::: :::::
203 #
204 alt-a = 'mode apps'
205 alt-u = 'mode utility'
206 alt-p = 'mode monitor'
207
208
209 cmd-enter = 'exec-and-forget wezterm start'
210 cmd-shift-enter = 'exec-and-forget open -na Ghostty'
211
212
213 ctrl-alt-tab = 'workspace-back-and-forth'
214
215 # == Node focus (pane navigation)
216 ctrl-shift-left = 'focus left'
217 ctrl-shift-down = 'focus down'
218 ctrl-shift-up = 'focus up'
219 ctrl-shift-right = 'focus right'
220
221 # == Move node (pane reposition)
222 ctrl-alt-shift-left = 'move left'
223 ctrl-alt-shift-down = 'move down'
224 ctrl-alt-shift-up = 'move up'
225 ctrl-alt-shift-right = 'move right'
226
227 # == Workspace select
228 ctrl-0 = 'workspace 0'
229 ctrl-1 = 'workspace 1'
230 ctrl-2 = 'workspace 2'
231 ctrl-3 = 'workspace 3'
232 ctrl-4 = 'workspace 4'
233 ctrl-5 = 'workspace 5'
234 ctrl-6 = 'workspace 6'
235 ctrl-7 = 'workspace 7'
236 ctrl-8 = 'workspace 8'
237 ctrl-9 = 'workspace 9'
238
239 ctrl-i = 'workspace I'
240 ctrl-m = 'workspace M'
241 # ctrl-z = 'workspace Z'
242
243 # == Move node to workspace
244 ctrl-shift-0 = 'move-node-to-workspace 0 --focus-follows-window'
245 ctrl-shift-1 = 'move-node-to-workspace 1 --focus-follows-window'
246 ctrl-shift-2 = 'move-node-to-workspace 2 --focus-follows-window'
247 ctrl-shift-3 = 'move-node-to-workspace 3 --focus-follows-window'
248 ctrl-shift-4 = 'move-node-to-workspace 4 --focus-follows-window'
249 ctrl-shift-5 = 'move-node-to-workspace 5 --focus-follows-window'
250 ctrl-shift-6 = 'move-node-to-workspace 6 --focus-follows-window'
251 ctrl-shift-7 = 'move-node-to-workspace 7 --focus-follows-window'
252 ctrl-shift-8 = 'move-node-to-workspace 8 --focus-follows-window'
253 ctrl-shift-9 = 'move-node-to-workspace 9 --focus-follows-window'
254
255 ctrl-shift-i = 'move-node-to-workspace I --focus-follows-window'
256 # ctrl-shift-g = 'move-node-to-workspace G --focus-follows-window'
257 ctrl-shift-m = 'move-node-to-workspace M --focus-follows-window'
258 # ctrl-shift-s = 'move-node-to-workspace S --focus-follows-window'
259 # ctrl-shift-f = 'move-node-to-workspace F --focus-follows-window'
260 ctrl-shift-w = 'move-node-to-workspace W --focus-follows-window'
261 # ctrl-shift-z = 'move-node-to-workspace Z --focus-follows-window'
262
263 # == Monitor focus
264 ctrl-alt-left = 'focus-monitor prev --wrap-around'
265 ctrl-alt-right = 'focus-monitor next --wrap-around'
266
267 # == Move node to monitor
268 cmd-ctrl-shift-left = 'move-node-to-monitor prev --wrap-around --focus-follows-window'
269 cmd-ctrl-shift-right = 'move-node-to-monitor next --wrap-around --focus-follows-window'
270
271 # == Move workspace to monitor
272 cmd-alt-shift-left = 'move-workspace-to-monitor prev'
273 cmd-alt-shift-right = 'move-workspace-to-monitor next'
274
275 # :::
276 # Eh, pretty self-expl
277 # if you ask me? But maybe not accordion, idk
278 #
279 # See: https://nikitabobko.github.io/AeroSpace/commands#layout
280 alt-slash = 'layout horizontal vertical'
281 ctrl-alt-slash = 'layout floating tiling'
282 alt-shift-slash = 'layout tiles accordion'
283
284 # :::
285 # See: https://nikitabobko.github.io/AeroSpace/commands#resize
286 alt-minus = 'resize smart -50'
287 alt-equal = 'resize smart +50'
288 ctrl-alt-minus = 'resize smart -75'
289 ctrl-alt-equal = 'resize smart +75'
290 alt-shift-minus = 'resize smart -100'
291 alt-shift-equal = 'resize smart +100'
292 ctrl-alt-shift-minus = 'resize smart -150'
293 ctrl-alt-shift-equal = 'resize smart +150'
294
295
296 # Launch morkgui via macOS Terminal for dynamic workspace moving, then bring Terminal to front
297 ctrl-alt-shift-m = [
298 "exec-and-forget osascript -e 'tell application \"Terminal\" to do script \"/usr/local/bin/morkgui; exit\"' -e 'tell application \"Terminal\" to activate'",
299 "mode main"
300 ]
301
302 # :::: NOTE: @espadonne broken
303 # ::::: don't feel like searching
304 # ::::: through binaries atm
305 # ::::
306 # :::: NOTE: @ espadonne some just go by name
307 # ::::
308 # ctrl-alt-i = 'exec-and-forget open -a /System/Applications/Utilities/Activity Monitor.app'
309 # ctrl-alt-j = 'exec-and-forget open -a /System/Volumes/Data/Applications/DaVinci Resolve/DaVinci Resolve.app'
310
311
312 # :::
313 # :::: FLOATING WINDOWS ::::
314 # ::::: :::::::::::::::: :::::
315 #
316 # NOTE: you'll float too ;)
317 # - Coppersage the C(L)ow(N)
318 # - @espadonne
319 # - mfw (just a bittabanta)
320 #
321 # TODO: @espadonne there's a better way
322 #
323 [[on-window-detected]]
324 if.app-name-regex-substring = '(?i)^(finder|zotero|skim)'
325 run = 'layout floating'
326
327 [[on-window-detected]]
328 if.app-name-regex-substring = '(?i)^(camera|quicktime|synergy)'
329 run = 'layout floating'
330
331 [[on-window-detected]]
332 if.app-name-regex-substring = '(?i)^(safari|app store|contacts)'
333 run = 'layout floating'
334
335 [[on-window-detected]]
336 if.app-name-regex-substring = '(?i)^(chatgpt|bitwarden|calculator)'
337 run = 'layout floating'
338
339 [[on-window-detected]]
340 if.app-name-regex-substring = '(?i)^(zoom|balena|activity monitor)'
341 run = 'layout floating'
342
343 [[on-window-detected]]
344 if.app-name-regex-substring = '(?i)^(passwords|preview|facetime|music|ticktick)'
345 run = 'layout floating'
346
347 [[on-window-detected]]
348 if.app-name-regex-substring = '(?i)^(reminders|siri|weather|books|clock|notes|ghostty|terminal|alacritty)'
349 run = 'layout floating'
350
351 [[on-window-detected]]
352 if.window-title-regex-substring = '(?i)wulftp'
353 run = 'layout floating'
354
355 # :::
356 # :::: DEDICATED WORKSPINDOWS ::::
357 # ::::: :::::::::::::::::::::: :::::
358 #
359
360 # [[on-window-detected]]
361 # if.app-name-regex-substring = '(?i)ghostty'
362 # run = [
363 # 'layout tiling',
364 # 'move-node-to-workspace G',
365 # ]
366
367 # [[on-window-detected]]
368 # if.app-name-regex-substring = '(?i)wezterm'
369 # run = [
370 # 'layout tiling',
371 # 'move-node-to-workspace W',
372 # ]
373
374 # [[on-window-detected]]
375 # if.app-name-regex-substring = '(?i)terminal'
376 # run = [
377 # 'layout tiling',
378 # 'move-node-to-workspace T'
379 # ]
380
381 # [[on-window-detected]]
382 # if.app-name-regex-substring = '(?i)discord'
383 # run = [
384 # 'layout tiling',
385 # 'move-node-to-workspace I',
386 # ]
387
388
389 [[on-window-detected]]
390 if.app-name-regex-substring = '(?i)messages'
391 run = [
392 'layout tiling',
393 'move-node-to-workspace M',
394 ]
395
396 [[on-window-detected]]
397 if.app-name-regex-substring = '(?i)firefox'
398 run = [
399 'layout tiling',
400 'move-node-to-workspace 1',
401 ]
402
403 # [[on-window-detected]]
404 # if.app-name-regex-substring = '(?i)zen'
405 # run = [
406 # 'layout tiling',
407 # 'move-node-to-workspace Z',
408 # ]
409
410 # [[on-window-detected]]
411 # if.app-name-regex-substring = '(?i)davinci'
412 # run = [
413 # 'layout tiling',
414 # 'move-node-to-workspace V',
415 # ]
416
417 # Float only if launched with title "WezFloat" (broken)
418 [[on-window-detected]]
419 if.window-title-regex-substring = 'WezFloat'
420 run = 'layout floating'
421
422 # Default tiling for other WezTerm windows (but the other thing is broken anyway)
423 [[on-window-detected]]
424 if.app-name-regex-substring = '(?i)wezterm'
425 run = 'layout tiling'
426
427
428 # :::
429 # :::: APPLE APPS // UTILITY MODE ::::
430 # ::::: :::::::::::::::::::::::::: :::::
431 #
432 [mode.utility.binding]
433 u = ['exec-and-forget open -a Preview', 'mode main']
434 i = ['exec-and-forget open -a Siri', 'mode main']
435 b = ['exec-and-forget open -a Books', 'mode main']
436 m = ['exec-and-forget open -a Music', 'mode main']
437 n = ['exec-and-forget open -a Notes', 'mode main']
438 e = ['exec-and-forget open -a Finder', 'mode main']
439 w = ['exec-and-forget open -a Weather', 'mode main']
440 t = ['exec-and-forget open -a Terminal', 'mode main']
441 f = ['exec-and-forget open -a FaceTime', 'mode main']
442 d = ['exec-and-forget open -a Freeform', 'mode main']
443 l = ['exec-and-forget open -a Launchpad', 'mode main']
444 r = ['exec-and-forget open -a Reminders', 'mode main']
445 c = ['exec-and-forget open -a Calculator', 'mode main']
446 v = ['exec-and-forget open -a Voice Memos', 'mode main']
447 s = ['exec-and-forget open -a /Applications/Safari.app', 'mode main']
448 h = ['exec-and-forget open -a /Applications/ChatGPT.app', 'mode main']
449 # :::
450 # yeah, y'all he bit the bullet,
451 # but it kinda gets in the way from my
452 # brief tinkering thus far. Like it'll propose
453 # decisions that are really just clear downstream problems and u-
454 # nless you read along with some care it's easy to miss the trenchfootgu
455 # -n.
456 p = ['exec-and-forget open -a /Applications/Bitwarden.app', 'mode main']
457
458 esc = 'mode main'
459 ctrl-esc = ['reload-config', 'mode main']
460
461 ctrl-r = ['flatten-workspace-tree', 'mode main']
462 backspace = ['close-all-windows-but-current', 'mode main']
463
464 # TODO: mfw look into, pulled from dfault config
465 alt-shift-k = ['join-with up', 'mode main']
466 alt-shift-j = ['join-with down', 'mode main']
467 alt-shift-h = ['join-with left', 'mode main']
468 alt-shift-l = ['join-with right', 'mode main']
469
470
471
472 [mode.apps.binding]
473 z = ['exec-and-forget open -a /Applications/Zen.app', 'mode main']
474 s = ['exec-and-forget open -a /Applications/Slack.app', 'mode main']
475 w = ['exec-and-forget open -a WezTerm', 'mode main']
476 f = ['exec-and-forget open -a /Applications/Firefox.app', 'mode main']
477 g = ['exec-and-forget open -a /Applications/Ghostty.app', 'mode main']
478 i = ['exec-and-forget open -a /Applications/Discord.app', 'mode main']
479 a = ['exec-and-forget open -a /Applications/Audacity.app', 'mode main']
480 m = ['exec-and-forget open -a /System/Applications/Messages.app', 'mode main']
481 o = ['exec-and-forget open -a ticktick', 'mode main']
482 esc = 'mode main'