Initial ThinkPad Hyprland dotfiles
This commit is contained in:
133
config/hypr/Scripts/bluetooth-menu.sh
Executable file
133
config/hypr/Scripts/bluetooth-menu.sh
Executable file
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
notify() {
|
||||
notify-send " Bluetooth" "$1"
|
||||
}
|
||||
|
||||
require_bluetoothctl() {
|
||||
if ! command -v bluetoothctl >/dev/null 2>&1; then
|
||||
notify "bluetoothctl ist nicht installiert."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
wofi_pick() {
|
||||
wofi --dmenu --prompt "$1" --insensitive
|
||||
}
|
||||
|
||||
adapter_powered() {
|
||||
{ bluetoothctl show 2>/dev/null || true; } | awk -F': ' '/Powered/ {print $2; exit}'
|
||||
}
|
||||
|
||||
device_name() {
|
||||
local mac="$1"
|
||||
bluetoothctl info "$mac" 2>/dev/null | awk -F': ' '/Name/ {print $2; exit}'
|
||||
}
|
||||
|
||||
pick_device() {
|
||||
local prompt="$1"
|
||||
bluetoothctl devices |
|
||||
awk '{mac=$2; $1=""; $2=""; sub(/^ */, ""); printf " %s [%s]\n", $0, mac}' |
|
||||
wofi_pick "$prompt"
|
||||
}
|
||||
|
||||
selected_mac() {
|
||||
sed -n 's/.*\[\([0-9A-Fa-f:]\{17\}\)\].*/\1/p'
|
||||
}
|
||||
|
||||
scan_devices() {
|
||||
notify "Scan laeuft fuer 8 Sekunden."
|
||||
timeout 8 bluetoothctl scan on >/dev/null 2>&1 || true
|
||||
bluetoothctl scan off >/dev/null 2>&1 || true
|
||||
|
||||
local selection mac name
|
||||
selection="$(pick_device " Geraet verbinden")"
|
||||
[ -n "$selection" ] || exit 0
|
||||
mac="$(printf '%s\n' "$selection" | selected_mac)"
|
||||
name="$(device_name "$mac")"
|
||||
[ -n "$name" ] || name="$mac"
|
||||
|
||||
bluetoothctl pair "$mac" >/dev/null 2>&1 || true
|
||||
bluetoothctl trust "$mac" >/dev/null 2>&1 || true
|
||||
bluetoothctl connect "$mac" && notify "Verbunden mit $name."
|
||||
}
|
||||
|
||||
connect_saved_device() {
|
||||
local selection mac name
|
||||
selection="$(pick_device " Gekoppeltes Geraet verbinden")"
|
||||
[ -n "$selection" ] || exit 0
|
||||
mac="$(printf '%s\n' "$selection" | selected_mac)"
|
||||
name="$(device_name "$mac")"
|
||||
[ -n "$name" ] || name="$mac"
|
||||
bluetoothctl connect "$mac" && notify "Verbunden mit $name."
|
||||
}
|
||||
|
||||
disconnect_device() {
|
||||
local selection mac name
|
||||
selection="$(
|
||||
bluetoothctl devices Connected |
|
||||
awk '{mac=$2; $1=""; $2=""; sub(/^ */, ""); printf " %s [%s]\n", $0, mac}' |
|
||||
wofi_pick " Bluetooth trennen"
|
||||
)"
|
||||
|
||||
[ -n "$selection" ] || exit 0
|
||||
mac="$(printf '%s\n' "$selection" | selected_mac)"
|
||||
name="$(device_name "$mac")"
|
||||
[ -n "$name" ] || name="$mac"
|
||||
bluetoothctl disconnect "$mac" && notify "$name getrennt."
|
||||
}
|
||||
|
||||
remove_device() {
|
||||
local selection mac name
|
||||
selection="$(pick_device " Geraet entfernen")"
|
||||
[ -n "$selection" ] || exit 0
|
||||
mac="$(printf '%s\n' "$selection" | selected_mac)"
|
||||
name="$(device_name "$mac")"
|
||||
[ -n "$name" ] || name="$mac"
|
||||
bluetoothctl remove "$mac" && notify "$name entfernt."
|
||||
}
|
||||
|
||||
require_bluetoothctl
|
||||
|
||||
power="$(adapter_powered)"
|
||||
[ -n "$power" ] || power="unknown"
|
||||
|
||||
choice="$(
|
||||
printf '%s\n' \
|
||||
" Geraet suchen und verbinden" \
|
||||
" Bluetooth ein/aus" \
|
||||
" Gekoppelte Geraete" \
|
||||
" Verbundenes Geraet trennen" \
|
||||
" Geraet entfernen" \
|
||||
" Status: $power" |
|
||||
wofi_pick " Bluetooth"
|
||||
)"
|
||||
|
||||
case "$choice" in
|
||||
*"Geraet suchen"*)
|
||||
bluetoothctl power on >/dev/null
|
||||
bluetoothctl agent on >/dev/null 2>&1 || true
|
||||
bluetoothctl default-agent >/dev/null 2>&1 || true
|
||||
scan_devices
|
||||
;;
|
||||
*"Bluetooth ein/aus"*)
|
||||
if [ "$power" = "yes" ]; then
|
||||
bluetoothctl power off && notify "Bluetooth ausgeschaltet."
|
||||
else
|
||||
bluetoothctl power on && notify "Bluetooth eingeschaltet."
|
||||
fi
|
||||
;;
|
||||
*"Gekoppelte Geraete"*)
|
||||
connect_saved_device
|
||||
;;
|
||||
*"Verbundenes Geraet trennen"*)
|
||||
disconnect_device
|
||||
;;
|
||||
*"Geraet entfernen"*)
|
||||
remove_device
|
||||
;;
|
||||
*"Status:"*)
|
||||
bluetoothctl show | wofi --dmenu --prompt " Bluetoothstatus"
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user