{ pkgs, ... }: pkgs.writeScript "eyezoom" '' arg="$1" set -- $( ${pkgs.xorg.xrandr}/bin/xrandr | ${pkgs.gawk}/bin/awk -F "[x+ ]" '/primary/ { print $4" "$5" "$6" "$7 }' ) W="$1" H="$2" offx="$3" offy="$4" HFACTOR=10 WFACTOR=4 WIDEDIV=2 mouse="pointer:Logitech MX Vertical" zoomsens=0.1 # calculated using this with x = x+1, y = y+1. works, not sure why... # https://unix.stackexchange.com/questions/491531/how-to-avoid-mouse-cursor-jumping-while-using-xinput-coordinate-transformation-m xpos=$(( offx + (W / 2) + 1 )) ypos=$(( offy + (H / 2) + 1 )) zoommatrix="$zoomsens 0 $(${pkgs.bc}/bin/bc -l <<< "(1-$zoomsens)*$xpos") 0 $zoomsens $(${pkgs.bc}/bin/bc -l <<< "(1-$zoomsens)*$ypos") 0 0 1" case "$arg" in eye) ${pkgs.wmctrl}/bin/wmctrl -R ':ACTIVE:' -e 0,$offx,$(( offy - (H * HFACTOR / 2) + (H / 2) )),$W,$((H*HFACTOR)) xinput set-prop "pointer:Logitech MX Vertical" "Coordinate Transformation Matrix" $zoommatrix ;; tiktok) ${pkgs.wmctrl}/bin/wmctrl -R ':ACTIVE:' -e 0,$(( offx - ((W/WFACTOR)/2) + (W/2))),$offy,$((W/WFACTOR)),$H xinput set-prop "pointer:Logitech MX Vertical" "Coordinate Transformation Matrix" 1 0 0 0 1 0 0 0 1 ;; wide) ${pkgs.wmctrl}/bin/wmctrl -R ':ACTIVE:' -e 0,$offx,$(( offy - ((H / WIDEDIV) / 2) + (H / 2) )),$W,$((H/WIDEDIV)) xinput set-prop "pointer:Logitech MX Vertical" "Coordinate Transformation Matrix" 1 0 0 0 1 0 0 0 1 ;; *) ${pkgs.wmctrl}/bin/wmctrl -R ':ACTIVE:' -e 0,$offx,$offy,$W,$H xinput set-prop "pointer:Logitech MX Vertical" "Coordinate Transformation Matrix" 1 0 0 0 1 0 0 0 1 ;; esac ''