System monitor extension for Argos with real CPU graph
2 |
3 | This extension created specially for [Argos](https://github.com/p-e-w/argos) and linux-powered computers w/ GNOME shell.
4 | This script uses power of SVG to draw charts.
5 |
6 | As you see at screenshot, CPU chart has 3 colors: green for iowait consumption, dark grey for user comsumption, and light gray for overall CPU consumption.
7 |
8 | Please note that the CPU consumption is approximate. It calculates by **/proc/stat** output, also as memory by **free**, temperature by **/sys/class/thermal/thermal_zone0/temp** and disks by **df** outputs.
9 |
10 |
Known bugs
11 |
12 | Different configurations of **top** utility doesn't allow to show processes list (see opened issue here).
13 | To fix this, open script in text editor and replace `$9 / 2` to `$7 / 2`. Also you may need to change `head -n 10` to `head -n 13`. Also, you may need to change number of CPU cores (2, 4).
14 | In further releases I will fix this by more elegant way.
15 |
16 |
Screenshot
17 |
18 |
19 |
20 |
License
21 | GNU GPL v3.0 - https://www.gnu.org/licenses/gpl-3.0.en.html
22 |
23 |
24 |
--------------------------------------------------------------------------------
/sysinfo.2s.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # This script designed for Argos extension (https://extensions.gnome.org/extension/1176/argos/)
4 | # and allows informing on current CPU and memory consumption,
5 | # IP address, ping to up to two servers, temperature, uptime, disks and processes.
6 |
7 | # In order to properly work you need to set the number of CPU cores (see below) and adjust the size of the graphs
8 | # depending on your screen size.
9 |
10 | # Go to line 257 and set your number.
11 | # XXX must be equal to the number of CPU cores: '...{ printf("%-4s %-s\n", $9 / XXX, $NF); }...'
12 |
13 | # Based on Ganesh V BitBar script (https://github.com/ganeshv/mtop)
14 | # and Leo-G script (https://github.com/Leo-G/DevopsWiki/wiki/How-Linux-CPU-Usage-Time-and-Percentage-is-calculated)
15 | # Author: fadeouter (https://github.com/fadeouter/)
16 |
17 |
18 | vpn_ip="1.2.3.4" # IP address to be hidden from menu bar if it equals to $vpn_ip
19 | ping_1_name="GOOG"
20 | ping_2_name="CLFL"
21 | ping_1_addr="8.8.8.8"
22 | ping_2_addr="1.1.1.1"
23 |
24 |
25 | graphWidth="32" # CPU chart width in pixels, also a number of chart points
26 | scale="2" # if you have HIDPI screen, set appropriate coeff. for scaling
27 | svg_font_family="Ubuntu" # set as GNOME Shell theme font
28 | symbolic="-symbolic" # if "-symbolic" set, then monocolor icons used
29 |
30 |
31 | ### THEME COLORS
32 |
33 | chart_system_color="silver" # CPU chart main color
34 | chart_user_color="#324f5c" # user processes color on chart
35 | chart_io_color="#3bef3b" # I/O processes color on chart
36 |
37 | pie_fg_color="grey" # memory pie foreground color
38 | pie_bg_color="transparent" # memory pie background color
39 | text_muted="#333" # font color of partition mountpoint
40 |
41 |
42 | ### SIZES AND POSITION OF SVG OBJECTS (not need to change this)
43 |
44 | icon_h=$(expr 17 \* $scale)
45 | graph_h=$(expr 15 \* $scale)
46 | graph_svg_w=$(expr $graphWidth + 14)
47 | mem_bar_pos=$(expr $graphWidth + 5)
48 | px='px'
49 |
50 |
51 |
52 |
53 |
54 |
55 | ################################################################
56 | #
57 | # 01. Memory graph calculation
58 | #
59 | ################################################################
60 |
61 | raw_mem=$(free -m | grep Mem)
62 | mem_used=$(echo $raw_mem | awk '{print $2 - $7}')
63 | mem_full=$(echo $raw_mem | awk '{print $2}')
64 | memPercent=$(echo $raw_mem | awk '{print ($3 / $2) * 100 }')
65 | memPercentPie=$(echo $raw_mem | awk '{print 174 + (($3 / $2) * 174) }' | sed s/\,/\./)
66 |
67 | raw_swap=$(free -m | grep Swap)
68 | swap_used=$(echo $raw_swap | awk '{print $3}')
69 | swap_full=$(echo $raw_swap | awk '{print $2}')
70 | swapPercent=$(echo $raw_swap | awk '{print ($3 / $2) * 100 }')
71 | swapPercentPie=$(echo $raw_swap | awk '{print 174 + (($3 / $2) * 174) }' | sed s/\,/\./)
72 |
73 | mempie=$(echo "" | base64 -w 0)
74 |
75 | swappie=$(echo "" | base64 -w 0)
76 |
77 |
78 |
79 | ################################################################
80 | #
81 | # 02. CPU graph calculation
82 | #
83 | ################################################################
84 |
85 |
86 |
87 | HISTORY_FILE="${HOME}/.argos-sysinfo.cpu"
88 | touch "${HISTORY_FILE}"
89 | PREVIOUS=$(tail -$graphWidth "${HISTORY_FILE}")
90 | PREV=$(tail -n 1 "${HISTORY_FILE}")
91 | echo "$PREVIOUS" > "${HISTORY_FILE}"
92 |
93 | if [$PREV == '']; then
94 | PREV="0 0 0 0"
95 | fi
96 |
97 | PREV_TOTAL=$(echo $PREV | awk '{print $1}' )
98 | PREV_IDLE=$(echo $PREV | awk '{print $2}' )
99 | PREV_USER=$(echo $PREV | awk '{print $3}' )
100 | PREV_IO=$(echo $PREV | awk '{print $4}' )
101 |
102 | STAT=(`sed -n 's/^cpu\s//p' /proc/stat`)
103 | IDLE=${STAT[3]}
104 |
105 | TOTAL=0
106 | for VALUE in "${STAT[@]}"; do
107 | let "TOTAL=$TOTAL+$VALUE"
108 | done
109 |
110 | let "USER=$TOTAL-${STAT[0]}"
111 | let "IO=$TOTAL-${STAT[4]}"
112 | let "DIFF_IDLE=$IDLE-$PREV_IDLE"
113 | let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
114 | let "DIFF_USER=$USER-$PREV_USER"
115 | let "DIFF_IO=$IO-$PREV_IO"
116 | let "CPU=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
117 | let "CPU_USER=CPU-((1000*($DIFF_USER-$DIFF_IDLE)/$DIFF_USER+5)/10)"
118 | let "CPU_IO=CPU-((1000*($DIFF_IO-$DIFF_IDLE)/$DIFF_IO+5)/10)"
119 |
120 |
121 | echo "$TOTAL $IDLE $USER $IO $CPU $CPU_USER $CPU_IO" >> "${HISTORY_FILE}"
122 |
123 |
124 | COUNTER=0
125 | while [ $COUNTER -lt $graphWidth ]; do
126 | fullCpuBar=$(sed -n $COUNTER\p ${HISTORY_FILE} | awk '{print $5}')
127 | ioCpuBar=$(sed -n $COUNTER\p ${HISTORY_FILE} | awk '{print ($5-$7)}')
128 | userCpuBar=$(sed -n $COUNTER\p ${HISTORY_FILE} | awk '{print $6}')
129 | old_string=$svg_string
130 | new_string=""
131 | svg_string=$old_string$new_string
132 | let COUNTER=COUNTER+1
133 | done
134 |
135 | cpu_icon=$(echo "" | base64 -w 0)
140 |
141 |
142 | ################################################################
143 | #
144 | # 03. IP info
145 | #
146 | ################################################################
147 |
148 | EXTERNAL_IP_DIG=$(dig +short myip.opendns.com @resolver1.opendns.com)
149 | #EXTERNAL_IP_DIG2=$(dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | egrep -o '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+/[0-9]+')
150 | PING_1=$(ping -i 1 -c 1 $ping_1_addr | tail -1 | awk '{print $4}' | cut -d '/' -f 2 | cut -d "." -f1)
151 | PING_2=$(ping -i 1 -c 1 $ping_2_addr | tail -1 | awk '{print $4}' | cut -d '/' -f 2 | cut -d "." -f1)
152 |
153 |
154 | if [ "$EXTERNAL_IP_DIG" = "" ]; then
155 | EXTERNAL_IP_DIG=$(dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | egrep -o '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+/[0-9]+')
156 | fi
157 |
158 |
159 | if [ "$EXTERNAL_IP_DIG" = $vpn_ip ]; then
160 | echo "| image=$cpu_icon imageHeight=$graph_h imageWidth=$graph_svg_w"
161 | echo "---"
162 | echo "IP \t\t$EXTERNAL_IP_DIG | iconName=network-transmit-receive imageHeight=$icon_h"
163 | else
164 | EXTERNAL_IP_CUT=$( echo "$EXTERNAL_IP_DIG" | cut -d "." -f1-2)
165 | echo "$EXTERNAL_IP_CUT| image=$cpu_icon imageHeight=$graph_h imageWidth=$graph_svg_w"
166 | echo "---"
167 | echo "IP\t\t$EXTERNAL_IP_DIG | iconName=network-transmit-receive imageHeight=$icon_h"
168 | fi
169 |
170 | echo "$ping_1_name\t$PING_1 ms | iconName=view-more-horizontal-symbolic imageHeight=$icon_h"
171 | echo "$ping_2_name\t$PING_2 ms | iconName=view-more-horizontal-symbolic imageHeight=$icon_h"
172 | wait
173 |
174 | echo "---"
175 |
176 |
177 | ################################################################
178 | #
179 | # 04. Memory piecharts
180 | #
181 | ################################################################
182 |
183 | echo "Mem \t${mem_used%%.*} / ${mem_full%%.*} MiB | image=$mempie imageHeight=$icon_h"
184 |
185 | if [ ${swap_used%%.*} != 0 ]; then
186 | echo "Swap\t${swap_used%%.*} / ${swap_full%%.*} MiB | image=$swappie imageHeight=$icon_h"
187 | fi
188 |
189 |
190 |
191 | ################################################################
192 | #
193 | # 03. Temperature
194 | #
195 | ################################################################
196 |
197 | temp=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000 }')
198 |
199 |
200 | echo "Temp\t$temp C°| imageHeight=$icon_h image=PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMzUuNDY2NjcgMTM1LjQ2NjY3JyBoZWlnaHQ9JzY0JyB3aWR0aD0nNjQnPjxkZWZzPjxtYXJrZXIgb3JpZW50PSdhdXRvJyBpZD0nYicgb3ZlcmZsb3c9J3Zpc2libGUnPjxwYXRoIGQ9J00uOTggMGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDB6JyBmaWxsPScjZjU1JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnIHN0cm9rZT0nI2Y1NScgc3Ryb2tlLXdpZHRoPScuMjY3Jy8+PC9tYXJrZXI+PG1hcmtlciBvcmllbnQ9J2F1dG8nIGlkPSdhJyBvdmVyZmxvdz0ndmlzaWJsZSc+PHBhdGggZD0nTS45OCAwYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMHonIGZpbGw9JyNjY2MnIGZpbGwtcnVsZT0nZXZlbm9kZCcgc3Ryb2tlPScjY2NjJyBzdHJva2Utd2lkdGg9Jy4yNjcnLz48L21hcmtlcj48L2RlZnM+PGcgc3Ryb2tlLXdpZHRoPScxNC43NzknPjxwYXRoIGQ9J002Ni4zNzggMTEyLjU5NmMuMDEzLTMxLjcyNi4wMjctNS42My4wNC05NS4yMzUnIGZpbGw9JyNjY2MnIHN0cm9rZT0nI2NjYycgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBtYXJrZXItc3RhcnQ9J3VybCgjYSknIHRyYW5zZm9ybT0ndHJhbnNsYXRlKC0xLjE4MiAtNC42ODcpIHNjYWxlKDEuMDM4MjQpJy8+PHBhdGggZD0nTTY2LjM3OCAxMTIuNTk2Yy4wMi0xNi4zMzguMDQtMi45LjA2LTQ5LjA0MycgZmlsbD0nI2Y1NScgc3Ryb2tlPScjZjU1JyBtYXJrZXItc3RhcnQ9J3VybCgjYiknIHRyYW5zZm9ybT0ndHJhbnNsYXRlKC0xLjE4MiAtNC42ODcpIHNjYWxlKDEuMDM4MjQpJy8+PC9nPjwvc3ZnPgo=c@t"
201 |
202 |
203 | ################################################################
204 | #
205 | # 04. Uptime
206 | #
207 | ################################################################
208 |
209 | up=$(uptime | sed 's/,.*//' | sed 's/.*up//' | xargs)
210 | echo "Time\t$up | iconName=preferences-system-time$symbolic"
211 | echo "---"
212 |
213 | ################################################################
214 | #
215 | # 05. Disk
216 | #
217 | ################################################################
218 |
219 |
220 | OLDIFS=$IFS
221 | name=()
222 | used=()
223 | free=()
224 | cap=()
225 | capacity=()
226 | disk_icon="drive-harddisk-system$symbolic"
227 |
228 | get_disk_stats() {
229 | local IFS=$'\n'
230 | local i dfdata
231 |
232 | dfdata=($(df -lH | grep "/dev/mapper*\|/dev/sd*\|/dev/dm*\|/dev/nvme*" | grep -v "/boot\|/shm" ))
233 |
234 | IFS=$OLDIFS
235 | for ((i = 0; i < ${#dfdata[@]}; i++)); do
236 | line=(${dfdata[$i]})
237 | name+=("${line[5]}")
238 | cap+=("${line[1]}")
239 | usedcap+=("${line[3]/\G}")
240 | free+=("${line[4]}")
241 | capacity+=("${line[4]/\%}")
242 | done
243 | }
244 |
245 | get_disk_stats
246 |
247 |
248 | for ((i = 0; i < ${#capacity[@]}; i++)); do
249 |
250 | if [[ ${name[$i]} = \/media* ]]; then
251 | disk_icon="drive-removable-media$symbolic"
252 | fi
253 |
254 | echo "${usedcap[$i]}Gb ${free[$i]}${cap[$i]}${name[$i]}| iconName=$disk_icon imageHeight=$diskbar_h bash=baobab terminal=false font='monospace' size=8"
255 | done
256 |
257 | ################################################################
258 | #
259 | # 6. Process list
260 | #
261 | ################################################################
262 |
263 | top=$(top -o "%CPU" -bn 1 | head -n 14 | tail -n 7 | awk '{ printf("%1.0f %s\n", $9 / 8, $NF); }' | awk 1 ORS="\\\n") # set here number of CPU cores
264 | echo "---"
265 | echo "$top| font='monospace' size=8 bash=gnome-system-monitor terminal=false iconName=view-restore-symbolic"
266 |
267 | echo "---"
268 | echo "Update| refresh=true iconName=view-refresh-symbolic"
269 |
270 |
271 |
--------------------------------------------------------------------------------
/sysinfo.1s.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # this is simple and usable script from a newbie
4 | # based on some findings on the internet
5 | # based on Ganesh V BitBar script (https://github.com/ganeshv/mtop)
6 | # and Leo-G script (https://github.com/Leo-G/DevopsWiki/wiki/How-Linux-CPU-Usage-Time-and-Percentage-is-calculated)
7 | # author: fadeouter (https://github.com/fadeouter/)
8 |
9 |
10 |
11 | # IMPORTANT! Go to line 114 and set your number of CPU cores
12 |
13 | graphWidth="50" # CPU chart width in pixels, also a number of chart points
14 | scale="1" # if you have HIDPI screen, set appropriate coeff. for scaling
15 | svg_font_size="9" # probably you won't change this
16 | svg_font_family="Ubuntu" # set as GNOME Shell theme font
17 | symbolic=""
18 | #symbolic="-symbolic" # uncomment to use monocolor icons
19 |
20 |
21 | ### LIGHT THEME (swap with DARK THEME to enable)
22 |
23 | chart_system_color="silver" # CPU chart main color
24 | chart_user_color="dimgray" # CPU chart main color
25 | chart_io_color="greenyellow" # CPU chart main color
26 |
27 | pie_fg_color=$chart_user_color # pie foreground color
28 | pie_bg_color=$chart_system_color # pie background color
29 | text_muted=$chart_user_color # font color of partition mountpoint
30 | diskbar_font="#333333" # font color of disk used space
31 | diskbar_font_highlighted="green" # font color of disk free space
32 | diskbar_bg_color=$pie_bg_color # disk bar bg color
33 |
34 |
35 | ### DARK THEME
36 |
37 | chart_system_color="silver" # CPU chart main color
38 | chart_user_color="dimgray" # CPU chart main color
39 | chart_io_color="greenyellow" # CPU chart main color
40 |
41 | pie_fg_color=$chart_user_color # pie foreground color
42 | pie_bg_color=$chart_system_color # pie background color
43 | text_muted=$chart_user_color # font color of partition mountpoint
44 | diskbar_font="#ffffff" # font color of disk used space
45 | diskbar_font_highlighted="#7eff35" # font color of disk free space
46 | diskbar_bg_color=$pie_bg_color # disk bar bg color
47 |
48 |
49 | ### SIZES AND POSITION OF SVG OBJECTS
50 |
51 | icon_h=$(expr 12 \* $scale)
52 | graph_h=$(expr 14 \* $scale)
53 | graph_svg_w=$(expr $graphWidth + 14)
54 | mem_bar_pos=$(expr $graphWidth + 5)
55 | diskbar_h=$(expr 18 \* $scale)
56 | diskbar_w=$(expr 120 \* $scale)
57 | px='px'
58 |
59 |
60 | ################################################################
61 | #
62 | # 0. Settings
63 | #
64 | ################################################################
65 |
66 |
67 | SETTINGS="${HOME}/.argos-sysinfo.settings"
68 |
69 | if [ ! -f "${SETTINGS}" ]; then
70 | touch "${SETTINGS}"
71 | echo "%on" > "${SETTINGS}"
72 | echo "memon" >> "${SETTINGS}"
73 | fi
74 |
75 | showPercents=$(grep -E "(%on|%off)" ${SETTINGS})
76 | showMembar=$(grep -E "(memon|memoff)" ${SETTINGS})
77 |
78 |
79 | if [ "$showMembar" == "memoff" ]; then
80 | graph_svg_w=$graphWidth
81 | fi
82 |
83 |
84 | ################################################################
85 | #
86 | # 01. Memory
87 | #
88 | ################################################################
89 |
90 | raw_mem=$(free -m | grep Mem)
91 | mem_used=$(echo $raw_mem | awk '{print $2 - $7}')
92 | mem_full=$(echo $raw_mem | awk '{print $2}')
93 | memPercent=$(echo $raw_mem | awk '{print ($3 / $2) * 100 }')
94 | memPercentPie=$(echo $raw_mem | awk '{print 174 + (($3 / $2) * 174) }')
95 |
96 | raw_swap=$(free -m | grep Swap)
97 | swap_used=$(echo $raw_swap | awk '{print $3}')
98 | swap_full=$(echo $raw_swap | awk '{print $2}')
99 | swapPercent=$(echo $raw_swap | awk '{print ($3 / $2) * 100 }')
100 | swapPercentPie=$(echo $raw_swap | awk '{print 174 + (($3 / $2) * 174) }')
101 |
102 | mempie=$(echo "" | base64 -w 0)
103 |
104 | swappie=$(echo "" | base64 -w 0)
105 |
106 |
107 |
108 | ################################################################
109 | #
110 | # 02. CPU graph calculation
111 | #
112 | ################################################################
113 |
114 | # XXX must be equal to number of CPU cores: '...{ printf("%-4s %-s\n", $9 / XXX, $NF); }...'
115 | top=$(top -o "%CPU" -bn 1 | head -n 14 | tail -n 7 | awk '{ printf("%-4s %-s\n", $9 / 4, $NF); }' | awk 1 ORS="\\\n")
116 |
117 | HISTORY_FILE="${HOME}/.argos-sysinfo.cpu"
118 | touch "${HISTORY_FILE}"
119 | PREVIOUS=$(tail -$graphWidth "${HISTORY_FILE}")
120 | PREV=$(tail -n 1 "${HISTORY_FILE}")
121 | echo "$PREVIOUS" > "${HISTORY_FILE}"
122 |
123 | if [$PREV == '']; then
124 | PREV="0 0 0 0"
125 | fi
126 |
127 | PREV_TOTAL=$(echo $PREV | awk '{print $1}' )
128 | PREV_IDLE=$(echo $PREV | awk '{print $2}' )
129 | PREV_USER=$(echo $PREV | awk '{print $3}' )
130 | PREV_IO=$(echo $PREV | awk '{print $4}' )
131 |
132 | STAT=(`sed -n 's/^cpu\s//p' /proc/stat`)
133 | IDLE=${STAT[3]}
134 |
135 | TOTAL=0
136 | for VALUE in "${STAT[@]}"; do
137 | let "TOTAL=$TOTAL+$VALUE"
138 | done
139 |
140 | let "USER=$TOTAL-${STAT[0]}"
141 | let "IO=$TOTAL-${STAT[4]}"
142 | let "DIFF_IDLE=$IDLE-$PREV_IDLE"
143 | let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
144 | let "DIFF_USER=$USER-$PREV_USER"
145 | let "DIFF_IO=$IO-$PREV_IO"
146 | let "CPU=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
147 | let "CPU_USER=CPU-((1000*($DIFF_USER-$DIFF_IDLE)/$DIFF_USER+5)/10)"
148 | let "CPU_IO=CPU-((1000*($DIFF_IO-$DIFF_IDLE)/$DIFF_IO+5)/10)"
149 |
150 |
151 | echo "$TOTAL $IDLE $USER $IO $CPU $CPU_USER $CPU_IO" >> "${HISTORY_FILE}"
152 |
153 |
154 | COUNTER=0
155 | while [ $COUNTER -lt $graphWidth ]; do
156 | fullCpuBar=$(sed -n $COUNTER\p ${HISTORY_FILE} | awk '{print $5}')
157 | ioCpuBar=$(sed -n $COUNTER\p ${HISTORY_FILE} | awk '{print ($5-$7)}')
158 | userCpuBar=$(sed -n $COUNTER\p ${HISTORY_FILE} | awk '{print $6}')
159 | old_string=$svg_string
160 | new_string=""
161 | svg_string=$old_string$new_string
162 | let COUNTER=COUNTER+1
163 | done
164 |
165 | cpu_icon=$(echo "" | base64 -w 0)
170 |
171 |
172 |
173 | ################################################################
174 | #
175 | # 03. Temperature
176 | #
177 | ################################################################
178 |
179 | temp=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000 }')
180 |
181 |
182 |
183 | ################################################################
184 | #
185 | # 04. Output
186 | #
187 | ################################################################
188 |
189 | IMAGE_CPU="$CPU%"
190 |
191 | if [ "$showPercents" == "%off" ]; then
192 | IMAGE_CPU=''
193 | fi
194 |
195 |
196 | echo "$IMAGE_CPU| image=$cpu_icon imageHeight=$graph_h imageWidth=$graph_svg_w"
197 |
198 | echo "---"
199 |
200 | echo "CPU \t$CPU% | iconName=utilities-system-monitor"
201 | echo "Mem\t${mem_used%%.*} / ${mem_full%%.*} MiB | image=$mempie imageHeight=$icon_h"
202 | echo "Swap\t${swap_used%%.*} / ${swap_full%%.*} MiB | image=$swappie imageHeight=$icon_h"
203 | echo "Temp\t$temp C° | imageHeight=$icon_h image=PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMzUuNDY2NjcgMTM1LjQ2NjY3JyBoZWlnaHQ9JzY0JyB3aWR0aD0nNjQnPjxkZWZzPjxtYXJrZXIgb3JpZW50PSdhdXRvJyBpZD0nYicgb3ZlcmZsb3c9J3Zpc2libGUnPjxwYXRoIGQ9J00uOTggMGExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDB6JyBmaWxsPScjZjU1JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnIHN0cm9rZT0nI2Y1NScgc3Ryb2tlLXdpZHRoPScuMjY3Jy8+PC9tYXJrZXI+PG1hcmtlciBvcmllbnQ9J2F1dG8nIGlkPSdhJyBvdmVyZmxvdz0ndmlzaWJsZSc+PHBhdGggZD0nTS45OCAwYTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMHonIGZpbGw9JyNjY2MnIGZpbGwtcnVsZT0nZXZlbm9kZCcgc3Ryb2tlPScjY2NjJyBzdHJva2Utd2lkdGg9Jy4yNjcnLz48L21hcmtlcj48L2RlZnM+PGcgc3Ryb2tlLXdpZHRoPScxNC43NzknPjxwYXRoIGQ9J002Ni4zNzggMTEyLjU5NmMuMDEzLTMxLjcyNi4wMjctNS42My4wNC05NS4yMzUnIGZpbGw9JyNjY2MnIHN0cm9rZT0nI2NjYycgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBtYXJrZXItc3RhcnQ9J3VybCgjYSknIHRyYW5zZm9ybT0ndHJhbnNsYXRlKC0xLjE4MiAtNC42ODcpIHNjYWxlKDEuMDM4MjQpJy8+PHBhdGggZD0nTTY2LjM3OCAxMTIuNTk2Yy4wMi0xNi4zMzguMDQtMi45LjA2LTQ5LjA0MycgZmlsbD0nI2Y1NScgc3Ryb2tlPScjZjU1JyBtYXJrZXItc3RhcnQ9J3VybCgjYiknIHRyYW5zZm9ybT0ndHJhbnNsYXRlKC0xLjE4MiAtNC42ODcpIHNjYWxlKDEuMDM4MjQpJy8+PC9nPjwvc3ZnPgo=c@t"
204 |
205 | echo "---"
206 |
207 | echo "$top| font=monospace size=9 iconName=utilities-system-monitor$symbolic bash=gnome-system-monitor terminal=false"
208 |
209 |
210 |
211 | ################################################################
212 | #
213 | # 05. Disk
214 | #
215 | ################################################################
216 |
217 | OLDIFS=$IFS
218 | name=()
219 | used=()
220 | free=()
221 | cap=()
222 | capacity=()
223 |
224 | get_disk_stats() {
225 | local IFS=$'\n'
226 | local i dfdata
227 |
228 | dfdata=($(df -lH | grep "/dev/mapper*\|/dev/sd*" | grep -v "/boot\|/shm" ))
229 |
230 | IFS=$OLDIFS
231 | for ((i = 0; i < ${#dfdata[@]}; i++)); do
232 | line=(${dfdata[$i]})
233 | name+=("${line[5]}")
234 | cap+=("${line[1]}")
235 | used+=("${line[2]}")
236 | free+=("${line[3]}")
237 | capacity+=("${line[4]/\%}")
238 | done
239 | }
240 |
241 | get_disk_stats
242 |
243 | height="10"
244 | disk_icon="drive-harddisk-system$symbolic"
245 |
246 | for ((i = 0; i < ${#capacity[@]}; i++)); do
247 |
248 | if [[ ${name[$i]} = \/media* ]]; then
249 | disk_icon="drive-removable-media$symbolic"
250 | fi
251 | echo "---"
252 | echo "${cap[$i]} ${name[$i]} | iconName=$disk_icon imageHeight=$icon_h length=20 bash='nautilus ${name[$i]}' terminal=false"
253 | #echo "${used[$i]} / ${free[$i]} (${capacity[$i]} %)| refresh=false iconName=image-filter$symbolic"
254 | diskbar_green=$(echo ${capacity[$i]} | awk '{print 255 - $0 * 2.55 }' | awk '{ printf("%.0f\n", $1); }')
255 | diskbar_red=$(echo ${capacity[$i]} | awk '{print $0 * 2.55 }' | awk '{ printf("%.0f\n", $1); }')
256 | diskbar_color="rgba($diskbar_red,$diskbar_green,0,0.7)"
257 | diskbar=$(echo "" | base64 -w 0)
258 | echo "|image=$diskbar iconName=baobab$symbolic imageHeight=$diskbar_h"
259 | done
260 |
261 |
262 | ################################################################
263 | #
264 | # 6. Settings rendering
265 | #
266 | ################################################################
267 |
268 |
269 | echo "---"
270 | echo "Settings | iconName=gnome-settings$symbolic"
271 |
272 | slon="PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDM3MCAzNzAnPjxwYXRoIGQ9J00yNzMgODhIOTdjLTUzLjUgMC05NyA0My42LTk3IDk3czQzLjUgOTcgOTcgOTdoMTc2YzUzLjUgMCA5Ny00My42IDk3LTk3cy00My41LTk3LTk3LTk3em0tMTE3LjYgOTdjMCAyOC44LTIzLjQgNTIuMi01Mi4yIDUyLjItMjguOCAwLTUyLjItMjMuNC01Mi4yLTUyLjIgMC0yOC44IDIzLjQtNTIuMiA1Mi4yLTUyLjIgMjguOCAwIDUyLjIgMjMuNCA1Mi4yIDUyLjJ6JyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgzNzAsIDApIHNjYWxlKC0xLCAxKScgZmlsbD0nZ3JlZW4nIC8+PC9zdmc+Cg=="
273 | sloff="PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDM3MCAzNzAnPjxwYXRoIGQ9J00yNzMgODhIOTdjLTUzLjUgMC05NyA0My42LTk3IDk3czQzLjUgOTcgOTcgOTdoMTc2YzUzLjUgMCA5Ny00My42IDk3LTk3cy00My41LTk3LTk3LTk3em0tMTE3LjYgOTdjMCAyOC44LTIzLjQgNTIuMi01Mi4yIDUyLjItMjguOCAwLTUyLjItMjMuNC01Mi4yLTUyLjIgMC0yOC44IDIzLjQtNTIuMiA1Mi4yLTUyLjIgMjguOCAwIDUyLjIgMjMuNCA1Mi4yIDUyLjJ6JyBmaWxsPSdyZWQnIC8+PC9zdmc+Cg=="
274 |
275 |
276 | if [ "$showPercents" == "%on" ]; then
277 | echo "--Show CPU usage | refresh=true bash='sed -i -e s/%on/%off/g ${SETTINGS}' terminal=false image=$slon"
278 | elif [ "$showPercents" == "%off" ]; then
279 | echo "--Show CPU usage | refresh=true bash='sed -i -e s/%off/%on/g ${SETTINGS}' terminal=false image=$sloff"
280 | fi
281 |
282 |
283 | if [ "$showMembar" == "memon" ]; then
284 | echo "--Show memory bars | refresh=true bash='sed -i -e s/memon/memoff/g ${SETTINGS}' terminal=false image=$slon"
285 | elif [ "$showMembar" == "memoff" ]; then
286 | echo "--Show memory bars | refresh=true bash='sed -i -e s/memoff/memon/g ${SETTINGS}' terminal=false image=$sloff"
287 | fi
288 |
289 |
290 |
291 |
292 |
--------------------------------------------------------------------------------