#!/bin/bash BASE=$1 ACTION=$2 case $BASE in 1) GROUP="1 10 11 12" ;; 2) GROUP="2 20 21 22" ;; 3) GROUP="3 30 31 32" ;; 4) GROUP="4 40 41 42" ;; *) exit 1 ;; esac CURRENT=$(hyprctl activeworkspace -j 2>/dev/null | jq '.id') NEXT="" FOUND=0 for WS in $GROUP; do if [ "$FOUND" = "1" ]; then NEXT=$WS break fi [ "$WS" = "$CURRENT" ] && FOUND=1 done if [ -z "$NEXT" ] && [ "$FOUND" = "1" ]; then NEXT=$(echo "$GROUP" | awk '{print $1}') fi if [ -z "$NEXT" ]; then for WS in $GROUP; do [ "$WS" = "$BASE" ] && continue for MWS in $(hyprctl monitors -j 2>/dev/null | jq '.[].activeWorkspace.id'); do if [ "$WS" = "$MWS" ]; then NEXT=$WS break 2 fi done done [ -z "$NEXT" ] && NEXT=$BASE fi case $ACTION in focus) hyprctl dispatch "hl.dsp.focus({ workspace = \"$NEXT\" })" ;; move) hyprctl dispatch "hl.dsp.window.move({ workspace = \"$NEXT\", follow = false })" ;; move_follow) hyprctl dispatch "hl.dsp.window.move({ workspace = \"$NEXT\", follow = true })" ;; esac