147 lines
2.9 KiB
Bash
Executable file
147 lines
2.9 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
function _tmux_battery() {
|
|
local IFS=$'\n'
|
|
|
|
local batteries=($(ls /sys/class/power_supply/ | grep ^BAT[0-9]$))
|
|
[[ "${batteries}" = "" ]] && return 1
|
|
|
|
local battery="/sys/class/power_supply/${batteries[0]}"
|
|
local level=$(cat ${battery}/capacity)
|
|
local status=$(cat ${battery}/status)
|
|
local is_charging=false
|
|
[[ "${status}" = "Charging" ]] && is_charging=true
|
|
|
|
local icon
|
|
if ((level>=60))
|
|
then
|
|
icon=""
|
|
elif ((level>=40))
|
|
then
|
|
icon=""
|
|
elif ((level>=20))
|
|
then
|
|
icon=""
|
|
else
|
|
icon=""
|
|
fi
|
|
|
|
echo -n "${icon}"
|
|
${is_charging} && echo -n ""
|
|
echo
|
|
echo -n "${level}"
|
|
}
|
|
|
|
function _tmux_volume() {
|
|
local IFS=$'\n'
|
|
local level=$(wpctl get-volume @DEFAULT_SINK@ | cut -d\ -f2 | sed -e "s/^0//" -e "s/\.//")
|
|
[[ "${level}" = "" ]] && return 1
|
|
[[ "${level}" = "00" ]] && level="0"
|
|
|
|
local icon
|
|
if ((level>=80))
|
|
then
|
|
icon=""
|
|
elif ((level>=40))
|
|
then
|
|
icon=""
|
|
elif ((level>=10))
|
|
then
|
|
icon=""
|
|
else
|
|
icon=""
|
|
fi
|
|
|
|
local muted=$(wpctl get-volume @DEFAULT_SINK@ | grep '[MUTED]')
|
|
if [[ "${muted}" != "" ]]; then
|
|
icon=""
|
|
fi
|
|
|
|
echo "${icon}"
|
|
echo -n "${level}"
|
|
}
|
|
|
|
function _tmux_statusbar() {
|
|
local IFS=$'\n'
|
|
local sep=""
|
|
local thr_volume=100
|
|
local thr_battery=40
|
|
local is_uber=$(cat "/tmp/.tmux_uber" || echo -n false)
|
|
|
|
# Get data.
|
|
battery=($(_tmux_battery))
|
|
volume=($(_tmux_volume))
|
|
|
|
# Prepare separators.
|
|
sep_batvol=" "
|
|
|
|
if ${is_uber} || [[ "${battery[1]}" -lt "${thr_battery}" ]] || [[ "${volume[1]}" -gt "${thr_volume}" ]]; then
|
|
sep_batvol=" ${sep} "
|
|
fi
|
|
if [[ "${battery[0]}" = "" ]]; then
|
|
sep_batvol=""
|
|
fi
|
|
|
|
# Print.
|
|
echo -n " "
|
|
|
|
# Assemble.
|
|
if ${is_uber}; then
|
|
local lang=($(_tmux_language))
|
|
[[ "${lang[0]}" != "" ]] && {
|
|
echo -n "${lang[0]} ${sep} "
|
|
};
|
|
|
|
[[ "${volume[0]}" != "" ]] && echo -n "${volume[0]} ${volume[1]}%${sep_batvol}"
|
|
[[ "${battery[0]}" != "" ]] && echo -n "${battery[0]} ${battery[1]}%"
|
|
else
|
|
[[ "${volume[0]}" != "" ]] && {
|
|
echo -n "${volume[0]}"
|
|
[[ "${volume[1]}" -gt 100 ]] && echo -n " ${volume[1]}%"
|
|
echo -n "${sep_batvol}"
|
|
};
|
|
[[ "${battery[0]}" != "" ]] && {
|
|
echo -n "${battery[0]}"
|
|
[[ "${battery[1]}" -lt 40 ]] && echo -n " ${battery[1]}%"
|
|
};
|
|
fi
|
|
|
|
echo -n " "
|
|
}
|
|
|
|
function _tmux_language() {
|
|
local IFS=$'\n'
|
|
local lang=$(swaymsg -t get_inputs | jq 'map(select(has("xkb_active_layout_name")))[0].xkb_active_layout_name')
|
|
|
|
echo -n ${lang:1:2}
|
|
}
|
|
|
|
function _tmux_client_count() {
|
|
local IFS=$'\n'
|
|
local session=${1}
|
|
local count=$(tmux list-clients -t ${session} | wc -l)
|
|
|
|
[ ${count} -gt 1 ] && echo -n "+${count} "
|
|
}
|
|
|
|
function _tmux_toggle_statusbar() {
|
|
local file="/tmp/.tmux_uber"
|
|
if [[ ! -f ${file} ]]; then
|
|
echo "true" > ${file}
|
|
elif $(cat ${file}); then
|
|
echo "false" > ${file}
|
|
else
|
|
echo "true" > ${file}
|
|
fi
|
|
}
|
|
|
|
IFS=$'\n'
|
|
action=${1}
|
|
session=${2}
|
|
|
|
case "${action}" in
|
|
"statusbar") _tmux_statusbar ;;
|
|
"client_count") _tmux_client_count ${session} ;;
|
|
"togglestatusbar") _tmux_toggle_statusbar ;;
|
|
esac
|