mirror of
				https://github.com/ItsDrike/dotfiles.git
				synced 2025-10-31 16:06:36 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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
 |