{ pkgs }: pkgs.writeShellScriptBin "moveonscreen" '' center_window=false if [[ $1 == "--center" ]]; then center_window=true fi cursor_pos=$(hyprctl cursorpos | sed 's/,//') cursor_x=$(echo "$cursor_pos" | awk '{print $1}') cursor_y=$(echo "$cursor_pos" | awk '{print $2}') window_info=$(hyprctl activewindow -j) window_width=$(echo "$window_info" | jq ".size[0]") window_height=$(echo "$window_info" | jq ".size[1]") if [ "$center_window" = true ]; then cursor_x=$((cursor_x - window_width / 2)) cursor_y=$((cursor_y - window_height / 2)) if (( cursor_x < 10 )); then cursor_x=10 fi if (( cursor_y < 54 )); then cursor_y=54 fi fi monitors=$(hyprctl monitors -j) monitor_x_min=0 monitor_x_max=0 monitor_y_min=0 monitor_y_max=0 focused_monitor=-1 for ((i = 0; i < $(echo "$monitors" | jq 'length'); i++)); do mon_x=$(echo "$monitors" | jq ".[$i].x") mon_y=$(echo "$monitors" | jq ".[$i].y") mon_width=$(echo "$monitors" | jq ".[$i].width") mon_height=$(echo "$monitors" | jq ".[$i].height") is_focused=$(echo "$monitors" | jq ".[$i].focused") if [ "$is_focused" = true ]; then monitor_x_min=$((mon_x + 10)) monitor_x_max=$((mon_x + mon_width - 10)) monitor_y_min=$((mon_y + 10)) monitor_y_max=$((mon_y + mon_height - 10)) focused_monitor=$i break fi done if [ "$focused_monitor" -eq -1 ]; then exit 1 fi if (( cursor_x < monitor_x_min )); then adjusted_x=$monitor_x_min elif (( cursor_x + window_width > monitor_x_max )); then adjusted_x=$((monitor_x_max - window_width)) else adjusted_x=$cursor_x fi if (( cursor_y < monitor_y_min )); then adjusted_y=$monitor_y_min elif (( cursor_y + window_height > monitor_y_max )); then adjusted_y=$((monitor_y_max - window_height)) else adjusted_y=$cursor_y fi hyprctl dispatch moveactive exact "$adjusted_x $adjusted_y" > /dev/null 2>&1 ''