diff options
-rwxr-xr-x | dwm-statusbar | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/dwm-statusbar b/dwm-statusbar new file mode 100755 index 0000000..6ebd11c --- /dev/null +++ b/dwm-statusbar @@ -0,0 +1,276 @@ +#!/usr/bin/env bash +# +# Status bar for dwm. Adapted from: +# https://github.com/w0ng/bin/blob/master/dwm-statusbar +# +# The functions are fairly system-dependent, so it is recommended to copy this file to your ~/bin (or equivalent) and make the adjustments there. + +# Colour codes from dwm/config.h +colour_faded="\x01" # grey on black +colour_neutral="\x02" # blue on black +colour_warning="\x03" # yellow on black +colour_critical="\x04" # red on black +colour_normal="\x05" # grey on black + +# The amount of spacing to use (or a spacer character, like |) +space=" " + +# Time to wait between refreshes, in seconds +refresh="5" + +# Name of the network adapters, like enp3s0 +eth_adapter="" +wlan_adapter="wlp1s0" + +print_date() { + echo -ne "${colour_normal}$(date "+%d.%m.%y")" +} + +print_time() { + time_local="$(date "+%H:%M")" + #time_us="$(TZ='US/Central' date "+%H:%M")" + time_br="$(TZ='America/Sao_Paulo' date "+%H:%M")" + + echo -ne "${colour_neutral}\uE3D2${colour_normal}${time_local}${colour_faded}${time_br}" + #echo -ne "${colour_neutral}\uE3D2${colour_normal}${time_local}" +} + +print_volume() { + # empty E022, low E023, full E024, mid E03B + volume=$(amixer get Master -M | tail -n1 | sed -r 's/.*\[(.*)%\].*/\1/') + mute="$(amixer get Master | tail -n1 | sed -r 's/.*\[(on|off)\].*/\1/')" + + if [ "$mute" == "off" ]; then + vol_colour=$colour_warning + icon_colour=$colour_warning + icon="\uE022" + else + vol_colour=$colour_normal + icon_colour=$colour_neutral + if [ $volume -eq 0 ]; then + icon="\uE022" + elif [ $volume -lt 33 ]; then + icon="\uE023" + elif [ $volume -lt 66 ]; then + icon="\uE03B" + else + icon="\uE024" + fi + fi + + echo -ne "${icon_colour}${icon}${vol_colour}${volume}%" +} + +# This is very system-dependent +print_backlight() { + # E3D8 + max_backlight=$(cat /sys/class/backlight/amdgpu_bl1/max_brightness) + let backlight="100 * $(cat /sys/class/backlight/amdgpu_bl1/brightness) / $max_backlight" + + echo -ne "${colour_neutral}\uE3D8${colour_normal}${backlight}%" +} + +# This will probably need tweaking +print_battery() { + # charging E20D, empty E20E, full E20F, 2/3 E210, 1/3 E211 + # 1 or 0 + ac_status=$(cat /sys/class/power_supply/ACAD/online) + + if [ $ac_status -eq 1 ]; then + icon_colour=$colour_neutral + if [ -d "/sys/class/power_supply/BAT1" ]; then + icon="\uE20D" + bat_colour=$colour_normal + bat_capacity="$(cat /sys/class/power_supply/BAT1/capacity)%" + else + icon="\uE257" + fi + else + bat_capacity=$(cat /sys/class/power_supply/BAT1/capacity) + if [ $bat_capacity -lt 10 ]; then + bat_colour=$colour_critical + icon_colour=$colour_critical + icon="\uE20E" + elif [ $bat_capacity -lt 35 ]; then + bat_colour=$colour_warning + icon_colour=$colour_warning + icon="\uE211" + elif [ $bat_capacity -lt 65 ]; then + bat_colour=$colour_normal + icon_colour=$colour_neutral + icon="\uE1FB" + elif [ $bat_capacity -lt 85 ]; then + bat_colour=$colour_normal + icon_colour=$colour_neutral + icon="\uE210" + else + bat_colour=$colour_normal + icon_colour=$colour_neutral + icon="\uE20F" + fi + bat_capacity="${bat_capacity}%" + fi + + echo -ne "${icon_colour}${icon}${bat_colour}${bat_capacity}" +} + +# This should work out of the box +print_root_free() { + # floppy E0C3 + root_free=$(df -kh / | awk 'NR==2 {print $4}') + root_percent=$(df -kh / | awk 'NR==2 {print $5}' | sed 's/%//g') + + if [ $root_percent -gt 90 ]; then + icon_colour=$colour_critical + root_colour=$colour_critical + elif [ $root_percent -gt 75 ]; then + icon_colour=$colour_warning + root_colour=$colour_warning + else + icon_colour=$colour_neutral + root_colour=$colour_normal + fi + + echo -ne "${icon_colour}\uE0C3${root_colour}/: ${root_free} (${root_percent}%)" +} + +# This should also work out of the box, but only makes sense if your /home is on a different partition +print_home_free() { + # floppy E0C3 + home_free=$(df -kh /home | awk 'NR==2 {print $4}') + home_percent=$(df -kh /home | awk 'NR==2 {print $5}' | sed 's/%//g') + + if [ $home_percent -gt 90 ]; then + icon_colour=$colour_critical + home_colour=$colour_critical + elif [ $home_percent -gt 75 ]; then + icon_colour=$colour_warning + home_colour=$colour_warning + else + icon_colour=$colour_neutral + home_colour=$colour_normal + fi + + echo -ne "${icon_colour}\uE0C3${home_colour}/home: ${home_free} (${home_percent}%)" +} + +# This is highly system-dependent, so use it as a template only +print_shared_free() { + # floppy E0C3 + shared_free=$(df -kh /home/eddy/shared | awk 'NR==2 {print $4}') + shared_percent=$(df -kh /home/eddy/shared | awk 'NR==2 {print $5}' | sed 's/%//g') + + if [ $shared_percent -gt 90 ]; then + icon_colour=$colour_critical + shared_colour=$colour_critical + elif [ $shared_percent -gt 75 ]; then + icon_colour=$colour_warning + shared_colour=$colour_warning + else + icon_colour=$colour_neutral + shared_colour=$colour_normal + fi + + echo -ne "${icon_colour}\uE0C3${shared_colour}/mnt/shared: ${shared_free} (${shared_percent}%)" +} + +# This should work out of the box +print_mem_free() { + mem_free="$(free -m | awk '/Mem:/ {print $7}')" + + mem_colour=$colour_normal + icon_colour=$colour_neutral + if [ $mem_free -lt 250 ]; then + mem_colour=$colour_critical + icon_colour=$colour_critical + elif [ $mem_free -lt 500 ]; then + mem_colour=$colour_warning + icon_colour=$colour_warning + fi + + echo -ne "${icon_colour}\uE28B${mem_colour}${mem_free}M" +} + +# This depends on lm_sensors and will likely need configuring +print_cpu_temp() { + cpu_temp=$(sensors -u | awk '/edge/ {getline; print $2}' | sed -r 's/([0-9]*)\.[0-9]*/\1/') + + temp_colour=$colour_normal + icon_colour=$colour_neutral + if [ $cpu_temp -gt 83 ]; then + temp_colour=$colour_critical + icon_colour=$colour_critical + elif [ $cpu_temp -gt 99 ]; then + temp_colour=$colour_warning + icon_colour=$colour_warning + fi + + echo -ne "${icon_colour}\uE3B2${temp_colour}${cpu_temp}°" +} + +# cpu (from: https://bbs.archlinux.org/viewtopic.php?pid=661641#p661641) +print_cpu_used() { + echo -ne "${colour_neutral}\uE3AF${colour_normal}${cpu_used}%" +} + +# Configure the adapter to display above +print_eth() { + eth_status=$(ip addr show dev ${eth_adapter} | awk 'NR==1 {print $9}') + + if [ "$eth_status" == "UP" ]; then + eth_ip=$(ip addr show dev ${eth_adapter} | awk 'NR==3 {print $2}' | sed -r 's/\/.*//') + icon_colour=${colour_neutral} + eth_colour=${colour_normal} + else + icon_colour=${colour_faded} + fi + + echo -ne "${icon_colour}\uE0E4${eth_colour}${eth_ip}" +} + +# Configure the adapter to display above, strength might need to be tweaked +print_wlan() { + wlan_status=$(ip addr show dev ${wlan_adapter} | awk 'NR==1 {print $9}') + + if [ "$wlan_status" == "UP" ]; then + wlan_ip=$(ip addr show dev ${wlan_adapter} | awk 'NR==3 {print $2}' | sed -r 's/\/.*//') + + let wlan_strength="10 * $(cat /proc/net/wireless | awk 'NR==3 {print substr($3, 1, 2)}') / 7" + if [ $wlan_strength -lt 25 ]; then + icon_colour=${colour_critical} + wlan_colour=${colour_critical} + elif [ $wlan_strength -lt 50 ]; then + icon_colour=${colour_warning} + wlan_colour=${colour_warning} + else + icon_colour=${colour_neutral} + wlan_colour=${colour_normal} + fi + + wlan_strength="${wlan_strength}%" + + else + icon_colour=${colour_faded} + fi + + echo -ne "${icon_colour}\uE401${wlan_colour}${wlan_ip} ${wlan_strength}" +} + +while true; do + # get new cpu idle and total usage + eval $(awk '/^cpu /{print "cpu_idle_now=" $5 "; cpu_total_now=" $2+$3+$4+$5 }' /proc/stat) + cpu_interval=$((cpu_total_now-${cpu_total_old:-0})) + # calculate cpu usage (%) + let cpu_used="100 * ($cpu_interval - ($cpu_idle_now-${cpu_idle_old:-0})) / $cpu_interval" + + # Pipe to status bar + # This is where you can adjust what gets shown by adding the desired function calls + xsetroot -name "$(print_wlan)${space}$(print_root_free)${space}$(print_home_free)${space}$(print_cpu_used)${space}$(print_cpu_temp)${space}$(print_mem_free)${space}$(print_battery)${space}$(print_backlight)${space}$(print_volume)${space}$(print_time)$(print_date)" + + # reset old rate + cpu_idle_old=$cpu_idle_now + cpu_total_old=$cpu_total_now + + # loop stats every so many seconds + sleep "${refresh}" +done |