From 2627ed4534d9f954a3e3217c737ac23de43b1bd7 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Wed, 14 Jan 2026 16:07:04 +0100 Subject: [PATCH] Imporove sway status bar script. --- .../t490s/home/plom/.nonpath_bins/status.sh | 113 +++++++++++------- 1 file changed, 69 insertions(+), 44 deletions(-) diff --git a/trixie/copy/t490s/home/plom/.nonpath_bins/status.sh b/trixie/copy/t490s/home/plom/.nonpath_bins/status.sh index 7cb3691..2a9d110 100755 --- a/trixie/copy/t490s/home/plom/.nonpath_bins/status.sh +++ b/trixie/copy/t490s/home/plom/.nonpath_bins/status.sh @@ -13,13 +13,15 @@ COL_GREEN=00dd00 COL_GREY=aaaaaa print_bar_block() { - printf '{"full_text": "%s", ' "$1" - COLOR="${COL_GREY}" - if [ ! -z "$2" ]; then - COLOR="$2" + local TEXT="$1" + local COLOR="$2" + local NO_BAR_IF_ZERO="$3" + if [ -z "$2" ]; then + COLOR="${COL_GREY}" fi + printf '{"full_text": "%s", ' "${TEXT}" printf '"color": "%s", ' "${COLOR}" - if [ "$3" = "0" ]; then + if [ "${NO_BAR_IF_ZERO}" = "0" ]; then printf '"separator": false,\n' printf '"separator_block_width": 0,' fi @@ -28,21 +30,26 @@ print_bar_block() { } print_calc() { - printf "%d" $(calc "$1") + local RESULT + RESULT=$(calc "$1") + printf "%d" "${RESULT}" } color_at() { - IDX=0 + local MEASURED="$1" + local STEPS_MAP="$2" + local IDX=0 while true; do + local COLOR LIMIT STEP IDX=$(print_calc "${IDX} + 1") - STEP=$(echo "$2" | cut -d'_' -f${IDX}) + STEP=$(echo "${STEPS_MAP}" | cut -d'_' -f"${IDX}") if [ -z "${STEP}" ]; then break fi LIMIT=$(echo "${STEP}" | cut -d':' -f1) COLOR=$(echo "${STEP}" | cut -d':' -f2) - if [ "${LIMIT}" -ge "${1}" ]; then - printf "${COLOR}" + if [ "${LIMIT}" -ge "${MEASURED}" ]; then + printf "%s" "${COLOR}" break fi done @@ -50,28 +57,37 @@ color_at() { print_clipboard() { print_selection() { - print_bar_block "$1 [" "${COL_WHITE}" 0 - CLEANED=$(wl-paste $2 | sed 's/"/\\"/g') + LABEL="$1" + WL_PASTE_ARGS="$2" + NO_BAR_IF_ZERO="$3" + local CLEAN_PASTE ELLIPSIS + CLEAN_PASTE=$(wl-paste ${WL_PASTE_ARGS} | sed 's/"/\\"/g') ELLIPSIS= - if [ $(echo "${CLEANED}" | wc -c) -gt 32 ]; then - CLEANED=$(echo "${CLEANED}" | cut -zc'-29') + print_bar_block "${LABEL} [" "${COL_WHITE}" 0 + if [ "${#CLEAN_PASTE}" -gt 32 ]; then + CLEAN_PASTE=$(echo "${CLEAN_PASTE}" | cut -zc'-29') ELLIPSIS='...' fi - print_bar_block "${CLEANED}" "" 0 - print_bar_block "${ELLIPSIS}]" "${COL_WHITE}" $3 + print_bar_block "${CLEAN_PASTE}" "" 0 + print_bar_block "${ELLIPSIS}]" "${COL_WHITE}" "${NO_BAR_IF_ZERO}" } print_selection 'wl-paste' '' 0 print_selection ' --primary' --primary } print_online() { + local STATUS_WIFI print_conn() { - print_bar_block "$(echo $1 | cut -c1):" "" 0 - IP=$(ip --brief addr show | grep "$1" | sed -E 's/ +/\t/g' | cut -f3 | cut -f1 -d'/') + local IFACE="$1" + local NO_BAR_IF_ZERO="$2" + local IP + IP=$(ip --brief addr show | grep "${IFACE}" | sed -E 's/ +/\t/g' | cut -f3 | cut -f1 -d'/') + IFACE_FIRSTCHAR=$(echo "$1" | cut -c1) + print_bar_block "${IFACE_FIRSTCHAR}:" "" 0 if [ -z "${IP}" ]; then print_bar_block '-' else - print_bar_block "${IP}" "${COL_WHITE}" "$2" + print_bar_block "${IP}" "${COL_WHITE}" "${NO_BAR_IF_ZERO}" fi } print_conn enp @@ -79,9 +95,10 @@ print_online() { set +e STATUS_WIFI=$(nmcli -t -f IN-USE,SSID,SIGNAL dev wifi | grep '^\*:') set -e - if [ ! -z "${STATUS_WIFI}" ]; then + if [ -n "${STATUS_WIFI}" ]; then + local COLOR SIGNAL SIGNAL=$(echo -n "${STATUS_WIFI}" | cut -d':' -f3) - COLOR=$(color_at $SIGNAL "45:${COL_RED}_85:${COL_YELLOW}_100:${COL_GREEN}") + COLOR=$(color_at "${SIGNAL}" "45:${COL_RED}_85:${COL_YELLOW}_100:${COL_GREEN}") print_bar_block " ${SIGNAL}" "${COLOR}" 0 print_bar_block "% $(echo "${STATUS_WIFI}" | cut -d':' -f2)" else @@ -90,29 +107,33 @@ print_online() { } print_battery() { + local BAT_DIR CHARGE CHARGING COLOR STATUS BAT_DIR="${SYSCLASS_DIR}/power_supply/BAT0" calc_percent () { + local MEASURED, MAX cat_energy() { - cat "${BAT_DIR}/energy_$1" + cat "${BAT_DIR}/energy_${1}" } - print_calc "100 * $(cat_energy $1) // $(cat_energy $2)" + MEASURED=$(cat_energy "$1") + MAX=$(cat_energy "$2") + print_calc "100 * ${MEASURED} // ${MAX}" } CHARGE=$(calc_percent now full) - COLOR=$(color_at $CHARGE "25:${COL_RED}_65:${COL_YELLOW}_100:${COL_GREEN}") + COLOR=$(color_at "${CHARGE}" "25:${COL_RED}_65:${COL_YELLOW}_100:${COL_GREEN}") print_bar_block "${CHARGE}%" "${COLOR}" 0 COLOR="${COL_WHITE}" STATUS=$(cat "${BAT_DIR}/status") - CHARGING=? + CHARGING="?" if [ "${STATUS}" = "Not charging" ]; then - CHARGING=- + CHARGING="-" elif [ "${STATUS}" = "Charging" ]; then - CHARGING=^ + CHARGING="^" COLOR="${COL_GREEN}" elif [ "${STATUS}" = "Discharging" ]; then - CHARGING=v + CHARGING="v" COLOR="${COL_YELLOW}" fi print_bar_block "${CHARGING}" "${COLOR}" 0 @@ -121,15 +142,17 @@ print_battery() { } print_temperature() { + local COLOR TEMPERATURE TEMPERATURE_IN_C COLOR="${COL_WHITE}" TEMPERATURE=$(cat ${SYSCLASS_DIR}/thermal/thermal_zone0/temp) TEMPERATURE_IN_C=$(print_calc "${TEMPERATURE} // 1000") - COLOR=$(color_at $TEMPERATURE_IN_C "65:${COL_GREEN}_85:${COL_YELLOW}_999:${COL_RED}") + COLOR=$(color_at "${TEMPERATURE_IN_C }" "65:${COL_GREEN}_85:${COL_YELLOW}_999:${COL_RED}") print_bar_block "${TEMPERATURE_IN_C}" "${COLOR}" 0 print_bar_block '°' } print_datetime() { + local DATE TIME TZ DATE=$(date +'%Y-%m-%d') TIME=$(date +'%H:%M:%S') TZ=$(date +'/%Z') @@ -139,31 +162,33 @@ print_datetime() { } print_volume() { - _print_vol() { - _NAME="$1" - _IDX="$2" - _TYPE="$3" - _BORDER="$4" - print_bar_block "$1 " "${COL_WHITE}" 0 - VOLUME="$(pactl get-${_TYPE}-volume "${_IDX}" | head -1 | sed 's/ //g' | cut -d'/' -f2)" - if $(audio_dev_is_mute "${_TYPE}" "${_IDX}"); then - print_bar_block "${VOLUME}" '' "${_BORDER}" + print_vol() { + local NAME="$1" + local IDX="$2" + local TYPE="$3" + local BORDER="$4" + local VOLUME + VOLUME="$(pactl "get-${TYPE}-volume" "${IDX}" | head -1 | sed 's/ //g' | cut -d'/' -f2)" + print_bar_block "${NAME} " "${COL_WHITE}" 0 + if $(audio_dev_is_mute "${TYPE}" "${IDX}"); then + print_bar_block "${VOLUME}" '' "${BORDER}" else - print_bar_block "${VOLUME}" "${COL_YELLOW}" "${_BORDER}" + print_bar_block "${VOLUME}" "${COL_YELLOW}" "${BORDER}" fi } - _print_vol 'vol' 0 'sink' 0 - _print_vol ' --mic' 1 'source' + print_vol 'vol' 0 'sink' 0 + print_vol ' --mic' 1 'source' } print_keyboard() { + local LAYOUT LAYOUT=$(swaymsg -t get_inputs | grep 'xkb_active_layout_name' | sed -E 's/[ ,"]+//g' | cut -d':' -f2 | head -1) if [ "${LAYOUT}" = "English(US)" ]; then - LAYOUT=us + LAYOUT="us" elif [ "${LAYOUT}" = "German" ]; then - LAYOUT=de + LAYOUT="de" else - LAYOUT=?? + LAYOUT="??" fi print_bar_block "kb_${LAYOUT}" } -- 2.30.2