From d06784958d73159b5e4abafe5114804662114ed7 Mon Sep 17 00:00:00 2001 From: Ryan Schanzenbacher Date: Thu, 9 Jul 2026 22:15:53 -0400 Subject: move ubersicht modules in tree --- .../simple-bar-source/lib/scripts/init-yabai.sh | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100755 users/ryan/modules/simple-bar/simple-bar-source/lib/scripts/init-yabai.sh (limited to 'users/ryan/modules/simple-bar/simple-bar-source/lib/scripts/init-yabai.sh') diff --git a/users/ryan/modules/simple-bar/simple-bar-source/lib/scripts/init-yabai.sh b/users/ryan/modules/simple-bar/simple-bar-source/lib/scripts/init-yabai.sh new file mode 100755 index 0000000..5dbbfe3 --- /dev/null +++ b/users/ryan/modules/simple-bar/simple-bar-source/lib/scripts/init-yabai.sh @@ -0,0 +1,102 @@ +# Assign input arguments to variables +yabai_path=$1 +display_skhd_mode=$2 +disable_signals=$3 +enable_window_title_changed_signal=$4 + +# Check if yabai is running +pgrep -x yabai > /dev/null + +# If yabai is not running, output an error message and exit +if [ $? -eq 1 ]; then + echo "yabaiError" + exit 0 +fi + +# Get the System Integrity Protection (SIP) status +SIP=$(csrutil status) +# Get the current window shadow configuration from yabai +shadow_enabled=$($yabai_path -m config window_shadow) + +# Query yabai for spaces, windows, and displays information +spaces=$($yabai_path -m query --spaces) +windows=$($yabai_path -m query --windows) +displays=$($yabai_path -m query --displays) + +# Retry querying spaces if the initial query was empty +if [ -z "$spaces" ]; then + spaces=$($yabai_path -m query --spaces) +fi + +# Retry querying windows if the initial query was empty and remove backslashes +if [ -z "$windows" ]; then + windows=$($yabai_path -m query --windows | sed 's/\\.//g;') +fi + +# Retry querying displays if the initial query was empty +if [ -z "$displays" ]; then + displays=$($yabai_path -m query --displays) +fi + +# Add or remove signals based on the disable_signals flag +if [ $disable_signals = "false" ]; then + # Add signals to refresh the simple-bar widget on various yabai events + $yabai_path -m signal --add event=window_focused action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar when focused application changes" + $yabai_path -m signal --add event=window_minimized action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar when a window is minimized" + $yabai_path -m signal --add event=window_resized action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar when a window is resized" + $yabai_path -m signal --add event=window_destroyed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar when an application window is closed" + $yabai_path -m signal --add event=space_changed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar on space change" + $yabai_path -m signal --add event=display_changed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar on display focus change" + + # Add signal for window title change if enabled + if [ $enable_window_title_changed_signal = "true" ]; then + $yabai_path -m signal --add event=window_title_changed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar when current window title changes" + fi + + # Add signals for space creation and destruction if yabai version is 6 or higher + yabai_major_version=$($yabai_path -v | awk -F '.' '{print $1}' | sed 's/yabai-v//') + if [ $yabai_major_version -ge 6 ]; then + $yabai_path -m signal --add event=space_destroyed action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar on space removal" + $yabai_path -m signal --add event=space_created action="osascript -e 'tell application id \"tracesOf.Uebersicht\" to refresh widget id \"simple-bar-index-jsx\"'" label="Refresh simple-bar on space creation" + fi +else + # Remove signals if disable_signals is true + $yabai_path -m signal --remove label="Refresh simple-bar when focused application changes" >/dev/null 2>&1 || true + $yabai_path -m signal --remove label="Refresh simple-bar when a window is minimized" >/dev/null 2>&1 || true + $yabai_path -m signal --remove label="Refresh simple-bar when a window is resized" >/dev/null 2>&1 || true + $yabai_path -m signal --remove label="Refresh simple-bar when an application window is closed" >/dev/null 2>&1 || true + $yabai_path -m signal --remove label="Refresh simple-bar on space change" >/dev/null 2>&1 || true + $yabai_path -m signal --remove label="Refresh simple-bar on display focus change" >/dev/null 2>&1 || true + $yabai_path -m signal --remove label="Refresh simple-bar when current window title changes" >/dev/null 2>&1 || true + $yabai_path -m signal --remove label="Refresh simple-bar on space removal" >/dev/null 2>&1 || true + $yabai_path -m signal --remove label="Refresh simple-bar on space creation" >/dev/null 2>&1 || true +fi + +# Determine skhd mode based on the display_skhd_mode flag and disable_signals flag +if [ $display_skhd_mode = "true" ]; then + SCRIPT_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + if [ $disable_signals = "false" ]; then + skhd_mode=$(cat "$("${SCRIPT_DIR}"/yabai-set-mode.sh --query)") + else + skhd_mode=$(cat "$("${SCRIPT_DIR}"/yabai-set-mode-server.sh --query)") + fi +else + skhd_mode="{}" +fi + +# Output the collected information as a JSON object +echo $(cat <<-EOF + { + "spaces": $spaces, + "windows": $windows, + "displays": $displays, + "SIP": "$SIP", + "shadow": "$shadow_enabled", + "skhdMode": $skhd_mode + } +EOF +) | \ + # Remove invisible U+200E Left-To-Right Mark character + sed "s/\xe2\x80\x8e//g" | \ + # Remove newlines from output (handling Google Chrome JSON parse error caused by "search in page") + tr -d '\n' -- cgit v1.3