This is a collection of dotfiles and scripts for my bspwm setup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

210 lines
4.3 KiB

#!/bin/sh
# Control the input devices
# Depends: xinput, setxkbmap
help() {
B=$(tput bold)
U=$(tput smul)
N=$(tput sgr0)
cat << EOF
${B}NAME${N}
inputctl - control the input devices
${B}SYNOPSIS${N}
${B}inputctl${N} ${U}OPTION${N} [${U}ARG${N}]
${B}OPTIONS${N}
${B}-h${N} Display usage message and exit.
${B}-d${N} ${U}STATE${N}
Set touchpad state, possible values: toggle, on/off, 1/0.
${B}-k${N} ${U}STATE${N}
Set keyboard state, possible values: toggle, on/off, 1/0.
${B}-s${N} ${U}STATE${N}
Set touchscreen state, possible values: toggle, on/off, 1/0.
${B}-t${N} ${U}STATE${N}
Set tablet state, possible values: ccw/normal/reset
EOF
}
setxkbmap -option caps:swapescape
# Exit if no option is provided
[ "$#" -eq 0 ] && help && exit 1
# Set required X variables
export DISPLAY=:0
export XAUTHORITY="$XDG_DATA_HOME/xorg/Xauthority"
# Option handling
SCRIPT="$(basename "$0")"
while getopts ':h?d:k:s:t:' opt; do
case $opt in
h)
help
exit 0
;;
d)
OPTION="d"
ARG="$OPTARG"
DEV="SYNA3602:00 0911:5288 Touchpad"
;;
k)
OPTION="k"
ARG="$OPTARG"
;;
s)
OPTION="s"
ARG="$OPTARG"
DEV="pointer:04F3200A:00 04F3:2373"
;;
t)
OPTION="t"
ARG="$OPTARG"
DEV="HUION Huion Tablet_HS64 Pen stylus"
;;
:)
echo "$SCRIPT: option requires an argument '$OPTARG'"
echo "Try '$SCRIPT -h' for more information."
exit 1
;;
\?)
echo "$SCRIPT: invalid option '$OPTARG'"
echo "Try '$SCRIPT -h' for more information."
exit 1
;;
esac
done
# Enable mathematics in POSIX shell
calc() { awk "BEGIN{print $*}"; }
toggle_device() {
STATUS=$(xinput --list-props "$2" | awk '/Device Enabled/ { print $4 }')
[ "$STATUS" -eq 1 ] && xinput --disable "$2" || xinput --enable "$2"
}
device() {
case "$1" in
1 | on)
xinput --enable "$2"
;;
0 | off)
xinput --disable "$2"
;;
t*)
toggle_device "$2"
;;
*)
echo "$SCRIPT: invalid argument '$1'"
echo "Try '$SCRIPT -h' for more information."
exit 1
;;
esac
}
keyboard() {
[ -z "$1" ] && return 1
if [ "$1" = "toggle" ]; then
if setxkbmap -query | grep -q options; then
keyboard "off"
else
keyboard "on"
fi
elif [ "$1" = "on" ]; then
# Swap caps lock with escape
setxkbmap -option caps:swapescape
# Swap left crtl with left alt
# setxkbmap -option ctrl:swap_lalt_lctl
# Set touchpad toggle keyboard symbol
# xmodmap -e "keycode 93 = XF86iTouch"
elif [ "$1" = "off" ]; then
# Clear all key mappings
setxkbmap -option ''
fi
}
tablet() {
case "$1" in
ccw | normal)
;;
reset)
xsetwacom set "$2" ResetArea
xsetwacom set "$2" Rotate none
xsetwacom set "$2" MapToOutput "desktop"
exit 0
;;
*)
echo "$SCRIPT: invalid argument '$1'"
echo "Try '$SCRIPT -h' for more information."
exit 1
;;
esac
screenDimensions=$(xrandr -q | grep primary | awk '{ print substr($4, 0, index($4, "+") - 1) }')
screenWidth=$(echo "$screenDimensions" | cut -d 'x' -f 1)
screenHeight=$(echo "$screenDimensions" | cut -d 'x' -f 2)
inputctl -t reset
tabletDimensions=$(xsetwacom get "$2" Area)
tabletWidth=$(echo "$tabletDimensions" | cut -d ' ' -f 3)
tabletHeight=$(echo "$tabletDimensions" | cut -d ' ' -f 4)
case "$1" in
ccw)
calculatedWidth=$(calc "$tabletHeight * $screenHeight / $screenWidth")
offsetWidth=$(calc "($tabletWidth - $calculatedWidth) / 2")
calculatedWidth=$(calc "$calculatedWidth + $offsetWidth" | cut -d '.' -f 1)
xsetwacom set "$2" Area "$offsetWidth" 0 "$calculatedWidth" "$tabletHeight"
xsetwacom set "$2" Rotate ccw
;;
normal)
calculatedHeight=$(calc "$tabletWidth * $screenHeight / $screenWidth" | cut -d '.' -f 1)
offsetHeight=$(calc "($tabletHeight - $calculatedHeight) / 2")
xsetwacom set "$2" Area 0 "$offsetHeight" "$tabletWidth" "$calculatedHeight"
;;
esac
xsetwacom set "$2" MapToOutput "${screenWidth}x${screenHeight}+0+0"
}
# Option execution
# if [ "$DEV" = "Keyboard" ]; then
# keyboard "$ARG"
# else
case "$OPTION" in
d | s)
device "$ARG" "$DEV"
;;
k)
keyboard "$ARG"
;;
t)
tablet "$ARG" "$DEV"
;;
esac
# Useful input diagnostics packages:
# - xinput
# - xev
# - evtest
#
# - setxkbmap -query
# - xmodmap -pke
# https://superuser.com/questions/437053/firefox-doesnt-recognize-my-alt-keys-anymore
# https://www.x.org/releases/X11R7.7/doc/xorg-docs/input/XKB-Config.html