flake-update-20260505
1#!/usr/bin/env bash
2# List paired Bluetooth devices for raffi script filter.
3# Outputs Alfred Script Filter JSON format.
4# Usage: bluetooth-raffi [query]
5set -euo pipefail
6
7query="${1:-}"
8
9items="[]"
10while IFS= read -r line; do
11 mac=$(echo "$line" | awk '{print $2}')
12 [[ -z "$mac" ]] && continue
13
14 info=$(bluetoothctl info "$mac" 2>/dev/null) || continue
15 name=$(echo "$info" | grep "Alias:" | sed 's/.*Alias: //')
16 connected=$(echo "$info" | grep -P '^\tConnected:' | sed 's/.*Connected: //')
17 icon=$(echo "$info" | grep "Icon:" | sed 's/.*Icon: //')
18
19 [[ -z "$name" ]] && name="$mac"
20 [[ -z "$icon" ]] && icon="bluetooth"
21
22 if [[ "$connected" == "yes" ]]; then
23 status="🟢 Connected"
24 else
25 status="⚪ Disconnected"
26 fi
27
28 filter="${name} ${mac} ${status}"
29 if [[ -n "$query" ]] && ! echo "$filter" | grep -qi "$query"; then
30 continue
31 fi
32
33 items=$(jq --arg name "$name" --arg mac "$mac" --arg status "$status" \
34 '. + [{"title": $name, "subtitle": "\($status) — \($mac)", "arg": $mac}]' <<< "$items")
35done < <(bluetoothctl devices 2>/dev/null)
36
37jq -n --argjson items "$items" '{"items": $items}'