#!/bin/zsh export TERMINAL_PATH=/Applications/Alacritty.app/ export BROWSER_PATH=/Applications/Firefox.app/ export FINDER_PATH=/System/Library/CoreServices/Finder.app/ export COMMUNICATIONS_PATH=/Applications/Slack.app/ export MUSIC_PATH=/Applications/Spotify.app/ export NOTETAKING_PATH=/Applications/Obsidian.app/ export PROJECTTRACKING_PATH=/Applications/Asana.app/ export MAIL_PATH=/Applications/Notion\ Mail.app// export PROJECTDOCS_PATH=/Applications/Notion.app/ export VIDEOCALL_PATH=$HOME/Applications/Google\ Meet.app/ export ALT_COMMUNICATIONS_PATH=/Applications/Signal.app/ export ALT_NOTETAKING_PATH=/Applications/Obsidian.app/ focus() { local id id=$(yabai -m query --windows | jq -e "$1") || return 1 yabai -m window --focus "$id" } valid_selection=true case $1 in terminal) open $TERMINAL_PATH ;; browser) open $BROWSER_PATH ;; finder) focus 'map(select(.app=="Finder")) | first | .id' || open $FINDER_PATH ;; communications) focus 'first(.[] | select(.app == "Slack" and (.title | startswith("Huddle: ") | not))).id' || \ open $COMMUNICATIONS_PATH || open $ALT_COMMUNICATIONS_PATH ;; music) open $MUSIC_PATH ;; notetaking) open $ALT_NOTETAKING_PATH || open $NOTETAKING_PATH ;; videocall) focus 'first(.[] | select(.app == "Slack" and (.title | startswith("Huddle: ")))).id' || \ focus 'map(select(.app == "Google Meet")) | first | .id' || \ open $VIDEOCALL_PATH || open $ALT_COMMUNICATIONS_PATH ;; projecttracking) open $PROJECTTRACKING_PATH ;; projectdocs) open $PROJECTDOCS_PATH ;; mail) open $MAIL_PATH ;; *) valid_selection=false esac if [ "$valid_selection" = true ] ; then windows=$(yabai -m query --windows) spaces=$(yabai -m query --spaces) displays=$(yabai -m query --displays) active_display=$(jq 'map(select(."has-focus"==true)) | map(.display) | first' <<< $spaces) active_space=$(jq 'map(select(."has-focus"==true)) | map(.index) | first' <<< $spaces) other_space=$(jq 'map(select(."has-focus"==false and ."is-visible"==true)) | map(.index) | first' <<< $spaces) # If there are 3+ windows in the space, then make selected the largest window shared_windows=$(jq --argjson space "$active_space" 'map(select(.space==$space)) | map( { ("size"): (.frame.w * .frame.h), "id": .id, "focus": ."has-focus", "title": .title } ) | sort_by(.size)' <<< $windows) focused_window=$(jq 'map(select(.focus)) | first | .id' <<< $shared_windows) if [ $(jq 'length' <<< $shared_windows ) -gt 2 ]; then largest_window=$(jq 'last | .id' <<< $shared_windows) if [ "$focused_window" != "$largest_window" ]; then yabai -m window $focused_window --swap $largest_window fi fi yabai -m window $focused_window --focus fi