#!/bin/zsh ##################################################################### USAGE="$0 APPLICATION CLIENT_CLASS" function ERROR() { local ERROR_CODE=$1 local MESSAGE="$2" echo -e "$MESSAGE\n\nUSAGE : $USAGE\n" >&2 [ $MESSAGE ] && notify-send "Application Launcher" "$MESSAGE" exit $ERROR_CODE } ##################################################################### APPLICATION="$1" which $APPLICATION >/dev/null 2>&1 \ || ERROR 2 "Application '$APPLICATION' not found" CLIENT_CLASS="${@:2}" [ ! $CLIENT_CLASS ] && CLIENT_CLASS="$APPLICATION" ALWAYS_LAUNCH=0 RESIZE=1 XFFSET=0.0 YFFSET=0.0 FACTOR=0.8 xrandr | grep primary | awk '{print $4;}' | grep -q '^3840' \ && FACTOR=0.5 case $APPLICATION in pavucontrol ) FACTOR=0.4 YFFSET=200 ;; discord ) ALWAYS_LAUNCH=1 ;; android-messages-desktop ) ALWAYS_LAUNCH=1 ;; scrcpy ) RESIZE=0 ;; esac LAUNCH_APP=0 xdotool search --class "$CLIENT_CLASS" || LAUNCH_APP=1 [[ $ALWAYS_LAUNCH -eq 1 ]] && LAUNCH_APP=1 [[ $LAUNCH_APP -eq 1 ]] && { i3-msg "exec --no-startup-id $APPLICATION;" sleep .5 } WINDOW_SIZE=$(\ xrandr \ | grep 'connected primary' \ | sed 's/.*connected primary \([^x]*\)x\([^+]*\).*/\1 \2/' \ | awk -v f=$FACTOR -v x=$XFFSET -v y=$YFFSET \ '{print int($1*f+x)," ",int($2*f+y);}'\ ) i3-msg "[class=$CLIENT_CLASS] move scratchpad" [[ $RESIZE -eq 1 ]] && i3-msg "[class=$CLIENT_CLASS] resize set $WINDOW_SIZE" i3-msg "[class=$CLIENT_CLASS] scratchpad show" i3-msg "[class=$CLIENT_CLASS] move position center"