#!/bin/bash #wait time to discover new devices in seconds SCAN_PERIOD=5 #locations of blacklist and hard coded list of paired devices (watch out, need to modify Makefile as well if you want to change these values and still use make install) BLACKLIST=${XDG_DATA_HOME:-$HOME/.local/share}/bt/blacklist PAIRLIST=${XDG_DATA_HOME:-$HOME/.local/share}/bt/paired actions='turn off\nturn on\npair\nunpair' #Checks for necessary programs to be present. Very unlikely not to be present but let's just err on the safer side. for prog in dmenu bluetoothctl awk cat; do if ! hash "$prog" 2>/dev/null; then printf 'bthandler: %s: command not found\n' "$prog" >&2 exit 127 fi done #Compile list of all Bluetooth IDS of paired devices (from bluetoothctl and from hardcoded list) bt_IDS="$( ( bluetoothctl paired-devices && cat "$PAIRLIST" ) | sort -u | awk '{print $2}' )" #Compile list of all device Names of paired devices (from bluetoothctl and from hardcoded list) paired_devices="$( ( bluetoothctl paired-devices && cat "$PAIRLIST" ) | sort -u | awk '{for (i=3; i /dev/null exit 0 } case $choice in "turn on") bluetoothctl power on cleanup;; "turn off") bluetoothctl power off cleanup;; "scan on") bluetoothctl power on && echo power on && sleep 2 ([ -n "$TERMINAL" ] && $TERMINAL -e bluetoothctl scan on ) || st bluetoothctl scan on cleanup;; "pair") bluetoothctl power on bluetoothctl scan on & disown notify-send "Bluetooth" "Searching for devices, please wait a bit" sleep $SCAN_PERIOD echo "$paired_devices" > /tmp/paired_devices new_devices="$( bluetoothctl devices | awk '{for (i=3; i> "$PAIRLIST" fi fi cleanup;; "unpair") choice=$( echo "$paired_devices" | dmenu -l 10 -i -p 'remove which paired device?') if [ -n "$choice" ]; then dev_no=$(cat -n /tmp/paired_devices | grep -E "^[0-9]*\tDevice [0-9:].* $choice$" | awk '{print $1}') dev_id=$( echo "$bt_IDS" | nl | grep -E "$dev_no""[[:space:]]" | awk '{print $2}' ) bluetoothctl remove "$dev_id" #remove device to unpair from hard coded paired devices list new_paired_list="$( grep -v "$dev_id" "$PAIRLIST" )" echo "$new_paired_list" > "$PAIRLIST" fi cleanup;; esac if [ -n "$choice" ]; then #echo paired_devices: "$( echo "$paired_devices" | nl )" dev_no=$( echo "$paired_devices" | nl | grep -P "[0-9:]+\t$choice$" | awk '{print $1}') dev_id=$( echo "$bt_IDS" | nl | grep -P "^.*$dev_no\t" | awk '{print $2}') #echo dev_no:"$dev_no" #echo dev_id:"$dev_id" #echo choice:"$choice" bluetoothctl power on bluetoothctl pair "$dev_id" bluetoothctl connect "$dev_id" fi cleanup