0
0

open_application.zsh 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/bin/zsh
  2. TERMINAL_PATH=/Applications/Alacritty.app/
  3. BROWSER_PATH=/Applications/Firefox.app/
  4. FINDER_PATH=/System/Library/CoreServices/Finder.app/
  5. COMMUNICATIONS_PATH=/Applications/Slack.app/
  6. MUSIC_PATH=/Applications/Spotify.app/
  7. NOTETAKING_PATH=/Applications/Obsidian.app/
  8. PROJECTTRACKING_PATH=/Applications/Asana.app/
  9. PROJECTDOCS_PATH=/Applications/Notion.app/
  10. VIDEOCALL_PATH=$HOME/Applications/Google\ Meet.app/
  11. ALT_COMMUNICATIONS_PATH=/Applications/Signal.app/
  12. ALT_NOTETAKING_PATH=/Applications/Obsidian.app/
  13. case $1 in
  14. terminal)
  15. open $TERMINAL_PATH ;;
  16. browser)
  17. open $BROWSER_PATH ;;
  18. finder)
  19. yabai -m window --focus $(yabai -m query --windows | jq 'map(select(.app=="Finder")) | first | .id') || open $FINDER_PATH ;;
  20. communications)
  21. open $ALT_COMMUNICATIONS_PATH || open $COMMUNICATIONS_PATH ;;
  22. music)
  23. open $MUSIC_PATH ;;
  24. notetaking)
  25. open $ALT_NOTETAKING_PATH || open $NOTETAKING_PATH ;;
  26. videocall)
  27. yabai -m window --focus $(yabai -m query --windows | jq 'map(select(.app == "Google Meet")) | first | .id') || \
  28. open $VIDEOCALL_PATH || open $ALT_COMMUNICATIONS_PATH ;;
  29. projecttracking)
  30. open $PROJECTTRACKING_PATH ;;
  31. projectdocs)
  32. open $PROJECTDOCS_PATH ;;
  33. esac
  34. # If there are 3+ windows in the space, then make selected the largest window
  35. windows=$(yabai -m query --windows)
  36. active_space=$(jq 'map(select(."has-focus"==true)) | map(.space) | first' <<< $windows)
  37. 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)
  38. if [ $(jq 'length' <<< $shared_windows ) -gt 2 ]; then
  39. focused_window=$(jq 'map(select(.focus)) | first | .id' <<< $shared_windows)
  40. largest_window=$(jq 'last | .id' <<< $shared_windows)
  41. if [ "$focused_window" != "$largest_window" ]; then
  42. yabai -m window $focused_window --swap $largest_window
  43. fi
  44. fi