170 lines
6.7 KiB
Bash
170 lines
6.7 KiB
Bash
#!/usr/bin/env sh
|
|
|
|
#
|
|
# for this to work you must configure sudo such that
|
|
# it will be able to run the command without password
|
|
#
|
|
# see this wiki page for information:
|
|
# - https://github.com/koekeishiya/yabai/wiki/Installing-yabai-(latest-release)#configure-scripting-addition
|
|
#
|
|
# yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
|
|
# sudo yabai --load-sa
|
|
#
|
|
|
|
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
|
|
sudo yabai --load-sa
|
|
|
|
# global settings
|
|
yabai -m config \
|
|
mouse_follows_focus off \
|
|
focus_follows_mouse off \
|
|
window_origin_display default \
|
|
window_placement second_child \
|
|
window_zoom_persist on \
|
|
window_topmost off \
|
|
window_shadow on \
|
|
window_animation_frame_rate 120 \
|
|
window_opacity_duration 0.0 \
|
|
active_window_opacity 1.0 \
|
|
normal_window_opacity 0.90 \
|
|
window_opacity off \
|
|
insert_feedback_color 0xffd75f5f \
|
|
active_window_border_color 0xff775759 \
|
|
normal_window_border_color 0xff555555 \
|
|
window_border_width 4 \
|
|
window_border_radius 12 \
|
|
window_border_blur off \
|
|
window_border_hidpi on \
|
|
window_border off \
|
|
split_ratio 0.50 \
|
|
split_type auto \
|
|
auto_balance off \
|
|
window_gap 12 \
|
|
layout bsp \
|
|
mouse_modifier fn \
|
|
mouse_action1 move \
|
|
mouse_action2 resize \
|
|
mouse_drop_action swap
|
|
# window_animation_duration 0.0 \
|
|
# top_padding 12 \
|
|
# bottom_padding 12 \
|
|
# left_padding 12 \
|
|
# right_padding 12 \
|
|
|
|
#external_monitor=$(yabai -m query --displays | jq -r 'map(select(.external == 1)) | .[].index' | tr -d '\n')
|
|
|
|
# window_numbers=$(yabai -m query --displays \
|
|
# | jq -r 'map(select(.uuid == "37D8832A-2D66-02CA-B9F7-8F30A301B230")) | .[].spaces | .[]' \
|
|
# | xargs -I{} yabai -m query --windows --space {} \
|
|
# | jq -r 'map(select(."is-minimized" == false)) | length')
|
|
|
|
output=$(yabai -m query --displays \
|
|
| jq -r 'map(select(.uuid == "37D8832A-2D66-02CA-B9F7-8F30A301B230")) | .[].spaces | .[]' \
|
|
| xargs -I{} yabai -m query --windows --space {} \
|
|
| jq -r 'map(select(."is-minimized" == false))' \
|
|
| jq -c '[if length > 0 then {space: .[0].space, length: length} else empty end] | .[]')
|
|
|
|
echo "$output" | while read -r line; do
|
|
scale=40
|
|
space=$(echo "$line" | jq -r '.space')
|
|
length=$(echo "$line" | jq -r '.length')
|
|
|
|
p=$((length == 1 ? $scale : 20))
|
|
di="$space"
|
|
|
|
yabai -m config --space $di top_padding $p
|
|
yabai -m config --space $di bottom_padding $p
|
|
yabai -m config --space $di left_padding $p
|
|
yabai -m config --space $di right_padding $p
|
|
done
|
|
|
|
output=$(yabai -m query --displays \
|
|
| jq -r 'map(select(.uuid == "04D18502-16C9-45C6-8D4E-F6DAA26C5AB6")) | .[].spaces | .[]' \
|
|
| xargs -I{} yabai -m query --windows --space {} \
|
|
| jq -r 'map(select(."is-minimized" == false))' \
|
|
| jq -c '[if length > 0 then {space: .[0].space, length: length} else empty end] | .[]')
|
|
|
|
echo "$output" | while read -r line; do
|
|
scale=200
|
|
space=$(echo "$line" | jq -r '.space')
|
|
length=$(echo "$line" | jq -r '.length')
|
|
|
|
p=$((length == 1 ? $scale : 20))
|
|
di="$space"
|
|
|
|
yabai -m config --space $di top_padding $p
|
|
yabai -m config --space $di bottom_padding $p
|
|
yabai -m config --space $di left_padding $p
|
|
yabai -m config --space $di right_padding $p
|
|
done
|
|
|
|
# padding signals
|
|
#padding_refresh_command="p=\$((\$(yabai -m query --windows --space | jq 'map(select(.\"is-minimized\" == false)) | length') == 1 ? 200 : 20)) && \
|
|
# yabai -m config --space mouse top_padding \$p && \
|
|
# yabai -m config --space mouse bottom_padding \$p && \
|
|
# yabai -m config --space mouse left_padding \$p && \
|
|
# yabai -m config --space mouse right_padding \$p"
|
|
|
|
padding_refresh_command="~/bin/refresh-yabai-padding.sh"
|
|
|
|
yabai -m signal --add event=window_created action="$padding_refresh_command"
|
|
yabai -m signal --add event=window_destroyed action="$padding_refresh_command"
|
|
yabai -m signal --add event=application_launched action="$padding_refresh_command"
|
|
yabai -m signal --add event=application_terminated action="$padding_refresh_command"
|
|
|
|
# signals
|
|
yabai -m signal --add event=window_destroyed action="yabai -m query --windows --window &> /dev/null || yabai -m window --focus mouse"
|
|
yabai -m signal --add event=application_terminated action="yabai -m query --windows --window &> /dev/null || yabai -m window --focus mouse"
|
|
|
|
# if [[ $(yabai -m query --windows --space | jq "length") == 1 ]]; then
|
|
# # padding for one window
|
|
# yabai -m config top_padding 160
|
|
# yabai -m config bottom_padding 160
|
|
# yabai -m config left_padding 160
|
|
# yabai -m config right_padding 160
|
|
# else
|
|
# # padding for two or more windows
|
|
# yabai -m config top_padding 12
|
|
# yabai -m config bottom_padding 12
|
|
# yabai -m config left_padding 12
|
|
# yabai -m config right_padding 12
|
|
# fi
|
|
#
|
|
# yabai -m signal --add \
|
|
# event=window_created \
|
|
# action="[[ $(yabai -m query --windows --space | jq 'length') -gt 1 ]] \
|
|
# && yabai -m config top_padding 160 \
|
|
# && yabai -m config bottom_padding 160 \
|
|
# && yabai -m config left_padding 160 \
|
|
# && yabai -m config right_padding 160"
|
|
# yabai -m signal --add \
|
|
# event=window_destroyed \
|
|
# action="[[ $(yabai -m query --windows --space | jq 'length') == 1 ]] \
|
|
# && yabai -m config top_padding 10 \
|
|
# && yabai -m config bottom_padding 10 \
|
|
# && yabai -m config left_padding 10 \
|
|
# && yabai -m config right_padding 10"
|
|
|
|
|
|
yabai -m rule --add app="^Google Chrome|Firefox|Arc$" space=2
|
|
# Text editors
|
|
yabai -m rule --add app="^(Code)$" space=1
|
|
# Jetbrains apps
|
|
apps="^(IntelliJ IDEA|WebStorm|RubyMine|PyCharm|DataGrip)$"
|
|
yabai -m rule --add app="${apps}" space=1 manage=off
|
|
|
|
# Floating
|
|
yabai -m rule --add app="^(1Password|AWS VPN Client)" manage=off
|
|
|
|
# Terminal
|
|
yabai -m rule --add app="^(Alacritty)$" space=1
|
|
# Mailspring
|
|
yabai -m rule --add app="^(Mailspring|Obsidian|Linear|Calendar)$" space=3
|
|
# Music
|
|
yabai -m rule --add app="^(Spotify)$" space=5
|
|
# Social
|
|
yabai -m rule --add app="^(Slack|WhatsApp|Microsoft Teams|Zoom)$" space=6
|
|
|
|
echo "yabai configuration loaded.."
|
|
|