#!/bin/bash

##################################
## set mouse speed for libinput ##
##################################

case "$1" in
g*)
    # detect connected mouse devices
    IDS=$(xinput | grep -o 'id=[0-9]*' | grep -o '[0-9]*')
    echo "generating mouse IDS"
    [ -e /tmp/mouse ] && rm /tmp/mouse
    while read -r line; do
        if xinput list-props "$line" | grep -q 'libinput Accel Speed'; then
            echo "$line"
            echo "$line" >>/tmp/mouse
        fi
    done <<<"$IDS"
    iconf mouse "$(cat /tmp/mouse)"
    ;;
s*)
    # set sensitivity
    while read -r line; do
        xinput set-prop $line "libinput Accel Speed" "${2:--0.4}"
    done <<<"$(iconf mouse)"
    ;;
m*)
    # set sensitivity but map volume from 0 to 100
    if [ -n "$2" ]; then
        SENSITIVITY=$(echo "( $2 / 50 ) - 1" | bc -l)
    else
        SENSITIVITY="-.04"
    fi

    while read -r line; do
        xinput set-prop $line "libinput Accel Speed" "$SENSITIVITY"
    done <<<"$(iconf mouse)"
    ;;
z)
    # toggle mouse on/off
    if ! iconf mousespeed &>/dev/null; then
        iconf mousespeed -.4
    fi

    if [ -e /tmp/zeromouse ]; then
        rm /tmp/zeromouse
        instantmouse s "$(iconf mousespeed)"
    else
        instantmouse s -1
        touch /tmp/zeromouse
    fi

    ;;
r*)
    if [ -n "$2" ]; then
        if [ "$2" = "0" ]; then
            iconf -i reversemouse 1
        else
            iconf -i reversemouse 0
        fi
    fi

    if iconf -i reversemouse; then
        iconf -i reversemouse 0
        while read -r line; do
            xinput set-prop $line "libinput Natural Scrolling Enabled" "0"
        done <<<"$(iconf mouse)"
        echo "reverse scrolling disabled"
    else
        iconf -i reversemouse 1
        echo "reverse scrolling enabled"
        while read -r line; do
            xinput set-prop $line "libinput Natural Scrolling Enabled" "1"
        done <<<"$(iconf mouse)"
    fi
    ;;
l*)
    # get current sensitivity
    xinput list-props "$(iconf mouse | head -1)" | grep 'libinput Accel Speed' | head -1 | grep -o '[-.0-9]*$'
    ;;

esac
