47 lines
1.1 KiB
Nix
47 lines
1.1 KiB
Nix
{ lib
|
|
, joy2keyd
|
|
, writeShellApplication
|
|
}:
|
|
writeShellApplication {
|
|
name = "joy2key";
|
|
|
|
runtimeInputs = [ joy2keyd ];
|
|
|
|
text = ''
|
|
mode="$1"
|
|
[[ -z "$mode" ]] && mode="start"
|
|
shift
|
|
|
|
# allow overriding joystick device via __joy2key_dev env
|
|
# (by default will use /dev/input/jsX which will scan all)
|
|
device="/dev/input/jsX"
|
|
[[ -n "$__joy2key_dev" ]] && device="$__joy2key_dev"
|
|
|
|
params=("$@")
|
|
if [[ "''${#params[@]}" -eq 0 ]]; then
|
|
# Default button-to-keyboard mappings:
|
|
# * cursor keys for axis/dpad
|
|
# * enter, space, esc and tab for buttons 'a', 'b', 'x' and 'y'
|
|
# * page up/page down for buttons 5,6 (shoulder buttons)
|
|
params=(kcub1 kcuf1 kcuu1 kcud1 0x0a 0x20 0x1b 0x09 kpp knp)
|
|
fi
|
|
|
|
function kill_deamon() {
|
|
pkill -f joy2keyd
|
|
sleep 1
|
|
}
|
|
|
|
case "$mode" in
|
|
start)
|
|
if pgrep -f "joy2keyd" &>/dev/null; then
|
|
kill_deamon
|
|
fi
|
|
joy2keyd "$device" "''${params[@]}" || exit 1
|
|
;;
|
|
stop)
|
|
kill_deamon
|
|
;;
|
|
esac
|
|
exit 0
|
|
'';
|
|
}
|