-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
executable_dot_yabairc
253 lines (215 loc) · 13 KB
/
executable_dot_yabairc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#!/usr/bin/env sh
# https://github.com/koekeishiya/yabai/wiki/Installing-yabai-(latest-release)
# the scripting-addition must be loaded manually if
# you are running yabai on macOS Big Sur. Uncomment
# the following line to have the injection performed
# when the config is executed during startup.
#
# for this to work you must configure sudo such that
# it will be able to run the command without password
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
sudo yabai --load-sa
move_to_space() {
id=$(yabai -m query --windows | jq ".[] | select(.app | contains(\"$1\")) | .id")
if [ -n "$id" ]; then
yabai -m window "$id" --space "$2"
fi
}
# global settings
yabai -m config mouse_follows_focus on
yabai -m config focus_follows_mouse off # autofocus|autoraise|off
yabai -m config window_placement first_child
yabai -m config window_topmost off # Make floating windows stay on top
yabai -m config window_opacity off # turning it on reduces overall performance?
yabai -m config window_opacity_duration 0.0
yabai -m config window_shadow off
yabai -m config insert_feedback_color 0xaad75f5f
yabai -m config active_window_opacity 1.0
yabai -m config normal_window_opacity 0.85
yabai -m config split_ratio 0.618
yabai -m config auto_balance off
yabai -m config mouse_modifier fn
yabai -m config mouse_action1 move
yabai -m config mouse_action2 resize
yabai -m config mouse_drop_action stack
yabai -m config external_bar all:42:0
yabai -m config window_origin_display default # default|focused|cursor
# yabai -m config window_animation_duration 0.0
yabai -m config window_zoom_persist off
# borders are removed since 6.0.0, use JankyBorders instead https://github.com/FelixKratz/JankyBorders
# yabai -m config window_border on
# yabai -m config window_border_width 2
# yabai -m config active_window_border_color 0xA006B6D4
# yabai -m config normal_window_border_color 0x5006B600
# yabai -m config window_border_hidpi on
# yabai -m config window_border_blur off
borders active_color=0xC0FF8552 inactive_color=0x3006B6D4 width=10.0 hidpi=on &
# general space settings
yabai -m config layout bsp
yabai -m config top_padding 8
yabai -m config bottom_padding 16
yabai -m config left_padding 16
yabai -m config right_padding 16
yabai -m config window_gap 20
# specific space settings
# yabai -m space 1 --layout stack
# signals
# focus mouse hovered window when a window is closed, minimized or terminated
yabai -m signal --add event=window_destroyed action="yabai -m window mouse --focus"
yabai -m signal --add event=window_minimized action="yabai -m window mouse --focus"
yabai -m signal --add event=application_terminated action="yabai -m window mouse --focus"
# yabai -m signal --add event=space_changed action="sleep 0.2 ; yabai -m query --windows --window &> /dev/null || yabai -m window --focus mouse"
# yabai -m signal --add event=window_created action="~/.yabai_axunknown_float"
# Sketchybar signals
yabai -m signal --add event=window_created action="sketchybar -m --trigger window_change &> /dev/null"
yabai -m signal --add event=window_destroyed action="sketchybar -m --trigger window_change &> /dev/null"
# sh ~/.yabai_rules
yabai -m rule --add app="coreautha" manage=off
yabai -m rule --add label="1Password" app="^1Password$" manage=off
yabai -m rule --add label="1Password 7" app="^1Password 7$" manage=off
# yabai -m rule --add label="Browserosaurus" app="^Browserosaurus$" manage=off
yabai -m rule --add label="Arc PiP" app="^Arc$" title="^$" manage=off
yabai -m rule --add label="Little Arc Launcher" app="^Arc$" title="^Space 1$" manage=off
yabai -m rule --add label="Activity Monitor" app="^Activity Monitor$" manage=off
yabai -m rule --add label="Alfred Preferences" app="^Alfred Preferences$" manage=off
yabai -m rule --add label="App Store" app="^App Store$" manage=off
yabai -m rule --add label="Boom 3D" app="^Boom 3D$" manage=off
yabai -m rule --add label="Calculator" app="^Calculator$" manage=off
yabai -m rule --add label="Chromium" app="^Chromium$" manage=off mouse_follows_focus=off
yabai -m rule --add label="CleanMyMac X" app="^CleanMyMac X$" manage=off
yabai -m rule --add label="Dash" app="Dash" manage=off
# yabai -m rule --add label="Dictionary" app="^Dictionary$" manage=off
# yabai -m rule --add label="Fantastical" app="Fantastical" manage=off
yabai -m rule --add label="Fig Autocomplete" app="^Fig$" title="^Fig Autocomplete$" manage=off
# yabai -m rule --add label="Finder Main" app="^Finder$" manage=off
yabai -m rule --add label="Finder" app="^Finder$" title="(Co(py|nnect)|Move|Info|Pref)" manage=off
# yabai -m rule --add label="Firefox" app="Firefox" manage=off
yabai -m rule --add label="Gather" app="^Gather$" manage=off
yabai -m rule --add label="KeyCastr" app="KeyCastr" manage=off
yabai -m rule --add label="Kit" app="Kit" title="^Script Kit Widget$" manage=off
yabai -m rule --add label="Steam" app="Steam" manage=off
yabai -m rule --add label="GoPro Webcam" app="GoPro Webcam" manage=off
yabai -m rule --add label="Loom" app="Loom" manage=off
yabai -m rule --add label="Nebula" app="Nebula" manage=off
yabai -m rule --add label="Notion" app="Notion" manage=off
yabai -m rule --add label="NotionQuickAdd" app="NotionQuickAdd" manage=off
yabai -m rule --add label="Preview" app="Preview" manage=off
# yabai -m rule --add label="Safari" app="^Safari$" title="^(General|(Tab|Password|Website|Extension)s|AutoFill|Se(arch|curity)|Privacy|Advance)$" manage=off
yabai -m rule --add label="Session" app="^Session$" manage=off border=off
yabai -m rule --add label="Slidepad" app="^Slidepad$" manage=off border=off
yabai -m rule --add label="Stickies" app="Stickies" manage=off border=off
yabai -m rule --add label="System Preferences" app="^System Preferences$" manage=off
# yabai -m rule --add label="The Unarchiver" app="^The Unarchiver$" manage=off
# yabai -m rule --add label="Time Out" app="Time Out" manage=off
# yabai -m rule --add label="Transmission" app="^Transmission$" manage=off
yabai -m rule --add label="VirtualBox" app="^VirtualBox$" manage=off
yabai -m rule --add label="Electron" app="^Electron$" manage=off
yabai -m rule --add label="OpenIn" app="^OpenIn$" mouse_follows_focus=off
yabai -m rule --add label="Hammerspoon" app="^Hammerspoon$" manage=off
# Scratchpad
yabai -m rule --add label="Obsidian" app="^Obsidian$" scratchpad="obsidian" grid=18:32:5:3:22:12
# Ignore everything without title
yabai -m rule --add --one-shot label="untitled" app=".+" title="^$" manage=off
DISPLAY_COUNT=$(yabai -m query --displays | jq length)
SPACE_COUNT=$(yabai -m query --spaces --display 1 | jq length)
SPACE_2ND_DSP=$(yabai -m query --displays | jq '.[] | select(.index == 2) | .spaces[0]')
# Create more spaces if insufficient
if [ "$SPACE_COUNT" -lt 5 ]; then
for _i in $(seq 1 $((5 - SPACE_COUNT))); do
yabai -m space --create
done
fi
# Label spaces
yabai -m space 1 --label "Term"
yabai -m space 2 --label "Editor"
yabai -m space 3 --label "Browse"
yabai -m space 4 --label "Misc"
if [ "$DISPLAY_COUNT" = "1" ]; then
yabai -m space 5 --label "OffScreen"
else
yabai -m space "$SPACE_2ND_DSP" --label "OffScreen"
fi
# Set normal layer for all apps as from v6.0.0 force all tiled windows to be "below" layer (why???)
# v7 laeyr changed to sub-layer (nande???)
yabai -m rule --add app=".*" label="Normal Layer" sub-layer=normal
yabai -m signal --add event=application_front_switched action="yabai -m window --layer normal"
yabai -m signal --add event=window_moved action="yabai -m window --sub-layer normal"
yabai -m signal --add event=window_focused action="yabai -m window --sub-layer normal"
# yabai -m signal --add event=window_resized action="yabai -m window --sub-layer normal"
# Move all windows to Space 4 (Misc) by default
yabai -m space Misc --layout stack
yabai -m rule --add --one-shot app=".*" label="All Apps" space=4
# Spaces
## Space 1: Terminals
# yabai -m rule --add app="kitty" title=".+" space=Term
move_to_space "kitty" Term
# yabai -m rule --add app="iTerm2" title=".+" space=Term
move_to_space "iTerm2" Term
## Space 2: Editor
# yabai -m rule --add app="Code" title=".+" space=Editor
move_to_space "Code" Editor
## Space 3: Browsing / Notes
# yabai -m rule --add app="Arc" title=".+" space=Browse
move_to_space "Arc" Browse
# yabai -m rule --add app="Chrome" title=".+" space=Browse
move_to_space "Chrome" Browse
# yabai -m rule --add app="Microsoft Edge" title=".+" space=Browse
move_to_space Microsoft "Edge" Browse
# yabai -m rule --add app="Opera GX" title=".+" space=Browse
move_to_space Opera "GX" Browse
## Space 4: Misc (Stacked)
yabai -m space Misc --layout stack
yabai -m space Misc --padding abs:32:32:32:32
## Space 5 / Display 2 Space 1 : Off Screen
yabai -m space OffScreen --layout stack
# yabai -m rule --add app="1Password" title=".+" space=OffScreen
move_to_space "1Password" OffScreen
# yabai -m rule --add app="Discord" title=".+" space=OffScreen
move_to_space "Discord" OffScreen
# yabai -m rule --add app="Fantastical" title=".+" space=OffScreen
move_to_space "Fantastical" OffScreen
# yabai -m rule --add app="OBS" title=".+" space=OffScreen
move_to_space "OBS" OffScreen
# yabai -m rule --add app="Slack" title=".+" space=OffScreen
move_to_space "Slack" OffScreen
# yabai -m rule --add app="Sonixd" title=".+" space=OffScreen
move_to_space "Sonixd" OffScreen
# yabai -m rule --add app="Spark" title=".+" space=OffScreen
move_to_space "Spark" OffScreen
# yabai -m rule --add app="Spotify" title=".+" space=OffScreen
move_to_space "Spotify" OffScreen
# yabai -m rule --add app="Streamlabs" title=".+" space=OffScreen
move_to_space "Streamlabs" OffScreen
# Simple-bar signals
# # Refresh spaces widget on space change
# yabai -m signal --add event=space_changed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-spaces-jsx\"'"
# # Refresh spaces widget on display focus change
# yabai -m signal --add event=display_changed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-spaces-jsx\"'"
# # Refresh process widget on space change
# yabai -m signal --add event=space_changed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-process-jsx\"'"
# # Refresh process widget on when focused application changes
# yabai -m signal --add event=window_focused action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-process-jsx\"'"
# # Refresh spaces widget on when focused application changes
# yabai -m signal --add event=window_focused action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-spaces-jsx\"'"
# # Refresh process widget on when focused application changes
# yabai -m signal --add event=application_front_switched action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-process-jsx\"'"
# # Refresh spaces widget on when focused application changes
# yabai -m signal --add event=application_front_switched action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-spaces-jsx\"'"
# # Refresh process widget on when an application window is closed
# yabai -m signal --add event=window_destroyed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-process-jsx\"'"
# # Refresh spaces widget on when an application window is closed
# yabai -m signal --add event=window_destroyed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-spaces-jsx\"'"
# # Refresh process widget when current window title changes
# yabai -m signal --add event=window_title_changed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-process-jsx\"'"
# yabai -m signal --add event=window_created label="focus-floating-windows" action='sh ~/.yabai.focus-floating-windows.sh $YABAI_WINDOW_ID'
# yabai -m signal --add event=window_created label="window-created-debug" action='echo "[window_created] window id: $YABAI_WINDOW_ID" >> /tmp/yabai.txt'
# yabai -m signal --add event=window_focused label="window-focused-debug" action='echo "[window_focused] window id: $YABAI_WINDOW_ID" >> /tmp/yabai.txt'
# Re-focus
# yabai -m signal --add event=window_focused label="move-window-focused-to-mouse" action='yabai -m window --focus $YABAI_WINDOW_ID ; yabai -m window $YABAI_WINDOW_ID --toggle topmost'
# yabai -m signal --add event=window_focused label="move-window-focused-to-mouse" action='echo "ididid"$(yabai -m query --windows --window | jq .id) >> /tmp/yabai.txt'
# yabai -m signal --add event=window_focused label="move-window-focused-to-mouse" action='yabai -m window $YABAI_WINDOW_ID --toggle topmost ; echo "topmosting $YABAI_WINDOW_ID" >> /tmp/yabai.txt'
yabai -m signal --add event=window_created label="focus-created-window" action='sh ~/.yabai.focus-standard-window.sh $YABAI_WINDOW_ID'
# Unzoom all windows when change focus
yabai -m signal --add event=window_focused label="unzoom-windows" action='yabai -m query --windows | jq -r ".[] | select(.\"has-fullscreen-zoom\" == true) | .id" | xargs -I {} yabai -m window {} --toggle zoom-fullscreen'
yabai -m space --focus 1
echo "yabai configuration loaded.."