Dotfiles/desktopenvs/hyprlua/scripts/unified-rotate.sh

59 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# Usage: rotate.sh [cw|ccw]
direction="$1"
if [[ "$direction" != "cw" && "$direction" != "ccw" && "$direction" != "0" && "$direction" != "1" && "$direction" != "2" && "$direction" != "3" ]]; then
echo "Usage: $0 [cw|ccw] OR $0 [0|1|2|3]"
exit 1
fi
monitors_json=$(hyprctl monitors -j)
curmon=$(echo "$monitors_json" | jq -r '.[] | select(.focused) | .name')
currot=$(echo "$monitors_json" | jq -r '.[] | select(.focused) | .transform')
curscale=$(echo "$monitors_json" | jq -r '.[] | select(.focused) | .scale')
curwidth=$(echo "$monitors_json" | jq -r '.[] | select(.focused) | .width')
curheight=$(echo "$monitors_json" | jq -r '.[] | select(.focused) | .height')
currefresh=$(echo "$monitors_json" | jq -r '.[] | select(.focused) | .refreshRate | round')
curx=$(echo "$monitors_json" | jq -r '.[] | select(.focused) | .x')
cury=$(echo "$monitors_json" | jq -r '.[] | select(.focused) | .y')
curmode="${curwidth}x${curheight}@${currefresh}"
# Calculate new rotation
if [[ "$direction" == "cw" ]]; then
if [[ "$currot" == "3" ]]; then
newrot="0"
else
newrot=$((currot + 1))
fi
elif [[ "$direction" == "ccw" ]]; then
if [[ "$currot" == "0" ]]; then
newrot="3"
else
newrot=$((currot - 1))
fi
else
newrot="$direction"
fi
echo "Rotating monitor '$curmon' from $currot to $newrot ($direction)"
# Apply new rotation while preserving current mode and scale
hyprctl eval "hl.monitor({output='$curmon', mode='$curmode', position='${curx}x${cury}', scale=$curscale, transform=$newrot})"
# Detect touchscreen device name
touchdev=$(hyprctl devices -j | jq -r '.touch[0].name // empty')
if [[ -n "$touchdev" ]]; then
echo "Applying same rotation to touchscreen: $touchdev"
hyprctl eval "hl.device({name='$touchdev', transform=$newrot})"
else
echo "No touchscreen device detected."
fi
# Reload Eww to adjust bar size
eww reload