All scripts have been moved to the overlay folder in the top level directory Overlay is now instantiated per configuration to make use of the host variable
81 lines
2.2 KiB
Nix
Executable File
81 lines
2.2 KiB
Nix
Executable File
{ pkgs }:
|
|
pkgs.writeShellApplication {
|
|
name = "moveonscreen";
|
|
runtimeInputs = with pkgs; [ hyprland jq coreutils gawk ];
|
|
text = ''
|
|
center_window=false
|
|
if [[ ! $# -eq 0 ]] && [[ $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
|
|
'';
|
|
}
|