summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--files/darwin-settings/vorssaint_settings.plist787
-rw-r--r--hosts/RyanMac/configuration.nix93
-rw-r--r--modules/darwin/yabai/default.nix237
3 files changed, 1032 insertions, 85 deletions
diff --git a/files/darwin-settings/vorssaint_settings.plist b/files/darwin-settings/vorssaint_settings.plist
new file mode 100644
index 0000000..44a5daa
--- /dev/null
+++ b/files/darwin-settings/vorssaint_settings.plist
@@ -0,0 +1,787 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>settings</key>
6 <dict>
7 <key>appAppearance</key>
8 <string>system</string>
9 <key>appUpdatesCheckFrequency</key>
10 <string>off</string>
11 <key>appUpdatesIncludeAppStore</key>
12 <true/>
13 <key>appUpdatesNotify</key>
14 <true/>
15 <key>autoCheckUpdates</key>
16 <true/>
17 <key>autoQuitEnabled</key>
18 <true/>
19 <key>autoQuitExceptions</key>
20 <array>
21 <string>com.apple.finder</string>
22 </array>
23 <key>batteryLimitPercent</key>
24 <integer>10</integer>
25 <key>brightnessControlEnabled</key>
26 <false/>
27 <key>brightnessKeysEnabled</key>
28 <false/>
29 <key>brightnessOSDEnabled</key>
30 <false/>
31 <key>cameraPreviewShortcut</key>
32 <string>control+option+command:13</string>
33 <key>cameraPreviewShortcutEnabled</key>
34 <false/>
35 <key>clamshellPreferred</key>
36 <false/>
37 <key>cleanerScheduleFrequency</key>
38 <string>off</string>
39 <key>cleanerScheduleHour</key>
40 <integer>9</integer>
41 <key>cleanerScheduleMinute</key>
42 <integer>0</integer>
43 <key>cleanerScheduleNotify</key>
44 <true/>
45 <key>cleanerScheduleWeekday</key>
46 <integer>2</integer>
47 <key>clipboardHistoryEnabled</key>
48 <false/>
49 <key>clipboardHistoryIncludeImagesFiles</key>
50 <true/>
51 <key>clipboardHistoryLimit</key>
52 <integer>50</integer>
53 <key>clipboardHistoryShortcut</key>
54 <string>control+option+command:9</string>
55 <key>clipboardHistoryShortcutEnabled</key>
56 <true/>
57 <key>clipboardHistorySkipSensitive</key>
58 <true/>
59 <key>colorPickerBareHex</key>
60 <false/>
61 <key>colorPickerFormat</key>
62 <string>hex</string>
63 <key>colorPickerShortcut</key>
64 <string>control+option+command:8</string>
65 <key>colorPickerShortcutEnabled</key>
66 <false/>
67 <key>commandBarAliases</key>
68 <string></string>
69 <key>commandBarDisabledSources</key>
70 <string></string>
71 <key>commandBarHidden</key>
72 <string></string>
73 <key>commandBarPins</key>
74 <string></string>
75 <key>commandBarShortcut</key>
76 <string>option:49</string>
77 <key>commandBarShortcutEnabled</key>
78 <false/>
79 <key>defaultDurationMinutes</key>
80 <integer>0</integer>
81 <key>dockClickCycleWindows</key>
82 <false/>
83 <key>dockClickMinimize</key>
84 <true/>
85 <key>dockPreviewEnabled</key>
86 <true/>
87 <key>extraBrightnessEnabled</key>
88 <false/>
89 <key>extraBrightnessLevel</key>
90 <integer>100</integer>
91 <key>featureAvailable.appUpdates</key>
92 <false/>
93 <key>featureAvailable.autoQuit</key>
94 <true/>
95 <key>featureAvailable.brightness</key>
96 <false/>
97 <key>featureAvailable.cameraPreview</key>
98 <true/>
99 <key>featureAvailable.cleaner</key>
100 <false/>
101 <key>featureAvailable.cleaningMode</key>
102 <false/>
103 <key>featureAvailable.clipboardHistory</key>
104 <false/>
105 <key>featureAvailable.colorPicker</key>
106 <true/>
107 <key>featureAvailable.commandBar</key>
108 <false/>
109 <key>featureAvailable.dockClick</key>
110 <false/>
111 <key>featureAvailable.dockPreview</key>
112 <false/>
113 <key>featureAvailable.extraBrightness</key>
114 <false/>
115 <key>featureAvailable.finderCutPaste</key>
116 <true/>
117 <key>featureAvailable.homebrew</key>
118 <false/>
119 <key>featureAvailable.keepAwake</key>
120 <false/>
121 <key>featureAvailable.keyboardDebounce</key>
122 <false/>
123 <key>featureAvailable.mediaTools</key>
124 <false/>
125 <key>featureAvailable.micMute</key>
126 <false/>
127 <key>featureAvailable.middleClick</key>
128 <false/>
129 <key>featureAvailable.mixer</key>
130 <true/>
131 <key>featureAvailable.monitorCPU</key>
132 <true/>
133 <key>featureAvailable.monitorDisk</key>
134 <true/>
135 <key>featureAvailable.monitorGPU</key>
136 <true/>
137 <key>featureAvailable.monitorMemory</key>
138 <true/>
139 <key>featureAvailable.monitorNetwork</key>
140 <true/>
141 <key>featureAvailable.monitorPower</key>
142 <true/>
143 <key>featureAvailable.mouseButtonShortcuts</key>
144 <false/>
145 <key>featureAvailable.mouseNavigation</key>
146 <false/>
147 <key>featureAvailable.musicBlock</key>
148 <false/>
149 <key>featureAvailable.pastePlain</key>
150 <false/>
151 <key>featureAvailable.quickLauncher</key>
152 <true/>
153 <key>featureAvailable.quickToggles</key>
154 <false/>
155 <key>featureAvailable.radialMenu</key>
156 <true/>
157 <key>featureAvailable.scratchpad</key>
158 <false/>
159 <key>featureAvailable.screenOCR</key>
160 <false/>
161 <key>featureAvailable.screenshot</key>
162 <true/>
163 <key>featureAvailable.scrollInverter</key>
164 <true/>
165 <key>featureAvailable.shelf</key>
166 <true/>
167 <key>featureAvailable.smoothScroll</key>
168 <false/>
169 <key>featureAvailable.soundOutputSwitcher</key>
170 <false/>
171 <key>featureAvailable.superKey</key>
172 <false/>
173 <key>featureAvailable.switcher</key>
174 <false/>
175 <key>featureAvailable.textSnippets</key>
176 <false/>
177 <key>featureAvailable.uninstaller</key>
178 <false/>
179 <key>featureAvailable.urlCleaner</key>
180 <false/>
181 <key>featureAvailable.windowLayout</key>
182 <false/>
183 <key>featureAvailable.windowMaximizer</key>
184 <false/>
185 <key>featuresOnboardingVersion</key>
186 <integer>4</integer>
187 <key>finderCutPasteEnabled</key>
188 <true/>
189 <key>hasOnboarded</key>
190 <true/>
191 <key>hotkeyEnabled</key>
192 <true/>
193 <key>keepAwakeActiveIcon</key>
194 <string>vorssaint</string>
195 <key>keepAwakeAutoStart</key>
196 <false/>
197 <key>keepAwakeConnectedToPower</key>
198 <false/>
199 <key>keepAwakeExternalDisplay</key>
200 <false/>
201 <key>keepAwakeIconTint</key>
202 <string>orange</string>
203 <key>keepAwakeMouseJiggleEnabled</key>
204 <false/>
205 <key>keepAwakeMouseJiggleIntervalMinutes</key>
206 <integer>5</integer>
207 <key>keepAwakeShortcut</key>
208 <string>control+option+command:40</string>
209 <key>keyboardDebounceEnabled</key>
210 <false/>
211 <key>keyboardDebounceKeyWindows</key>
212 <string></string>
213 <key>keyboardDebounceWindowMs</key>
214 <integer>5</integer>
215 <key>lastUpdateIntroVersion</key>
216 <string>3.2.0</string>
217 <key>launchAtLoginWanted</key>
218 <false/>
219 <key>mediaGIFEnd</key>
220 <real>0.0</real>
221 <key>mediaGIFFPS</key>
222 <real>12</real>
223 <key>mediaGIFLoops</key>
224 <true/>
225 <key>mediaGIFQuality</key>
226 <real>0.73999999999999999</real>
227 <key>mediaGIFStart</key>
228 <real>0.0</real>
229 <key>mediaGIFWidth</key>
230 <integer>720</integer>
231 <key>mediaImageFormat</key>
232 <string>jpeg</string>
233 <key>mediaImageMaxDimension</key>
234 <integer>1600</integer>
235 <key>mediaImageQuality</key>
236 <real>0.71999999999999997</real>
237 <key>mediaImageStripMetadata</key>
238 <true/>
239 <key>mediaLastTool</key>
240 <string>videoCompressor</string>
241 <key>mediaTextAccurate</key>
242 <true/>
243 <key>mediaTextLanguageCorrection</key>
244 <true/>
245 <key>mediaVideoCodec</key>
246 <string>h264</string>
247 <key>mediaVideoEnd</key>
248 <real>0.0</real>
249 <key>mediaVideoFPS</key>
250 <real>30</real>
251 <key>mediaVideoKeepAudio</key>
252 <true/>
253 <key>mediaVideoMaxDimension</key>
254 <integer>1280</integer>
255 <key>mediaVideoQuality</key>
256 <real>0.68000000000000005</real>
257 <key>mediaVideoStart</key>
258 <real>0.0</real>
259 <key>menuBarBatteryTemperature</key>
260 <false/>
261 <key>menuBarBatteryTime</key>
262 <false/>
263 <key>menuBarCPU</key>
264 <false/>
265 <key>menuBarCPUTemperature</key>
266 <false/>
267 <key>menuBarCombineTemperatures</key>
268 <true/>
269 <key>menuBarDiskActivity</key>
270 <false/>
271 <key>menuBarDiskUsage</key>
272 <false/>
273 <key>menuBarGPU</key>
274 <false/>
275 <key>menuBarGPUTemperature</key>
276 <false/>
277 <key>menuBarHideIconWithMetrics</key>
278 <false/>
279 <key>menuBarLabelStyle</key>
280 <string>compact</string>
281 <key>menuBarMemoryStyle</key>
282 <string>percent</string>
283 <key>menuBarMetricAppearance</key>
284 <string>values</string>
285 <key>menuBarMetricOrder</key>
286 <string>cpu,cpuTemperature,gpu,gpuTemperature,memory,battery,batteryTime,batteryTemperature,peripheralBattery,network,diskUsage,diskActivity,power</string>
287 <key>menuBarMetricSpacing</key>
288 <string>compact</string>
289 <key>menuBarNetworkUploadFirst</key>
290 <false/>
291 <key>menuBarPeripheralBattery</key>
292 <false/>
293 <key>menuBarPreset</key>
294 <string>dense</string>
295 <key>menuBarSeparateMetrics</key>
296 <false/>
297 <key>menuBarUsageBarCriticalColor</key>
298 <string>#FF453A</string>
299 <key>menuBarUsageBarElevatedColor</key>
300 <string>#FFD60A</string>
301 <key>menuBarUsageBarHighThreshold</key>
302 <integer>90</integer>
303 <key>menuBarUsageBarMediumThreshold</key>
304 <integer>70</integer>
305 <key>menuBarUsageBarNormalColor</key>
306 <string>#64D2FF</string>
307 <key>micMuteMenuBarIndicator</key>
308 <true/>
309 <key>micMuteShortcut</key>
310 <string>control+option+command:46</string>
311 <key>micMuteShortcutEnabled</key>
312 <false/>
313 <key>middleClickEnabled</key>
314 <false/>
315 <key>middleClickExceptions</key>
316 <array/>
317 <key>middleClickTapFingers</key>
318 <integer>0</integer>
319 <key>mixerHeadphonesDisconnectVolumePercent</key>
320 <integer>25</integer>
321 <key>mixerLowerVolumeOnHeadphonesDisconnect</key>
322 <false/>
323 <key>mixerShowFinder</key>
324 <true/>
325 <key>monitorAlertBattery</key>
326 <false/>
327 <key>monitorAlertBatteryPercent</key>
328 <integer>15</integer>
329 <key>monitorAlertCPU</key>
330 <false/>
331 <key>monitorAlertCPUTemperature</key>
332 <false/>
333 <key>monitorAlertCPUTemperatureThreshold</key>
334 <integer>90</integer>
335 <key>monitorAlertCPUThreshold</key>
336 <integer>90</integer>
337 <key>monitorAlertCooldownMinutes</key>
338 <integer>15</integer>
339 <key>monitorAlertDisk</key>
340 <false/>
341 <key>monitorAlertDiskFreePercent</key>
342 <integer>10</integer>
343 <key>monitorAlertMemory</key>
344 <false/>
345 <key>monitorDiskActivity</key>
346 <true/>
347 <key>monitorDiskProtection</key>
348 <true/>
349 <key>monitorDiskSMART</key>
350 <true/>
351 <key>monitorDiskTools</key>
352 <true/>
353 <key>monitorDiskUsage</key>
354 <true/>
355 <key>monitorGraphBattery</key>
356 <true/>
357 <key>monitorGraphCPU</key>
358 <true/>
359 <key>monitorGraphDisk</key>
360 <true/>
361 <key>monitorGraphGPU</key>
362 <true/>
363 <key>monitorGraphMemory</key>
364 <true/>
365 <key>monitorGraphNetwork</key>
366 <true/>
367 <key>monitorGraphPower</key>
368 <true/>
369 <key>monitorIntervalSeconds</key>
370 <integer>2</integer>
371 <key>monitorNetApps</key>
372 <true/>
373 <key>monitorNetSpeed</key>
374 <true/>
375 <key>monitorNetTest</key>
376 <true/>
377 <key>monitorNetTotals</key>
378 <true/>
379 <key>monitorPwrAdapter</key>
380 <true/>
381 <key>monitorPwrBattery</key>
382 <true/>
383 <key>monitorPwrHealth</key>
384 <true/>
385 <key>monitorPwrSystem</key>
386 <true/>
387 <key>monitorPwrTimeRemaining</key>
388 <true/>
389 <key>monitorShowDisk</key>
390 <true/>
391 <key>monitorShowFanControlBeta</key>
392 <false/>
393 <key>monitorShowMixer</key>
394 <true/>
395 <key>monitorShowNetwork</key>
396 <true/>
397 <key>monitorShowPower</key>
398 <true/>
399 <key>monitorShowSystem</key>
400 <true/>
401 <key>monitorSysAlerts</key>
402 <true/>
403 <key>monitorSysBattery</key>
404 <true/>
405 <key>monitorSysCPU</key>
406 <true/>
407 <key>monitorSysGPU</key>
408 <true/>
409 <key>monitorSysMemory</key>
410 <true/>
411 <key>monitorSysTemps</key>
412 <true/>
413 <key>monitorSysUptime</key>
414 <true/>
415 <key>mouseButtonExceptions</key>
416 <array/>
417 <key>mouseButtonShortcuts</key>
418 <dict/>
419 <key>mouseButtonShortcutsEnabled</key>
420 <false/>
421 <key>mouseNavigationEnabled</key>
422 <false/>
423 <key>mouseNavigationExceptions</key>
424 <array/>
425 <key>musicBlockEnabled</key>
426 <false/>
427 <key>musicBlockReplacementPath</key>
428 <string></string>
429 <key>onboardingStep</key>
430 <integer>0</integer>
431 <key>panelCollapsedResetVersion</key>
432 <string>2.15.1</string>
433 <key>panelControlAutoQuit</key>
434 <true/>
435 <key>panelControlCutPaste</key>
436 <true/>
437 <key>panelControlDockClick</key>
438 <true/>
439 <key>panelControlDockClickCycle</key>
440 <true/>
441 <key>panelControlDockPreview</key>
442 <true/>
443 <key>panelControlFilesExpanded</key>
444 <false/>
445 <key>panelControlInputExpanded</key>
446 <false/>
447 <key>panelControlKeyDebounce</key>
448 <true/>
449 <key>panelControlMiddleClick</key>
450 <true/>
451 <key>panelControlMouseButtonShortcuts</key>
452 <true/>
453 <key>panelControlMouseNavigation</key>
454 <true/>
455 <key>panelControlMouseScroll</key>
456 <true/>
457 <key>panelControlRadialMenu</key>
458 <true/>
459 <key>panelControlShelf</key>
460 <true/>
461 <key>panelControlSuperKey</key>
462 <true/>
463 <key>panelControlSwitcher</key>
464 <true/>
465 <key>panelControlTextSnippets</key>
466 <true/>
467 <key>panelControlWindowMaximize</key>
468 <true/>
469 <key>panelControlWindowsExpanded</key>
470 <false/>
471 <key>panelNavigationEnabled</key>
472 <true/>
473 <key>panelPowerOrder</key>
474 <string>system,adapter,battery,remaining,health</string>
475 <key>panelShowBrightness</key>
476 <true/>
477 <key>panelShowControls</key>
478 <true/>
479 <key>panelShowKeepAwake</key>
480 <true/>
481 <key>panelShowToggles</key>
482 <true/>
483 <key>panelShowUtilities</key>
484 <true/>
485 <key>panelToggleDarkMode</key>
486 <true/>
487 <key>panelToggleDesktopIcons</key>
488 <true/>
489 <key>panelToggleDisplayOff</key>
490 <true/>
491 <key>panelToggleEjectDisks</key>
492 <true/>
493 <key>panelToggleEmptyTrash</key>
494 <true/>
495 <key>panelToggleHiddenFiles</key>
496 <true/>
497 <key>panelToggleLockScreen</key>
498 <true/>
499 <key>panelToggleScreenSaver</key>
500 <true/>
501 <key>panelUtilityAppUpdates</key>
502 <true/>
503 <key>panelUtilityCameraPreview</key>
504 <true/>
505 <key>panelUtilityCleaner</key>
506 <true/>
507 <key>panelUtilityCleaning</key>
508 <true/>
509 <key>panelUtilityClipboard</key>
510 <true/>
511 <key>panelUtilityColorPicker</key>
512 <true/>
513 <key>panelUtilityCommandBar</key>
514 <true/>
515 <key>panelUtilityHomebrew</key>
516 <true/>
517 <key>panelUtilityMedia</key>
518 <true/>
519 <key>panelUtilityMicMute</key>
520 <true/>
521 <key>panelUtilityQuickLauncher</key>
522 <true/>
523 <key>panelUtilityScratchpad</key>
524 <true/>
525 <key>panelUtilityScreenOCR</key>
526 <true/>
527 <key>panelUtilityScreenshot</key>
528 <true/>
529 <key>panelUtilityURLCleaner</key>
530 <true/>
531 <key>panelUtilityUninstaller</key>
532 <true/>
533 <key>panelUtilityWindowLayout</key>
534 <true/>
535 <key>pastePlainEnabled</key>
536 <false/>
537 <key>pastePlainShortcut</key>
538 <string>option+shift+command:9</string>
539 <key>previewSize</key>
540 <string>normal</string>
541 <key>quickLauncherHiddenItems</key>
542 <string></string>
543 <key>quickLauncherShortcut</key>
544 <string>control+command:9</string>
545 <key>quickLauncherShortcutEnabled</key>
546 <true/>
547 <key>radialMenuActivationMode</key>
548 <string>pressOrHold</string>
549 <key>radialMenuAtPointer</key>
550 <true/>
551 <key>radialMenuEnabled</key>
552 <false/>
553 <key>radialMenuItems</key>
554 <data>
555 W3sicGF5bG9hZCI6InNjcmVlbnNob3QiLCJjaGlsZHJlbiI6W10sIm5hbWUi
556 OiIiLCJpZCI6IjU1N0M5QjY0LURBRUQtNEY0OS1CMjAyLUE2RTRFMjg3QkE3
557 MSIsImtpbmQiOiJ0b29sIiwic3ltYm9sTmFtZSI6IiJ9LHsicGF5bG9hZCI6
558 ImNvbG9yUGlja2VyIiwiY2hpbGRyZW4iOltdLCJuYW1lIjoiIiwiaWQiOiI4
559 NDc1RTg2OS0yNjFELTQ2OEUtODJEOC1BMjFGM0VFN0VGQjgiLCJraW5kIjoi
560 dG9vbCIsInN5bWJvbE5hbWUiOiIifSx7InBheWxvYWQiOiJjYW1lcmFQcmV2
561 aWV3IiwiY2hpbGRyZW4iOltdLCJuYW1lIjoiIiwiaWQiOiIzRTNCRUU3MS05
562 QzgxLTQ5QjMtOTEzNS03OTA5RkY5MDc4QUQiLCJraW5kIjoidG9vbCIsInN5
563 bWJvbE5hbWUiOiIifV0=
564 </data>
565 <key>radialMenuMouseButton</key>
566 <string>off</string>
567 <key>radialMenuShortcut</key>
568 <string>control+option+command:49</string>
569 <key>releaseNotesOnUpdate</key>
570 <true/>
571 <key>scratchpadCloseOnClickOutside</key>
572 <true/>
573 <key>scratchpadRetention</key>
574 <string>never</string>
575 <key>scratchpadShortcut</key>
576 <string>control+option+command:45</string>
577 <key>scratchpadShortcutEnabled</key>
578 <false/>
579 <key>screenOCRDetectQRCodes</key>
580 <true/>
581 <key>screenOCRShortcut</key>
582 <string>control+option+command:17</string>
583 <key>screenOCRShortcutEnabled</key>
584 <false/>
585 <key>screenshotAnnotationShadows</key>
586 <false/>
587 <key>screenshotBackdropPresets</key>
588 <string>[]</string>
589 <key>screenshotBackdropStyle</key>
590 <string></string>
591 <key>screenshotCopyToClipboard</key>
592 <true/>
593 <key>screenshotDefaultAction</key>
594 <string></string>
595 <key>screenshotDelay</key>
596 <integer>0</integer>
597 <key>screenshotDownscale</key>
598 <false/>
599 <key>screenshotFileNamePattern</key>
600 <string></string>
601 <key>screenshotFileNumberNext</key>
602 <integer>1</integer>
603 <key>screenshotFileNumberStart</key>
604 <integer>1</integer>
605 <key>screenshotFreeze</key>
606 <true/>
607 <key>screenshotIncludePointer</key>
608 <false/>
609 <key>screenshotLastColor</key>
610 <string>red</string>
611 <key>screenshotLastSticker</key>
612 <string>check</string>
613 <key>screenshotLastStroke</key>
614 <string>medium</string>
615 <key>screenshotLastTool</key>
616 <string>select</string>
617 <key>screenshotOpenEditorDirectly</key>
618 <false/>
619 <key>screenshotSaveFolder</key>
620 <string></string>
621 <key>screenshotSaveSubfolder</key>
622 <string></string>
623 <key>screenshotShortcut</key>
624 <string>control+option+command:21</string>
625 <key>screenshotShortcutEnabled</key>
626 <true/>
627 <key>screenshotShowLastRegion</key>
628 <true/>
629 <key>screenshotToolOrder</key>
630 <string>select,arrow,pixelate,crop,text,sticker,rect,highlight,freehand,line,ellipse,counter,redact</string>
631 <key>screenshotToolShortcutsEnabled</key>
632 <true/>
633 <key>scrollInverterEnabled</key>
634 <true/>
635 <key>scrollInverterExceptions</key>
636 <array/>
637 <key>shelfAutomaticExclusions</key>
638 <array/>
639 <key>shelfCloseAfterDrop</key>
640 <false/>
641 <key>shelfDropZoneEnabled</key>
642 <true/>
643 <key>shelfEnabled</key>
644 <true/>
645 <key>shelfRemoveAfterDrop</key>
646 <true/>
647 <key>shelfShakeToOpen</key>
648 <true/>
649 <key>shelfShortcut</key>
650 <string>control+option+command:2</string>
651 <key>shelfShortcutEnabled</key>
652 <true/>
653 <key>showCountdownInMenuBar</key>
654 <false/>
655 <key>smoothScrollEnabled</key>
656 <false/>
657 <key>smoothScrollExceptions</key>
658 <array/>
659 <key>smoothScrollStep</key>
660 <integer>40</integer>
661 <key>snippetLibraryEnabled</key>
662 <false/>
663 <key>snippetLibraryShortcut</key>
664 <string>control+option+command:37</string>
665 <key>soundOutputSwitcherEnabled</key>
666 <false/>
667 <key>soundOutputSwitcherShortcut</key>
668 <string>control+option+command:1</string>
669 <key>superKeyEnabled</key>
670 <false/>
671 <key>superKeySoloAction</key>
672 <string>none</string>
673 <key>supportUpdateIntroVersion</key>
674 <string>3.1.13</string>
675 <key>switcherCurrentSpaceOnly</key>
676 <false/>
677 <key>switcherEnabled</key>
678 <true/>
679 <key>switcherIconRowMode</key>
680 <false/>
681 <key>switcherMergeTabs</key>
682 <false/>
683 <key>switcherShortcut</key>
684 <string>command:48</string>
685 <key>switcherShowWindowlessFinder</key>
686 <true/>
687 <key>switcherSimpleMode</key>
688 <false/>
689 <key>switcherWindowShortcut</key>
690 <string>command:50</string>
691 <key>switcherWindowlessApps</key>
692 <string>finder</string>
693 <key>temperatureUnit</key>
694 <string>celsius</string>
695 <key>textSnippetsEnabled</key>
696 <false/>
697 <key>updateHighlightsSeenVersion</key>
698 <string>3.2.0</string>
699 <key>urlCleanerEnabled</key>
700 <false/>
701 <key>whatsAppDownloadsAutomaticEnabled</key>
702 <false/>
703 <key>whatsAppDownloadsCategories</key>
704 <string>image,video,audio</string>
705 <key>whatsAppDownloadsIncludeExisting</key>
706 <false/>
707 <key>whatsAppDownloadsNotify</key>
708 <true/>
709 <key>whatsAppDownloadsRetentionDays</key>
710 <integer>7</integer>
711 <key>whatsAppOrganizerCategories</key>
712 <string>image,video,audio,document,archive,other</string>
713 <key>whatsAppOrganizerDelayMinutes</key>
714 <integer>5</integer>
715 <key>whatsAppOrganizerDuplicateAction</key>
716 <string>trashNew</string>
717 <key>whatsAppOrganizerEnabled</key>
718 <false/>
719 <key>whatsAppOrganizerLayout</key>
720 <string>flat</string>
721 <key>windowGestureEnabled</key>
722 <false/>
723 <key>windowGestureModifiers</key>
724 <string>control+command</string>
725 <key>windowGestureRaiseWindow</key>
726 <false/>
727 <key>windowLayoutHiddenActions</key>
728 <string></string>
729 <key>windowLayoutShortcutBottom</key>
730 <string>control+option:125</string>
731 <key>windowLayoutShortcutBottomCenterSixth</key>
732 <string>none</string>
733 <key>windowLayoutShortcutBottomLeft</key>
734 <string>control+option:38</string>
735 <key>windowLayoutShortcutBottomLeftSixth</key>
736 <string>none</string>
737 <key>windowLayoutShortcutBottomRight</key>
738 <string>control+option:40</string>
739 <key>windowLayoutShortcutBottomRightSixth</key>
740 <string>none</string>
741 <key>windowLayoutShortcutCenter</key>
742 <string>control+option:8</string>
743 <key>windowLayoutShortcutCenterThird</key>
744 <string>control+option:3</string>
745 <key>windowLayoutShortcutFullScreen</key>
746 <string>none</string>
747 <key>windowLayoutShortcutLeft</key>
748 <string>control+option:123</string>
749 <key>windowLayoutShortcutLeftThird</key>
750 <string>control+option:2</string>
751 <key>windowLayoutShortcutLeftTwoThirds</key>
752 <string>control+option:14</string>
753 <key>windowLayoutShortcutMaximize</key>
754 <string>control+option:36</string>
755 <key>windowLayoutShortcutNextDisplay</key>
756 <string>control+option+command:124</string>
757 <key>windowLayoutShortcutRestore</key>
758 <string>control+option:15</string>
759 <key>windowLayoutShortcutRight</key>
760 <string>control+option:124</string>
761 <key>windowLayoutShortcutRightThird</key>
762 <string>control+option:5</string>
763 <key>windowLayoutShortcutRightTwoThirds</key>
764 <string>control+option:17</string>
765 <key>windowLayoutShortcutTop</key>
766 <string>control+option:126</string>
767 <key>windowLayoutShortcutTopCenterSixth</key>
768 <string>none</string>
769 <key>windowLayoutShortcutTopLeft</key>
770 <string>control+option:32</string>
771 <key>windowLayoutShortcutTopLeftSixth</key>
772 <string>none</string>
773 <key>windowLayoutShortcutTopRight</key>
774 <string>control+option:34</string>
775 <key>windowLayoutShortcutTopRightSixth</key>
776 <string>none</string>
777 <key>windowLayoutShortcutsEnabled</key>
778 <false/>
779 <key>windowMaximizeEnabled</key>
780 <true/>
781 </dict>
782 <key>vorssaintBackupAppVersion</key>
783 <string>3.2.0</string>
784 <key>vorssaintBackupVersion</key>
785 <integer>1</integer>
786</dict>
787</plist>
diff --git a/hosts/RyanMac/configuration.nix b/hosts/RyanMac/configuration.nix
index e8339e6..307c7f0 100644
--- a/hosts/RyanMac/configuration.nix
+++ b/hosts/RyanMac/configuration.nix
@@ -24,20 +24,6 @@ let
24 ]; 24 ];
25 }); 25 });
26 26
27 mkSpace = i: {
28 name = toString (117+i);
29 value = {
30 enabled = true;
31 value = {
32 type = "standard";
33 parameters = [ (48 + i) (builtins.elemAt [ 18 19 20 21 22 23 25 26 28 ] (i - 1)) 524288 ]; # opt + num
34 #parameters = [ (48 + i) (builtins.elemAt [ 18 19 20 21 22 23 25 26 28 ] (i - 1)) 1048576 ]; # cmd + num
35 };
36 };
37 };
38
39 spaceHotkeys = builtins.listToAttrs (map mkSpace (lib.range 1 9));
40
41 manualHotkeys = { 27 manualHotkeys = {
42 "64" = { 28 "64" = {
43 enabled = true; 29 enabled = true;
@@ -49,6 +35,7 @@ in {
49 imports = [ 35 imports = [
50 inputs.nix-homebrew.darwinModules.nix-homebrew 36 inputs.nix-homebrew.darwinModules.nix-homebrew
51 ../../modules/darwin/random-wallpaper 37 ../../modules/darwin/random-wallpaper
38 ../../modules/darwin/yabai
52 ]; 39 ];
53 40
54 # Define the system's user and home dir location 41 # Define the system's user and home dir location
@@ -69,43 +56,14 @@ in {
69 }; 56 };
70 57
71 # Configure yabai 58 # Configure yabai
72 services.yabai = { 59 local.yabai = {
73 enable = true; 60 enable = true;
74 enableScriptingAddition = false; 61 defaultPadding = 10;
75 config = { 62 defaultTopPadding = 10;
76 mouse_follows_focus = "on"; 63 displayTopPadding = {
77 layout = "bsp"; 64 "6131F10F-6020-4D7E-8222-8702B5AEF45E" = 40;
78 window_placement = "second_child";
79 top_padding = "10";
80 bottom_padding = "10";
81 left_padding = "10";
82 right_padding = "10";
83 window_gap = "10";
84 mouse_modifier = "alt";
85 mouse_drop_action = "swap";
86 mouse_action1 = "move";
87 mouse_action2 = "resize";
88 focus_follows_mouse = "autofocus";
89 }; 65 };
90 extraConfig = '' 66 extraSymbolicHotkeys = manualHotkeys;
91 yabai -m rule --add app='System Settings' manage=off
92 yabai -m rule --add app="^Zen$" title="^Picture-in-Picture$" manage=off
93 ''
94 # Add simple-bar signals if enabled
95 + lib.optionalString config.home-manager.users.${username}.ryan.simple-bar.enable ''
96 yabai -m signal --add event=window_focused action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-bar spaces & windows when focused application changes"
97 yabai -m signal --add event=window_resized action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-bar spaces & windows when a window is resized"
98 yabai -m signal --add event=window_destroyed action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-ba spaces & windows when an application window is closed"
99 yabai -m signal --add event=space_changed action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-bar spaces & windows on space change"
100 yabai -m signal --add event=display_changed action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-bar spaces & windows on display focus change"
101 yabai -m signal --add event=window_title_changed action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-bar spaces & windows when current window title changes"
102 yabai -m signal --add event=space_destroyed action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-bar spaces & windows on space removal"
103 yabai -m signal --add event=space_created action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-bar spaces & windows on space creation"
104 yabai -m signal --add event=application_activated action="curl http://localhost:7776/yabai/spaces/refresh && curl http://localhost:7776/yabai/windows/refresh" label="Refresh simple-bar spaces & windows when application is activated"
105 yabai -m signal --add event=display_added action="curl http://localhost:7776/yabai/displays/refresh" label="Refresh simple-bar displays when a new dispay is added"
106 yabai -m signal --add event=display_removed action="curl http://localhost:7776/yabai/displays/refresh" label="Refresh simple-bar displays when a dispay is removed"
107 yabai -m signal --add event=display_moved action="curl http://localhost:7776/yabai/displays/refresh" label="Refresh simple-bar displays when a dispay is moved"
108 '';
109 }; 67 };
110 68
111 # Configure JankyBorders 69 # Configure JankyBorders
@@ -200,6 +158,7 @@ in {
200 "gimp" 158 "gimp"
201 "kdenlive" 159 "kdenlive"
202 "rustdesk" 160 "rustdesk"
161 "vorssaint"
203 ]; 162 ];
204 }; 163 };
205 164
@@ -209,35 +168,6 @@ in {
209 skhdConfig = '' 168 skhdConfig = ''
210 alt - d : osascript -e 'tell application "System Events" to key code 49 using {command down}' 169 alt - d : osascript -e 'tell application "System Events" to key code 49 using {command down}'
211 alt - return : osascript -e 'tell application "Ghostty"' -e 'new window' -e 'activate' -e 'end tell' 170 alt - return : osascript -e 'tell application "Ghostty"' -e 'new window' -e 'activate' -e 'end tell'
212
213 shift + alt - q : ${pkgs.yabai}/bin/yabai -m window --close
214
215 alt - up : ${pkgs.yabai}/bin/yabai -m window --focus north || ${pkgs.yabai}/bin/yabai -m display --focus north
216 shift + alt - up : ${pkgs.yabai}/bin/yabai -m window --swap north || ${pkgs.yabai}/bin/yabai -m window --display north
217 alt - down : ${pkgs.yabai}/bin/yabai -m window --focus south || ${pkgs.yabai}/bin/yabai -m display --focus south
218 shift + alt - down : ${pkgs.yabai}/bin/yabai -m window --swap south || ${pkgs.yabai}/bin/yabai -m window --display south
219 alt - right : ${pkgs.yabai}/bin/yabai -m window --focus east || ${pkgs.yabai}/bin/yabai -m display --focus east
220 shift + alt - right : ${pkgs.yabai}/bin/yabai -m window --swap east || ${pkgs.yabai}/bin/yabai -m window --display east
221 alt - left : ${pkgs.yabai}/bin/yabai -m window --focus west || ${pkgs.yabai}/bin/yabai -m display --focus west
222 shift + alt - left: ${pkgs.yabai}/bin/yabai -m window --swap west || ${pkgs.yabai}/bin/yabai -m window --display west
223
224 shift + alt - space: ${pkgs.yabai}/bin/yabai -m window --toggle float
225
226 shift + alt - return: ${pkgs.yabai}/bin/yabai -m window --toggle sticky
227
228 alt - f : ${pkgs.yabai}/bin/yabai -m window --toggle zoom-fullscreen
229
230 shift + alt - f: ${pkgs.yabai}/bin/yabai -m window --toggle native-fullscreen
231
232 shift + alt - 1 : ${pkgs.yabai}/bin/yabai -m window --space 1
233 shift + alt - 2 : ${pkgs.yabai}/bin/yabai -m window --space 2
234 shift + alt - 3 : ${pkgs.yabai}/bin/yabai -m window --space 3
235 shift + alt - 4 : ${pkgs.yabai}/bin/yabai -m window --space 4
236 shift + alt - 5 : ${pkgs.yabai}/bin/yabai -m window --space 5
237 shift + alt - 6 : ${pkgs.yabai}/bin/yabai -m window --space 6
238 shift + alt - 7 : ${pkgs.yabai}/bin/yabai -m window --space 7
239 shift + alt - 8 : ${pkgs.yabai}/bin/yabai -m window --space 8
240 shift + alt - 9 : ${pkgs.yabai}/bin/yabai -m window --space 9
241 ''; 171 '';
242 }; 172 };
243 173
@@ -250,9 +180,6 @@ in {
250 }; 180 };
251 181
252 system.defaults = { 182 system.defaults = {
253 WindowManager = {
254 EnableTilingOptionAccelerator = false;
255 };
256 NSGlobalDomain = { 183 NSGlobalDomain = {
257 # 24 hour time 184 # 24 hour time
258 AppleICUForce24HourTime = true; 185 AppleICUForce24HourTime = true;
@@ -391,10 +318,6 @@ in {
391 "com.apple.Accessibility" = { 318 "com.apple.Accessibility" = {
392 ReduceMotionEnabled = 1; 319 ReduceMotionEnabled = 1;
393 }; 320 };
394
395 "com.apple.symbolichotkeys" = {
396 AppleSymbolicHotKeys = manualHotkeys // spaceHotkeys;
397 };
398 }; 321 };
399 universalaccess.reduceMotion = true; 322 universalaccess.reduceMotion = true;
400 }; 323 };
diff --git a/modules/darwin/yabai/default.nix b/modules/darwin/yabai/default.nix
new file mode 100644
index 0000000..8e64dd1
--- /dev/null
+++ b/modules/darwin/yabai/default.nix
@@ -0,0 +1,237 @@
1# modules/darwin/yabai/default.nix
2{ config, lib, pkgs, ... }:
3
4let
5 cfg = config.local.yabai;
6
7 # symbolic hotkey IDs 118..126 == "Switch to Desktop 1".."Switch to Desktop 9"
8 spaceKeycodes = [ 18 19 20 21 22 23 25 26 28 ];
9
10 mkSpaceHotkey = i: {
11 name = toString (117 + i);
12 value = {
13 enabled = true;
14 value = {
15 type = "standard";
16 parameters = [
17 (48 + i) # ASCII '1'..'9'
18 (builtins.elemAt spaceKeycodes (i - 1)) # virtual keycode
19 cfg.spaceHotkeys.modifierMask
20 ];
21 };
22 };
23 };
24
25 spaceHotkeys = builtins.listToAttrs
26 (map mkSpaceHotkey (lib.range 1 cfg.spaceHotkeys.count));
27
28 padArms = lib.concatStringsSep "\n" (lib.mapAttrsToList
29 (uuid: pad: " ${uuid}) pad=${toString pad} ;;")
30 cfg.displayTopPadding);
31
32 displayPaddingScript = pkgs.writeShellScript "yabai-display-padding" ''
33 set -eu
34 yabai="${cfg.package}/bin/yabai"
35
36 "$yabai" -m query --displays \
37 | ${lib.getExe pkgs.jq} -r '.[] | "\(.uuid) \(.spaces | map(tostring) | join(" "))"' \
38 | while read -r uuid spaces; do
39 case "$uuid" in
40${padArms}
41 *) pad=${toString cfg.defaultPadding} ;;
42 esac
43 for s in $spaces; do
44 for k in top_padding; do
45 "$yabai" -m config --space "$s" "$k" "$pad" || true
46 done
47 done
48 done
49 '';
50
51 yabaiBin = "${cfg.package}/bin/yabai";
52
53 directionBinds = lib.concatStringsSep "\n" (map (d: ''
54 alt - ${d.key} : ${yabaiBin} -m window --focus ${d.dir} || ${yabaiBin} -m display --focus ${d.dir}
55 shift + alt - ${d.key} : ${yabaiBin} -m window --swap ${d.dir} || ${yabaiBin} -m window --display ${d.dir}
56 '') [
57 { key = "up"; dir = "north"; }
58 { key = "down"; dir = "south"; }
59 { key = "right"; dir = "east"; }
60 { key = "left"; dir = "west"; }
61 ]);
62
63 spaceMoveBinds = lib.concatStringsSep "\n"
64 (map (i: "shift + alt - ${toString i} : ${yabaiBin} -m window --space ${toString i}")
65 (lib.range 1 cfg.spaceHotkeys.count));
66
67in {
68 options.local.yabai = {
69 enable = lib.mkEnableOption "yabai tiling window manager setup";
70
71 package = lib.mkOption {
72 type = lib.types.package;
73 default = pkgs.yabai;
74 description = "yabai package. Referenced by keybindings and the padding script.";
75 };
76
77 enableScriptingAddition = lib.mkOption {
78 type = lib.types.bool;
79 default = false;
80 description = ''
81 Only gates space creation/destruction and moving windows between
82 spaces. Window geometry and padding work without it.
83 '';
84 };
85
86 defaultPadding = lib.mkOption {
87 type = lib.types.int;
88 default = 10;
89 description = ''
90 Padding and window_gap for any display not listed in displayTopPadding.
91 Sized for Retina (2x) panels.
92 '';
93 };
94
95 defaultTopPadding = lib.mkOption {
96 type = lib.types.int;
97 default = 10;
98 description = ''
99 Padding for top edge of screen
100 '';
101 };
102
103 displayTopPadding = lib.mkOption {
104 type = lib.types.attrsOf lib.types.int;
105 default = { };
106 example = lib.literalExpression ''
107 { "37D8832A-2D66-02CA-B9F7-8F30A301B230" = 40; }
108 '';
109 description = ''
110 Display UUID -> padding value. The value is applied to all four
111 paddings and to window_gap for every space on that display.
112
113 Get UUIDs with:
114 yabai -m query --displays | jq -r '.[] | "\(.uuid) \(.frame)"'
115
116 Do not key off frame dimensions: yabai reports points, not pixels,
117 so a scaled 1080p panel will not report 1920x1080.
118 '';
119 };
120
121 manageKeybindings = lib.mkOption {
122 type = lib.types.bool;
123 default = true;
124 description = "Emit yabai skhd bindings into services.skhd.skhdConfig.";
125 };
126
127 spaceHotkeys = {
128 enable = lib.mkEnableOption "opt+<n> macOS space-switching hotkeys" // {
129 default = true;
130 };
131
132 count = lib.mkOption {
133 type = lib.types.ints.between 1 9;
134 default = 9;
135 description = "Number of spaces to bind. macOS exposes 9 symbolic hotkeys.";
136 };
137
138 modifierMask = lib.mkOption {
139 type = lib.types.int;
140 default = 524288; # option
141 description = "Carbon modifier mask. 524288 = option, 1048576 = command.";
142 };
143 };
144
145 extraSymbolicHotkeys = lib.mkOption {
146 type = lib.types.attrs;
147 default = { };
148 description = ''
149 Merged into com.apple.symbolichotkeys alongside the space hotkeys.
150 Put non-yabai symbolic hotkeys here rather than defining
151 CustomUserPreferences."com.apple.symbolichotkeys" in the host config --
152 CustomUserPreferences is types.attrs and merges shallowly, so a second
153 definition of that domain silently clobbers this one.
154 '';
155 };
156
157 extraSettings = lib.mkOption {
158 type = lib.types.attrs;
159 default = { };
160 description = "Extra keys merged into services.yabai.config.";
161 };
162
163 extraConfig = lib.mkOption {
164 type = lib.types.lines;
165 default = "";
166 description = "Extra shell appended to yabairc (rules, signals).";
167 };
168 };
169
170 config = lib.mkIf cfg.enable {
171 services.yabai = {
172 enable = true;
173 inherit (cfg) package enableScriptingAddition;
174
175 config = {
176 mouse_follows_focus = "on";
177 layout = "bsp";
178 window_placement = "second_child";
179 top_padding = toString cfg.defaultTopPadding;
180 bottom_padding = toString cfg.defaultPadding;
181 left_padding = toString cfg.defaultPadding;
182 right_padding = toString cfg.defaultPadding;
183 window_gap = toString cfg.defaultPadding;
184 mouse_modifier = "alt";
185 mouse_drop_action = "swap";
186 mouse_action1 = "move";
187 mouse_action2 = "resize";
188 focus_follows_mouse = "autofocus";
189 } // cfg.extraSettings;
190
191 extraConfig = ''
192 yabai -m rule --add app='System Settings' manage=off
193 yabai -m rule --add app="^Zen$" title="^Picture-in-Picture$" manage=off
194 ''
195 + lib.optionalString (cfg.displayTopPadding != { }) ''
196
197 # Per-display padding. space_created is required, not redundant:
198 # display_added fires when yabai sees the display, which can precede
199 # macOS finishing space creation on it, so the first pass may find
200 # zero or one space. display_removed is required because yabai
201 # reindexes spaces on disconnect and the overrides are keyed by index.
202 yabai -m signal --add event=display_added action="${displayPaddingScript}" label="per-display padding (added)"
203 yabai -m signal --add event=display_removed action="${displayPaddingScript}" label="per-display padding (removed)"
204 yabai -m signal --add event=space_created action="${displayPaddingScript}" label="per-display padding (space)"
205 ${displayPaddingScript}
206 ''
207 + cfg.extraConfig;
208 };
209
210 services.skhd = lib.mkIf cfg.manageKeybindings {
211 enable = true;
212 skhdConfig = ''
213 shift + alt - q : ${yabaiBin} -m window --close
214
215 ${directionBinds}
216
217 shift + alt - space : ${yabaiBin} -m window --toggle float
218 shift + alt - return : ${yabaiBin} -m window --toggle sticky
219 alt - f : ${yabaiBin} -m window --toggle zoom-fullscreen
220 shift + alt - f : ${yabaiBin} -m window --toggle native-fullscreen
221
222 ${spaceMoveBinds}
223 '';
224 };
225
226 # Prerequisites, not preferences: yabai requires per-display spaces, and
227 # macOS's own tiling fights it for window placement.
228 system.defaults = {
229 spaces."spans-displays" = false;
230 WindowManager.EnableTilingOptionAccelerator = false;
231
232 CustomUserPreferences."com.apple.symbolichotkeys".AppleSymbolicHotKeys =
233 cfg.extraSymbolicHotkeys
234 // (lib.optionalAttrs cfg.spaceHotkeys.enable spaceHotkeys);
235 };
236 };
237}