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}'