dotfiles/home/user/.local/bin/i3status_wrapper
2023-10-24 23:50:33 +03:00

52 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# The idea is to define "holder" modules in i3status config and then replace them
# In order to make this example work you need to add
# order += "tztime holder__headphones"
# and
# tztime holder__headphones {
# format = "holder__headphones"
# }
[ -x "/usr/bin/jq" ] || exec i3status
update_holder() {
local instance="$1"
local replacement="$2"
echo "$3" | jq --argjson arg_j "$replacement" "(.[] | (select(.instance==\"$instance\"))) |= \$arg_j"
}
get_device_battery_status() {
for uuid in $(timeout 1 bluetoothctl devices | cut -f2 -d' ' 2>/dev/null)
do
local device_info
device_info="$(timeout 1 bluetoothctl info "$uuid")"
if echo "$device_info" | grep -q 'Connected: yes\|Battery Percentage'; then
echo "$device_info" | grep 'Battery Percentage' | awk -F '[()]' '{ print "🎧🔋"$2"%" }'
break
fi
done
}
update_json_with_text() {
local json="{ \"full_text\": \"$1\", \"color\": \"#FFFFFF\"}"
update_holder "holder__headphones" "$json" "$2"
}
i3status | (
# read first 2 lines without formatting
read -r line
echo "$line"
read -r line
echo "$line"
while true
do
read -r line
json_array="$(echo "$line" | sed -e 's/^,//')"
echo "$(update_json_with_text "$(get_device_battery_status)" "$json_array"),"
done
)