$ switch-preset-mxmaster3s.sh$ switch-preset-mxmaster3s.sh <PRESETNAME>e.g.: switch-preset-mxmaster3s.sh copypaste
| #!/bin/bash | |
| # Cycle through input-remapper presets | |
| # https://github.com/sezanzeb/input-remapper | |
| ## First create presets in input-remapper GUI. Do not use spaces in presets names. | |
| ## Edit your device name and default preset name here: | |
| ######### Customize this config ####### | |
| device='Logitech USB Receiver' # or e.g. 'MX Anywhere 3S Mouse' # See your device name in the GUI | |
| configdir=~/'.config/input-remapper-2' | |
| defaultpreset='copypaste' | |
| ####################################### | |
| ## Store all arguments in a bash array: | |
| array=("$@") | |
| ## Find out length of an array: | |
| len="${#array[@]}" | |
| ## Get the last argument (the last one is preset name): | |
| _last="${array[$len-1]}" | |
| ## Extract and store all arguments before last: | |
| #args_="${array[@]:0:$len-1}" | |
| ## Extract and store all arguments except first & last: | |
| #_args_="${array[@]:1:$len-2}" | |
| presetsocket="${configdir}/presets/${device}/curpreset" | |
| presets=($(cd "${configdir}/presets/${device}/"; find -P -maxdepth 1 -type f -name "*.json" -printf '%f\n')) | |
| curpreset= | |
| nextpreset= | |
| if [ ${#presets[@]} -gt 1 ]; then | |
| # Define a current preset | |
| if ! [ -f "$presetsocket" ]; then | |
| firstrun=1 | |
| nextpreset="$defaultpreset" | |
| curpreset="$nextpreset" | |
| echo "$curpreset" > "$presetsocket" | |
| else | |
| curpreset="$(cat "$presetsocket" | head -1)" | |
| fi | |
| for i in "${!presets[@]}"; do | |
| # match the current preset in list of the presets and set the nextpreset to the next one | |
| case "${presets[$i]%.json}" in | |
| "$curpreset") | |
| j=$(($i+1)) | |
| # if we rich the end of the list of presets set the nextpreset to the first preset in the list | |
| if [ $j -eq ${#presets[@]} ]; then | |
| nextpreset="${presets[0]%.json}" | |
| # or set the nextpreset to the next one in the list | |
| else | |
| nextpreset="${presets[$j]%.json}" | |
| fi | |
| ;; | |
| esac | |
| done | |
| # Start the input-remapper daemon if it's not running | |
| pid="$(pgrep input-remapper | head -1)" | |
| if ! (($pid)); then | |
| pkexec input-remapper-control \ | |
| --command start-reader-service | |
| pkexec input-remapper-control \ | |
| --command start-daemon | |
| sleep 0.3s | |
| pid="$(pgrep input-remapper | head -1)" | |
| fi | |
| # Switch the preset | |
| echo Switching preset... | |
| { | |
| if (($pid)); then | |
| # stop the current running preset | |
| (($firstrun)) || input-remapper-control \ | |
| --config-dir "$configdir" \ | |
| --command stop \ | |
| --preset "$curpreset" \ | |
| --device "$device" >& /dev/null | |
| # start the next one in the list | |
| input-remapper-control \ | |
| --config-dir "$configdir" \ | |
| --command start \ | |
| --preset "${_last:-$nextpreset}" \ | |
| --device "$device" >& /dev/null | |
| fi | |
| } & | |
| # write the actual current preset name to the file (curpreset) | |
| [ -z "$_last" ] && echo "$nextpreset" | tee "$presetsocket" | |
| notify-send "input-remapper" "${_last:-$nextpreset}" -a "input-remapper" -i "input-mouse" | |
| fi |