TOML · 14949 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-alt-enter = 'exec-and-forget open -n -a iTerm'
211 cmd-shift-enter = 'exec-and-forget open -na Ghostty'
212
213
214 ctrl-alt-tab = 'workspace-back-and-forth'
215
216 # == Node focus (pane navigation)
217 ctrl-shift-left = 'focus left'
218 ctrl-shift-down = 'focus down'
219 ctrl-shift-up = 'focus up'
220 ctrl-shift-right = 'focus right'
221
222 # == Move node (pane reposition)
223 ctrl-alt-shift-left = 'move left'
224 ctrl-alt-shift-down = 'move down'
225 ctrl-alt-shift-up = 'move up'
226 ctrl-alt-shift-right = 'move right'
227
228 # == Workspace select
229 ctrl-0 = 'workspace 0'
230 ctrl-1 = 'workspace 1'
231 ctrl-2 = 'workspace 2'
232 ctrl-3 = 'workspace 3'
233 ctrl-4 = 'workspace 4'
234 ctrl-5 = 'workspace 5'
235 ctrl-6 = 'workspace 6'
236 ctrl-7 = 'workspace 7'
237 ctrl-8 = 'workspace 8'
238 ctrl-9 = 'workspace 9'
239
240 ctrl-i = 'workspace I'
241 ctrl-m = 'workspace M'
242 # ctrl-z = 'workspace Z'
243
244 # == Move node to workspace
245 ctrl-shift-0 = 'move-node-to-workspace 0 --focus-follows-window'
246 ctrl-shift-1 = 'move-node-to-workspace 1 --focus-follows-window'
247 ctrl-shift-2 = 'move-node-to-workspace 2 --focus-follows-window'
248 ctrl-shift-3 = 'move-node-to-workspace 3 --focus-follows-window'
249 ctrl-shift-4 = 'move-node-to-workspace 4 --focus-follows-window'
250 ctrl-shift-5 = 'move-node-to-workspace 5 --focus-follows-window'
251 ctrl-shift-6 = 'move-node-to-workspace 6 --focus-follows-window'
252 ctrl-shift-7 = 'move-node-to-workspace 7 --focus-follows-window'
253 ctrl-shift-8 = 'move-node-to-workspace 8 --focus-follows-window'
254 ctrl-shift-9 = 'move-node-to-workspace 9 --focus-follows-window'
255
256 ctrl-shift-i = 'move-node-to-workspace I --focus-follows-window'
257 # ctrl-shift-g = 'move-node-to-workspace G --focus-follows-window'
258 ctrl-shift-m = 'move-node-to-workspace M --focus-follows-window'
259 # ctrl-shift-s = 'move-node-to-workspace S --focus-follows-window'
260 # ctrl-shift-f = 'move-node-to-workspace F --focus-follows-window'
261 ctrl-shift-w = 'move-node-to-workspace W --focus-follows-window'
262 # ctrl-shift-z = 'move-node-to-workspace Z --focus-follows-window'
263
264 # == Monitor focus
265 ctrl-alt-left = 'focus-monitor prev --wrap-around'
266 ctrl-alt-right = 'focus-monitor next --wrap-around'
267
268 # == Move node to monitor
269 cmd-ctrl-shift-left = 'move-node-to-monitor prev --wrap-around --focus-follows-window'
270 cmd-ctrl-shift-right = 'move-node-to-monitor next --wrap-around --focus-follows-window'
271
272 # == Move workspace to monitor
273 cmd-alt-shift-left = 'move-workspace-to-monitor prev'
274 cmd-alt-shift-right = 'move-workspace-to-monitor next'
275
276 # :::
277 # Eh, pretty self-expl
278 # if you ask me? But maybe not accordion, idk
279 #
280 # See: https://nikitabobko.github.io/AeroSpace/commands#layout
281 alt-slash = 'layout horizontal vertical'
282 ctrl-alt-slash = 'layout floating tiling'
283 alt-shift-slash = 'layout tiles accordion'
284
285 # :::
286 # See: https://nikitabobko.github.io/AeroSpace/commands#resize
287 alt-minus = 'resize smart -50'
288 alt-equal = 'resize smart +50'
289 ctrl-alt-minus = 'resize smart -75'
290 ctrl-alt-equal = 'resize smart +75'
291 alt-shift-minus = 'resize smart -100'
292 alt-shift-equal = 'resize smart +100'
293 ctrl-alt-shift-minus = 'resize smart -150'
294 ctrl-alt-shift-equal = 'resize smart +150'
295
296
297 # Launch morkgui via macOS Terminal for dynamic workspace moving, then bring Terminal to front
298 ctrl-alt-shift-m = [
299 "exec-and-forget osascript -e 'tell application \"Terminal\" to do script \"/usr/local/bin/morkgui; exit\"' -e 'tell application \"Terminal\" to activate'",
300 "mode main"
301 ]
302
303 # :::: NOTE: @espadonne broken
304 # ::::: don't feel like searching
305 # ::::: through binaries atm
306 # ::::
307 # :::: NOTE: @ espadonne some just go by name
308 # ::::
309 # ctrl-alt-i = 'exec-and-forget open -a /System/Applications/Utilities/Activity Monitor.app'
310 # ctrl-alt-j = 'exec-and-forget open -a /System/Volumes/Data/Applications/DaVinci Resolve/DaVinci Resolve.app'
311
312
313 # :::
314 # :::: FLOATING WINDOWS ::::
315 # ::::: :::::::::::::::: :::::
316 #
317 # NOTE: you'll float too ;)
318 # - Coppersage the C(L)ow(N)
319 # - @espadonne
320 # - mfw (just a bittabanta)
321 #
322 # TODO: @espadonne there's a better way
323 #
324 [[on-window-detected]]
325 if.app-name-regex-substring = '(?i)^(finder|zotero|skim)'
326 run = 'layout floating'
327
328 [[on-window-detected]]
329 if.app-name-regex-substring = '(?i)^(camera|quicktime|synergy)'
330 run = 'layout floating'
331
332 [[on-window-detected]]
333 if.app-name-regex-substring = '(?i)^(safari|app store|contacts)'
334 run = 'layout floating'
335
336 [[on-window-detected]]
337 if.app-name-regex-substring = '(?i)^(chatgpt|bitwarden|calculator)'
338 run = 'layout floating'
339
340 [[on-window-detected]]
341 if.app-name-regex-substring = '(?i)^(zoom|balena|activity monitor)'
342 run = 'layout floating'
343
344 [[on-window-detected]]
345 if.app-name-regex-substring = '(?i)^(passwords|preview|facetime|music|ticktick)'
346 run = 'layout floating'
347
348 [[on-window-detected]]
349 if.app-name-regex-substring = '(?i)^(reminders|siri|weather|books|clock|notes|ghostty|terminal|alacritty)'
350 run = 'layout floating'
351
352 [[on-window-detected]]
353 if.window-title-regex-substring = '(?i)wulftp'
354 run = 'layout floating'
355
356 # :::
357 # :::: DEDICATED WORKSPINDOWS ::::
358 # ::::: :::::::::::::::::::::: :::::
359 #
360
361 # [[on-window-detected]]
362 # if.app-name-regex-substring = '(?i)ghostty'
363 # run = [
364 # 'layout tiling',
365 # 'move-node-to-workspace G',
366 # ]
367
368 # [[on-window-detected]]
369 # if.app-name-regex-substring = '(?i)wezterm'
370 # run = [
371 # 'layout tiling',
372 # 'move-node-to-workspace W',
373 # ]
374
375 # [[on-window-detected]]
376 # if.app-name-regex-substring = '(?i)terminal'
377 # run = [
378 # 'layout tiling',
379 # 'move-node-to-workspace T'
380 # ]
381
382 # [[on-window-detected]]
383 # if.app-name-regex-substring = '(?i)discord'
384 # run = [
385 # 'layout tiling',
386 # 'move-node-to-workspace I',
387 # ]
388
389
390 [[on-window-detected]]
391 if.app-name-regex-substring = '(?i)messages'
392 run = [
393 'layout tiling',
394 'move-node-to-workspace M',
395 ]
396
397 [[on-window-detected]]
398 if.app-name-regex-substring = '(?i)firefox'
399 run = [
400 'layout tiling',
401 'move-node-to-workspace 1',
402 ]
403
404 # [[on-window-detected]]
405 # if.app-name-regex-substring = '(?i)zen'
406 # run = [
407 # 'layout tiling',
408 # 'move-node-to-workspace Z',
409 # ]
410
411 # [[on-window-detected]]
412 # if.app-name-regex-substring = '(?i)davinci'
413 # run = [
414 # 'layout tiling',
415 # 'move-node-to-workspace V',
416 # ]
417
418 # Float only if launched with title "WezFloat" (broken)
419 [[on-window-detected]]
420 if.window-title-regex-substring = 'WezFloat'
421 run = 'layout floating'
422
423 # Default tiling for other WezTerm windows (but the other thing is broken anyway)
424 [[on-window-detected]]
425 if.app-name-regex-substring = '(?i)wezterm'
426 run = 'layout tiling'
427
428
429 # :::
430 # :::: APPLE APPS // UTILITY MODE ::::
431 # ::::: :::::::::::::::::::::::::: :::::
432 #
433 [mode.utility.binding]
434 u = ['exec-and-forget open -a Preview', 'mode main']
435 i = ['exec-and-forget open -a Siri', 'mode main']
436 b = ['exec-and-forget open -a Books', 'mode main']
437 m = ['exec-and-forget open -a Music', 'mode main']
438 n = ['exec-and-forget open -a Notes', 'mode main']
439 e = ['exec-and-forget open -a Finder', 'mode main']
440 w = ['exec-and-forget open -a Weather', 'mode main']
441 t = ['exec-and-forget open -a Terminal', 'mode main']
442 f = ['exec-and-forget open -a FaceTime', 'mode main']
443 d = ['exec-and-forget open -a Freeform', 'mode main']
444 l = ['exec-and-forget open -a Launchpad', 'mode main']
445 r = ['exec-and-forget open -a Reminders', 'mode main']
446 c = ['exec-and-forget open -a Calculator', 'mode main']
447 v = ['exec-and-forget open -a Voice Memos', 'mode main']
448 s = ['exec-and-forget open -a /Applications/Safari.app', 'mode main']
449 h = ['exec-and-forget open -a /Applications/ChatGPT.app', 'mode main']
450 # :::
451 # yeah, y'all he bit the bullet,
452 # but it kinda gets in the way from my
453 # brief tinkering thus far. Like it'll propose
454 # decisions that are really just clear downstream problems and u-
455 # nless you read along with some care it's easy to miss the trenchfootgu
456 # -n.
457 p = ['exec-and-forget open -a /Applications/Bitwarden.app', 'mode main']
458
459 esc = 'mode main'
460 ctrl-esc = ['reload-config', 'mode main']
461
462 ctrl-r = ['flatten-workspace-tree', 'mode main']
463 backspace = ['close-all-windows-but-current', 'mode main']
464
465 # TODO: mfw look into, pulled from dfault config
466 alt-shift-k = ['join-with up', 'mode main']
467 alt-shift-j = ['join-with down', 'mode main']
468 alt-shift-h = ['join-with left', 'mode main']
469 alt-shift-l = ['join-with right', 'mode main']
470
471
472
473 [mode.apps.binding]
474 z = ['exec-and-forget open -a /Applications/Zen.app', 'mode main']
475 s = ['exec-and-forget open -a /Applications/Slack.app', 'mode main']
476 w = ['exec-and-forget open -a WezTerm', 'mode main']
477 f = ['exec-and-forget open -a /Applications/Firefox.app', 'mode main']
478 g = ['exec-and-forget open -a /Applications/Ghostty.app', 'mode main']
479 i = ['exec-and-forget open -a /Applications/Discord.app', 'mode main']
480 a = ['exec-and-forget open -a /Applications/Audacity.app', 'mode main']
481 m = ['exec-and-forget open -a /System/Applications/Messages.app', 'mode main']
482 o = ['exec-and-forget open -a ticktick', 'mode main']
483 esc = 'mode main'