mirror of
https://github.com/ItsDrike/nixdots
synced 2024-11-10 08:49:42 +00:00
86 lines
2.2 KiB
Plaintext
86 lines
2.2 KiB
Plaintext
|
#!/usr/bin/env bash
|
||
|
|
||
|
ICON_IDLE=""
|
||
|
ICON_CONNECTED=""
|
||
|
ICON_OFF=""
|
||
|
|
||
|
toggle() {
|
||
|
status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
|
||
|
|
||
|
if [ "$status" = "unblocked" ]; then
|
||
|
rfkill block bluetooth
|
||
|
else
|
||
|
rfkill unblock bluetooth
|
||
|
if ! systemctl -q is-active bluetooth.service; then
|
||
|
# This will use polkit for privillege elevation
|
||
|
systemctl start bluetooth
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
get_report() {
|
||
|
status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
|
||
|
if [ "$status" = "blocked" ] || ! systemctl -q is-active bluetooth.service || ! command -v bluetoothctl >/dev/null 2>&1; then
|
||
|
jq -n -c --monochrome-output \
|
||
|
--arg icon "$ICON_OFF" \
|
||
|
--arg status "unknown" \
|
||
|
--arg name "" \
|
||
|
--arg mac "" \
|
||
|
--arg battery "" \
|
||
|
'$ARGS.named'
|
||
|
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
status="$(bluetoothctl show)"
|
||
|
|
||
|
powered="$(echo "$status" | grep Powered | cut -d' ' -f 2-)"
|
||
|
if [ "$powered" != "yes" ]; then
|
||
|
jq -n -c --monochrome-output \
|
||
|
--arg icon "$ICON_OFF" \
|
||
|
--arg status "unpowered" \
|
||
|
--arg name "" \
|
||
|
--arg mac "" \
|
||
|
--arg battery "" \
|
||
|
'$ARGS.named'
|
||
|
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
status="$(bluetoothctl info)"
|
||
|
if [ "$status" == "Missing device address argument" ]; then
|
||
|
jq -n -c --monochrome-output \
|
||
|
--arg icon "$ICON_IDLE" \
|
||
|
--arg status "idle" \
|
||
|
--arg name "" \
|
||
|
--arg mac "" \
|
||
|
--arg battery "" \
|
||
|
'$ARGS.named'
|
||
|
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
name="$(echo "$status" | grep Name | cut -d' ' -f 2-)"
|
||
|
mac="$(echo "$status" | head -1 | awk '{print $2}' | tr ':' '_')"
|
||
|
|
||
|
if [ "$(echo "$status" | grep Percentage)" != "" ] && command -v upower >/dev/null 2>&1; then
|
||
|
battery="$(upower -i /org/freedesktop/UPower/devices/headset_dev_"$mac" | grep percentage | awk '{print $2}' | cut -f 1 -d '%')%"
|
||
|
else
|
||
|
battery=""
|
||
|
fi
|
||
|
|
||
|
jq -n -c --monochrome-output \
|
||
|
--arg icon "$ICON_CONNECTED" \
|
||
|
--arg status "connected" \
|
||
|
--arg name "$name" \
|
||
|
--arg mac "$mac" \
|
||
|
--arg battery "$battery" \
|
||
|
'$ARGS.named'
|
||
|
}
|
||
|
|
||
|
case "$1" in
|
||
|
"status") get_report ;;
|
||
|
"toggle") toggle ;;
|
||
|
*) >&2 echo "Invalid usage, argument '$1' not recognized."; exit 1 ;;
|
||
|
esac
|