Nix configurations for my personal machines (Linux & macOS)
1{
2 delib,
3 lib,
4 ...
5}:
6delib.module {
7 name = "darwin.wm";
8
9 options = delib.singleEnableOption true;
10
11 darwin.ifEnabled = {
12 services.yabai = {
13 enable = true;
14 config = let
15 gap = 10;
16 gapKeys = [
17 "window_gap"
18 "top_padding"
19 "bottom_padding"
20 "left_padding"
21 "right_padding"
22 ];
23
24 gaps = builtins.listToAttrs (
25 builtins.map (k: lib.attrsets.nameValuePair k gap) gapKeys
26 );
27 in
28 {
29 layout = "bsp";
30 window_placement = "second_child";
31 }
32 // gaps;
33 extraConfig = ''
34 yabai -m rule --add app="Bitwarden" manage=off
35 yabai -m rule --add app="Discord" manage=off
36 yabai -m rule --add app="^Finder$" manage=off
37 yabai -m rule --add app="Keka" manage=off
38 yabai -m rule --add app="^System Information$" manage=off
39 yabai -m rule --add app="^System Preferences$" manage=off
40 yabai -m rule --add app="^System Settings$" manage=off
41 yabai -m rule --add title="Preferences$" manage=off
42 yabai -m rule --add title="^Archive Utility$" manage=off
43 yabai -m rule --add title="Settings$" manage=off
44 yabai -m rule --add title="Karabiner" manage=off
45 yabai -m rule --add title="^Weather$" manage=off
46 yabai -m rule --add title="Yubico Authenticator" manage=off
47 yabai -m rule --add app="Rewind" manage=off
48 yabai -m rule --add app="eqMac" manage=off
49 yabai -m rule --add app="^Arc$" manage=off
50 yabai -m rule --add app="OBS" manage=off
51 yabai -m rule --add app="Raycast" manage=off
52 '';
53 };
54
55 services.skhd = {
56 enable = true;
57 skhdConfig = ''
58 # Move/swap windows
59 meh - w : yabai -m window --swap north
60 meh - a : yabai -m window --swap west
61 meh - r : yabai -m window --swap south
62 meh - s : yabai -m window --swap east
63
64 hyper - w : yabai -m window --warp north
65 hyper - a : yabai -m window --warp west
66 hyper - r : yabai -m window --warp south
67 hyper - s : yabai -m window --warp east
68
69 # Focus windows
70 ralt + rcmd - w : yabai -m window --focus north
71 ralt + rcmd - a : yabai -m window --focus west
72 ralt + rcmd - r : yabai -m window --focus south
73 ralt + rcmd - s : yabai -m window --focus east
74
75 # Increase window size
76 meh - n : yabai -m window --resize left:-100:0
77 meh - e : yabai -m window --resize bottom:0:100
78 meh - i : yabai -m window --resize top:0:-100
79 meh - o : yabai -m window --resize right:100:0
80
81 # Decrease window size
82 hyper - n : yabai -m window --resize right:-100:0
83 hyper - e : yabai -m window --resize top:0:100
84 hyper - i : yabai -m window --resize bottom:0:-100
85 hyper - o : yabai -m window --resize left:100:0
86
87 # Expand floating window to fill screen
88 # (full stop)
89 meh - 0x2F : yabai -m window --grid 1:1:0:0:1:1
90
91 meh - p : yabai -m window --toggle float; \
92 yabai -m window --grid 4:4:1:1:2:2
93
94 # Rebalance grid
95 # (backtick)
96 hyper - 0x32 : yabai -m space --balance
97 '';
98 };
99 };
100}