-
Notifications
You must be signed in to change notification settings - Fork 57
/
dwm-status-refresh.sh
executable file
·166 lines (131 loc) · 4.85 KB
/
dwm-status-refresh.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/bin/bash
# Screenshot: http://s.natalian.org/2013-08-17/dwm_status.png
# Network speed stuff stolen from http://linuxclues.blogspot.sg/2009/11/shell-script-show-network-speed.html
# This function parses /proc/net/dev file searching for a line containing $interface data.
# Within that line, the first and ninth numbers after ':' are respectively the received and transmited bytes.
function get_bytes {
# Find active network interface
interface=$(ip route get 8.8.8.8 2>/dev/null| awk '{print $5}')
line=$(grep $interface /proc/net/dev | cut -d ':' -f 2 | awk '{print "received_bytes="$1, "transmitted_bytes="$9}')
eval $line
now=$(date +%s%N)
}
# Function which calculates the speed using actual and old byte number.
# Speed is shown in KByte per second when greater or equal than 1 KByte per second.
# This function should be called each second.
function get_velocity {
value=$1
old_value=$2
now=$3
timediff=$(($now - $old_time))
velKB=$(echo "1000000000*($value-$old_value)/1024/$timediff" | bc)
if test "$velKB" -gt 1024
then
echo $(echo "scale=2; $velKB/1024" | bc)MB/s
else
echo ${velKB}KB/s
fi
}
# Get initial values
get_bytes
old_received_bytes=$received_bytes
old_transmitted_bytes=$transmitted_bytes
old_time=$now
print_volume() {
volume="$(amixer get Master | tail -n1 | sed -r 's/.*\[(.*)%\].*/\1/')"
if test "$volume" -gt 0
then
echo -e "\uE05D${volume}"
else
echo -e "Mute"
fi
}
print_mem(){
memfree=$(($(grep -m1 'MemAvailable:' /proc/meminfo | awk '{print $2}') / 1024))
echo -e "$memfree"
}
print_temp(){
test -f /sys/class/thermal/thermal_zone0/temp || return 0
echo $(head -c 2 /sys/class/thermal/thermal_zone0/temp)C
}
#!/bin/bash
get_time_until_charged() {
# parses acpitool's battery info for the remaining charge of all batteries and sums them up
sum_remaining_charge=$(acpitool -B | grep -E 'Remaining capacity' | awk '{print $4}' | grep -Eo "[0-9]+" | paste -sd+ | bc);
# finds the rate at which the batteries being drained at
present_rate=$(acpitool -B | grep -E 'Present rate' | awk '{print $4}' | grep -Eo "[0-9]+" | paste -sd+ | bc);
# divides current charge by the rate at which it's falling, then converts it into seconds for `date`
seconds=$(bc <<< "scale = 10; ($sum_remaining_charge / $present_rate) * 3600");
# prettifies the seconds into h:mm:ss format
pretty_time=$(date -u -d @${seconds} +%T);
echo $pretty_time;
}
get_battery_combined_percent() {
# get charge of all batteries, combine them
total_charge=$(expr $(acpi -b | awk '{print $4}' | grep -Eo "[0-9]+" | paste -sd+ | bc));
# get amount of batteries in the device
battery_number=$(acpi -b | wc -l);
percent=$(expr $total_charge / $battery_number);
echo $percent;
}
get_battery_charging_status() {
if $(acpi -b | grep --quiet Discharging)
then
echo "🔋";
else # acpi can give Unknown or Charging if charging, https://unix.stackexchange.com/questions/203741/lenovo-t440s-battery-status-unknown-but-charging
echo "🔌";
fi
}
print_bat(){
#hash acpi || return 0
#onl="$(grep "on-line" <(acpi -V))"
#charge="$(awk '{ sum += $1 } END { print sum }' /sys/class/power_supply/BAT*/capacity)%"
#if test -z "$onl"
#then
## suspend when we close the lid
##systemctl --user stop inhibit-lid-sleep-on-battery.service
#echo -e "${charge}"
#else
## On mains! no need to suspend
##systemctl --user start inhibit-lid-sleep-on-battery.service
#echo -e "${charge}"
#fi
#echo "$(get_battery_charging_status) $(get_battery_combined_percent)%, $(get_time_until_charged )";
echo "$(get_battery_charging_status) $(get_battery_combined_percent)%, $(get_time_until_charged )";
}
print_date(){
date '+%Y年%m月%d日 %H:%M'
}
show_record(){
test -f /tmp/r2d2 || return
rp=$(cat /tmp/r2d2 | awk '{print $2}')
size=$(du -h $rp | awk '{print $1}')
echo " $size $(basename $rp)"
}
LOC=$(readlink -f "$0")
DIR=$(dirname "$LOC")
export IDENTIFIER="unicode"
#. "$DIR/dwmbar-functions/dwm_transmission.sh"
#. "$DIR/dwmbar-functions/dwm_cmus.sh"
#. "$DIR/dwmbar-functions/dwm_resources.sh"
#. "$DIR/dwmbar-functions/dwm_battery.sh"
#. "$DIR/dwmbar-functions/dwm_mail.sh"
#. "$DIR/dwmbar-functions/dwm_backlight.sh"
. "$DIR/dwmbar-functions/dwm_alsa.sh"
#. "$DIR/dwmbar-functions/dwm_pulse.sh"
#. "$DIR/dwmbar-functions/dwm_weather.sh"
#. "$DIR/dwmbar-functions/dwm_vpn.sh"
#. "$DIR/dwmbar-functions/dwm_network.sh"
#. "$DIR/dwmbar-functions/dwm_keyboard.sh"
#. "$DIR/dwmbar-functions/dwm_ccurse.sh"
#. "$DIR/dwmbar-functions/dwm_date.sh"
get_bytes
# Calculates speeds
vel_recv=$(get_velocity $received_bytes $old_received_bytes $now)
vel_trans=$(get_velocity $transmitted_bytes $old_transmitted_bytes $now)
xsetroot -name " 💿 $(print_mem)M ⬇️ $vel_recv ⬆️ $vel_trans $(dwm_alsa) [ $(print_bat) ]$(show_record) $(print_date) "
# Update old values to perform new calculations
old_received_bytes=$received_bytes
old_transmitted_bytes=$transmitted_bytes
old_time=$now
exit 0