| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #!/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 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/
- valid_selection=true
- case $1 in
- terminal)
- open $TERMINAL_PATH ;;
- browser)
- open $BROWSER_PATH ;;
- finder)
- yabai -m window --focus $(yabai -m query --windows | jq 'map(select(.app=="Finder")) | first | .id') || open $FINDER_PATH ;;
- communications)
- open $COMMUNICATIONS_PATH || open $ALT_COMMUNICATIONS_PATH ;;
- music)
- open $MUSIC_PATH ;;
- notetaking)
- open $ALT_NOTETAKING_PATH || open $NOTETAKING_PATH ;;
- videocall)
- yabai -m window --focus $(yabai -m query --windows | jq 'map(select(.app == "Google Meet")) | first | .id') || \
- open $VIDEOCALL_PATH || open $ALT_COMMUNICATIONS_PATH ;;
- projecttracking)
- open $PROJECTTRACKING_PATH ;;
- timetracking)
- /bin/zsh $DOTFILES_DIR/.scripts/traggo.zsh ;;
- projectdocs)
- open $PROJECTDOCS_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
|