64 lines
1.4 KiB
Nix
64 lines
1.4 KiB
Nix
|
|
{ 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"
|
||
|
|
''
|