77 lines
2.0 KiB
Nix
Executable File
77 lines
2.0 KiB
Nix
Executable File
{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
|
|
''
|