testsAndMisc/linux_configuration/scripts/periodic_background/i3-configuration/i3blocks/bluetooth.sh
Krzysztof kuhy Rudnicki db6276b3ff refactor(linux_configuration): move remaining dirs + scripts/ to meta/
- Move fresh-install/ → scripts/single_use/fresh-install/
- Move hosts/ → scripts/periodic_background/hosts/
- Move i3-configuration/ → scripts/periodic_background/i3-configuration/
- Delete linux_configuration/LaTeX/, nix-poc/, report/ (dead dirs)
- Move repo-root scripts/ → meta/scripts/
- Update root .pre-commit-config.yaml: scripts/ → meta/scripts/ (9 entries)
- Update run.sh ARTIFACT_INIT_SCRIPT to meta/scripts/
- Update fresh-install/main.sh: hosts/install.sh + i3-configuration/install.sh paths
- Update check_python_location.sh: add meta/scripts/ to exception list
- Fix midnight flakiness in test_recent_workout_returns_true: use timezone-aware
  local noon instead of now-1h to avoid SQL date() boundary issues
2026-05-15 00:53:01 +02:00

73 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# i3blocks bluetooth indicator.
set -euo pipefail
SCRIPT_DIR=${BASH_SOURCE[0]%/*}
[[ $SCRIPT_DIR == "${BASH_SOURCE[0]}" ]] && SCRIPT_DIR='.'
# shellcheck source=linux_configuration/i3-configuration/i3blocks/persist_common.sh
source "$SCRIPT_DIR/persist_common.sh"
get_bluetooth_info() {
local info
info=$(bluetoothctl info 2> /dev/null) || info=''
printf '%s\n' "$info"
}
emit() {
local bluetooth_info connected device line state_key
bluetooth_info=$(get_bluetooth_info)
connected='no'
device=''
while IFS= read -r line; do
case $line in
*'Connected: yes')
connected='yes'
;;
*'Alias: '*)
device=${line#*Alias: }
;;
esac
done <<< "$bluetooth_info"
state_key="$connected|$device"
if ! i3blocks_update_if_changed_key "bluetooth_state" "$state_key"; then
return 0
fi
if [[ $connected == yes && -n $device ]]; then
echo "$device"
echo
echo "#50FA7B"
else
echo " Disconnected"
fi
}
is_persist_mode() {
[[ ${BLOCK_INTERVAL:-} == "persist" ]]
}
emit_throttled() {
if ! i3blocks_should_emit_by_interval_key "bluetooth_emit" "$EMIT_MIN_INTERVAL_S"; then
return 0
fi
emit
}
EMIT_MIN_INTERVAL_S=2
emit
if is_persist_mode; then
# React to BlueZ D-Bus signals instead of polling.
if command -v dbus-monitor > /dev/null 2>&1; then
dbus-monitor --system "type='signal',sender='org.bluez'" 2> /dev/null |
while read -r line; do
[[ $line == *"PropertiesChanged"* ]] || continue
emit_throttled
done
fi
fi