uvms/pkgs/request-usb/package.nix

64 lines
1.4 KiB
Nix
Raw Permalink Normal View History

{ writeShellScriptBin }:
writeShellScriptBin "request-usb" ''
set -euo pipefail
parseArgs() {
N_CONSTRAINTS=0
while [[ -n "''${1:-}" ]]; do
local x=
case "$1" in
"--manufacturer" )
N_CONSTRAINTS=$(( $N_CONSTRAINTS + 1 ))
MANUFACTURER="$2"
shift 2
;;
"--manufacturer="* )
N_CONSTRAINTS=$(( $N_CONSTRAINTS + 1 ))
MANUFACTURER=''${1#--manufacturer=}
shift 1
;;
"--" )
break
;;
*)
printUsage
;;
esac
done
}
printUsage() {
echo "$(caller)" >&2
echo "Usage: request-usb [--manufacturer=MANUFACTURER]" >&2
exit 1
}
findFirst() {
local d=
[[ ''${N_CONSTRAINTS:-0} != 0 ]] || printUsage
for d in /sys/bus/usb/devices/* ; do
[[ -e "$d/manufacturer" ]] || continue
[[ -e "$d/uevent" ]] || continue
read -r x < "$d/manufacturer"
if ! [[ -z "''${MANUFACTURER:-}" || "$MANUFACTURER" = "$x" ]] ; then
continue
fi
# NOTE: Other predicates here
# ...
echo -n "$d"
return
done
return 1
}
parseArgs $@
d=$(findFirst)
export $( cat "$d/uevent" )
sudo chown "$USER" /dev/bus/usb/"$BUSNUM"/"$DEVNUM"
echo -n /dev/bus/usb/"$BUSNUM"/"$DEVNUM"
''