├── README.md └── i3b-gate /README.md: -------------------------------------------------------------------------------- 1 | # i3Blocks Gate 2 | 3 | Is a all in one collection of small script show you useful information about your system 4 | 5 | ## Installation requires: 6 | * Font Awesome 7 | * lm-senser 8 | * alsa-utils 9 | * pulseaudio 10 | * acpi 11 | * mpd 12 | * mpc 13 | * ncmpcpp 14 | * moc 15 | * sysstat 16 | * cmus 17 | * xprop 18 | * Networkmanager 19 | 20 | --- 21 | ## Help Dialog 22 | ``` 23 | there is 38 deffirent script to use 24 | 25 | Almost all script use the same syntax 26 | i3b-gate [NUMBER] [ICON] 27 | 28 | Except : 29 | 7 : i3b-gate 7 [MOINT_POINT] [ICON] 30 | 12 : i3b-gate 12 [NUMBER] [ICON] 31 | 32 | No Argument : 33 | 6 : You give no argumment 34 | 18 : You give no argumment 35 | 37 : You give no argumment 36 | 39 : You give no argumment 37 | 38 | Explaine : 39 | If you use 37, you get a status line about all workspaces u used on i3 40 | 37 don't show you the None used Workspace 41 | 42 | Example : [1] 2 [*3] 43 | 44 | [1] : Unfocued Workspaces 45 | 2 : the focused Workspace 46 | [*3] : The Urgent workspace 47 | 48 | each 39 script and what they do 49 | 50 | 1 : Show CPU Usage 51 | 2 : Show ALL CPUs Usage 52 | 3 : Show MEM Usage 53 | 4 : Show SWAP Usage 54 | 5 : Show Date and Time 55 | 6 : Show Battery Usage ans status 56 | 7 : Show Disk Usage 57 | 8 : Show Keyboard layout 58 | 9 : Show System Language 59 | 10 : Show Uptime 60 | 11 : Show Trash Size 61 | 12 : Show Window Title 62 | 13 : Show Music Status on (Moc) 63 | 14 : Show Music Status on (Mpd) 64 | 15 : Show CPU TEMP 65 | 16 : Show GPU TEMP 66 | 17 : Show Touchpad Status 67 | 18 : show Volume Status (alsa) 68 | 19 : Show Wifi Info IP4 69 | 20 : Show Ethernet Info IP4 70 | 21 : Show Wifi Info IP6 71 | 22 : Show Ethernet Info IP6 72 | 23 : Show Number of Prosses use by this current user 73 | 24 : Show System Kernel 74 | 25 : Show Usb Pluged in your system 75 | 26 : Show Total packages in Your system (Ubuntu) 76 | 27 : Show if there is any updates (Ubuntu) 77 | 28 : Show UFW Status (systemctl) 78 | 29 : Show NumberLock status 79 | 30 : Show Bluetooth Status 80 | 31 : Show CapsLock Status 81 | 32 : Show x screensaver Status 82 | 33 : Show Number of Mointed Points on System 83 | 34 : Show Music Status on (CMUS) 84 | 35 : Show Apparmor Status 85 | 36 : Show Total packages in Your system (Arch) 86 | 37 : Show i3 Workspaces Status 87 | 38 : Show User NAME 88 | 39 : show Volume Status (pulse) 89 | ``` 90 | --- 91 | 92 | ### What's New 93 | 94 | * Give You Access to change Icons with text or any other symbol 95 | * Add new script to show more information about your System 96 | * ALL-IN-ONE Gather All the Scripts in one place for easy Access 97 | * Add Help Dialog to Give You Information You need to know 98 | * Add workspace display script using i3-msg 99 | 100 | --- 101 | 102 | ### Installation 103 | 104 | ```bash 105 | git clone https://github.com/zakariagatter/i3blocks-gate 106 | mkdir -p ~/.local/bin 107 | cp Ubuntu/i3b-gate ~/.local/bin 108 | ``` 109 | 110 | 111 | ### configuration 112 | ```sh 113 | [NAME] 114 | command=i3b-gate [1-39] 115 | interval=[1-9] 116 | color=#XXXXXX 117 | ``` 118 | -------------------------------------------------------------------------------- /i3b-gate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Zakaria Barkouk ( Zakaria.gatter@gmail.com) 3 | 4 | #---------------------# 5 | # SHOW CPU INFO (TOP) # 6 | #---------------------# 7 | _BLOCK_1_(){ #{{{ 8 | mpstat | awk '/all/{print "'"${1:-} "'"$4}' 9 | } #}}} 10 | 11 | #--------------------# 12 | # SHOW ALL CPUS INFO # 13 | #--------------------# 14 | _BLOCK_2_(){ #{{{ 15 | mpstat -P ALL | awk -v icon=${1:-} 'BEGIN{printf "%s ", icon} { 16 | if($3 ~ /^[0-9]/){ 17 | printf "%s ", $4 18 | } 19 | }' 20 | } #}}} 21 | 22 | #--------------------------# 23 | # SHOW MEMORY USAGE (FREE) # 24 | #--------------------------# 25 | _BLOCK_3_(){ #{{{ 26 | free -h | awk '/^Mem:/{print "'"${1:-} "'"$3}' 27 | } #}}} 28 | 29 | #------------------------# 30 | # SHOW SWAP USAGE (FREE) # 31 | #------------------------# 32 | _BLOCK_4_(){ #{{{ 33 | free -h | awk '/^Swap:/{print "'"${1:-}"' "$3}' 34 | } #}}} 35 | 36 | #---------------------------# 37 | # SHOW DATE AND TIME (DATE) # 38 | #---------------------------# 39 | _BLOCK_5_(){ #{{{ 40 | date +"${1:-} %R %D" 41 | } #}}} 42 | 43 | #----------------------------# 44 | # SHOW BATTERY STATUS (ACPI) # 45 | #----------------------------# 46 | _BLOCK_6_(){ #{{{ 47 | Bat=$(acpi | awk '{gsub(",|%","",$4); print $4}'); 48 | adapt=$(acpi -a | awk '{print $3}'); 49 | 50 | if [ "$adapt" = "on-line" -a -n "$Bat" ];then 51 | icon0=" " 52 | icon1=" " 53 | icon2=" " 54 | icon3=" " 55 | icon4=" " 56 | elif [ "$adapt" = "on-line" ];then 57 | icon0="" 58 | icon1="" 59 | icon2="" 60 | icon3="" 61 | icon4="" 62 | else 63 | icon0="" 64 | icon1="" 65 | icon2="" 66 | icon3="" 67 | icon4="" 68 | fi 69 | 70 | [ -z "$Bat" ] && echo "$icon0 $adapt" && return 71 | [ "$Bat" -gt "100" ] && echo "$icon4 Full" 72 | [ "$Bat" -gt "90" ] && echo "$icon3 $Bat%" 73 | [ "$Bat" -gt "60" ] && echo "$icon2 $Bat%" 74 | [ "$Bat" -gt "30" ] && echo "$icon1 $Bat%" 75 | [ "$Bat" -lt "30" ] && echo "$icon0 $Bat%" 76 | } #}}} 77 | 78 | #----------------------# 79 | # SHOW DISK USAGE (DF) # 80 | #----------------------# 81 | _BLOCK_7_() { #{{{ 82 | df -h "${1:-/}" | awk '/\/dev\//{print "'"${2:-}"' "$3-G"/"$2}' 83 | } #}}} 84 | 85 | #----------------------# 86 | # SHOW KEYBOARD LAYOUT # 87 | #----------------------# 88 | _BLOCK_8_() { #{{{ 89 | awk -F '"' '/XKBLAYOUT/{print "'"${1:-} "'"$2}' /etc/default/keyboard 90 | } #}}} 91 | 92 | #----------------------# 93 | # SHOW SYSTEM LANGUAGE # 94 | #----------------------# 95 | _BLOCK_9_(){ #{{{ 96 | echo "${1:-} ${LANG/.UTF-8/}" 97 | } #}}} 98 | 99 | #------------------------------# 100 | # SHOW MACHINE UPTIME (UPTIME) # 101 | #------------------------------# 102 | _BLOCK_10_() { #{{{ 103 | uptime | awk '{sub(",","",$4); print "'"${1:- } "'"$3 " " $4}' 104 | } #}}} 105 | 106 | #----------------------# 107 | # SHOW TRASH SIZE (DU) # 108 | #----------------------# 109 | _BLOCK_11_() { #{{{ 110 | [ -d "$HOME/.local/share/Trash/files" ] && { 111 | du -hc $HOME/.local/share/Trash/files | awk '/total$/{print "'"${1:-} "'"$1}' 112 | } || { 113 | echo "${1:-} ---" 114 | } 115 | } #}}} 116 | 117 | #-------------------# 118 | # SHOW WINDOW USAGE # 119 | #-------------------# 120 | _BLOCK_12_() { #{{{ 121 | focus=$(xprop -id `xprop -root | awk '/^_NET_ACTIVE_WINDOW/{print $5}'` | awk -F '"' '/^WM_NAME/{print $2}') 122 | if [ -z "$focus" ];then 123 | echo "${1:-} Welcome" 124 | else 125 | [ "${#focus}" -gt "${2:-30}" ] && echo "${1:-} ${focus::${2:-30}} ..." || echo "${1:-} $focus" 126 | fi 127 | } #}}} 128 | 129 | #-----------------------------------------# 130 | # SHOW MOCP PLAYING SONG AND STATUS (MOC) # 131 | #-----------------------------------------# 132 | _BLOCK_13_() { # {{{ 133 | Title=$(mocp -Q %title) 134 | F_Title=$(basename `mocp -Q %file | tr " " "_"`) 135 | Status=$(mocp -Q %state) 136 | 137 | if [ "$Status" != "PLAY" ];then 138 | echo "${1:-} Pause" 139 | elif [ -z "$Title" ];then 140 | echo "${1:-} ${F_Title::30}" 141 | else 142 | echo "${1:-} $Title" 143 | fi 144 | } #}}} 145 | 146 | #------------------------------------------------------# 147 | # SHOW MPD PLAYING SONG AND STATUS (MPD; NCMPCCP, MPC) # 148 | #------------------------------------------------------# 149 | _BLOCK_14_() { #{{{ 150 | local NCMP=$(mpc | awk '/^\[playing\]/{print $1}') 151 | 152 | if [ "$NCMP" = "[playing]" ];then 153 | echo "${1:-} $(basename $(mpc current)) " 154 | else 155 | echo "${1:-} Pause " 156 | fi 157 | } #}}} 158 | 159 | #-------------------------# 160 | # SHOW CPU TEMP (XSENSER) # 161 | #-------------------------# 162 | _BLOCK_15_() { #{{{ 163 | sensors | awk '/^CPU/{gsub("\+",""); print "'"${1:-} "'"$2}' 164 | } #}}} 165 | 166 | #-------------------------# 167 | # SHOW GPU TEMP (XSENSER) # 168 | #-------------------------# 169 | _BLOCK_16_() { #{{{ 170 | sensors | awk '/^GPU/{gsub("\+",""); print "'"${1:-} "'"$2}' | tail -1 171 | } #}}} 172 | 173 | #----------------------------------# 174 | # SHOW TOUCHPAD STATUS (SYSCLIENT) # 175 | #----------------------------------# 176 | _BLOCK_17_() { #{{{ 177 | [ "$(synclient -l | awk '/Touchpad/{print $3}')" = "0" ] && echo "${1:-} Enable" || echo "${1:-} Disable" 178 | } #}}} 179 | 180 | #---------------------------# 181 | # SHOW VOLUME STATUS (ALSA) # 182 | #---------------------------# 183 | _BLOCK_18_() { #{{{ 184 | local Vol=$(amixer get Master | awk '/Mono:/{gsub("\[|\%|\]",""); print $4}') 185 | local Mute=$(amixer get Master | awk '/Mono:/{gsub("\[|\]",""); print $6}') 186 | 187 | if [ "$Mute" = "off" ];then 188 | echo -e " --" 189 | else 190 | if [ "$Vol" -gt "60" ];then 191 | echo -e " $Vol%" 192 | elif [ "$Vol" -gt "30" ];then 193 | echo -e " $Vol%" 194 | elif [ "$Vol" -lt "30" ];then 195 | echo -e " $Vol%" 196 | fi 197 | fi 198 | } #}}} 199 | 200 | #----------------------------------------------# 201 | # SHOW WIFI INFO ; IP ; CONNECTED NAME (NMCLI) # 202 | #----------------------------------------------# 203 | _BLOCK_19_() { #{{{ 204 | while read -a W ;do 205 | [ "${W[2]}" = "connected" ] && { 206 | _ip=$(nmcli device show ${W[0]} | awk '/^IP4.ADDRESS/{print $NF}') 207 | _name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}') 208 | echo -n "${1:-} ${_ip%/*} (${_name} )" 209 | } || { 210 | echo -n "${1:-} ---" 211 | } 212 | done< <(nmcli d | grep -w "wifi") 213 | echo -e "" 214 | } #}}} 215 | 216 | #-------------------------------------------# 217 | # SHOW ETHERNET INFO ; IP ; CONNECTED NAME # 218 | #-------------------------------------------# 219 | _BLOCK_20_() { #{{{ 220 | while read -a W ;do 221 | [ "${W[2]}" = "connected" ] && { 222 | _ip=$(nmcli device show ${W[0]} | awk '/^IP4.ADDRESS/{print $NF}') 223 | _name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}') 224 | echo -n "${1:-} ${_ip%/*} (${_name} ) " 225 | } || { 226 | echo -n "${1:-} ---" 227 | } 228 | done< <(nmcli d | grep "ethernet") 229 | echo -e "" 230 | } #}}} 231 | 232 | 233 | #-----------------------------------------------# 234 | # SHOW WIFI INFO ; IP6 ; CONNECTED NAME (NMCLI) # 235 | #-----------------------------------------------# 236 | _BLOCK_21_() { #{{{ 237 | while read -a W ;do 238 | [ "${W[2]}" = "connected" ] && { 239 | _ip=$(nmcli device show ${W[0]} | awk '/^IP6.ADDRESS/{print $NF}') 240 | _name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}') 241 | echo -n "${1:-} ${_ip%/*} (${_name} ) " 242 | } || { 243 | echo -n "${1:-} ---" 244 | } 245 | done< <(nmcli d | grep "wifi") 246 | echo -e "" 247 | } #}}} 248 | 249 | #--------------------------------------------# 250 | # SHOW ETHERNET INFO ; IP6 ; CONNECTED NAME # 251 | #--------------------------------------------# 252 | _BLOCK_22_() { #{{{ 253 | while read -a W ;do 254 | [ "${W[2]}" = "connected" ] && { 255 | _ip=$(nmcli device show ${W[0]} | awk '/^IP6.ADDRESS/{print $NF}') 256 | _name=$(nmcli device show ${W[0]} | awk '/^GENERAL.CONNECTION:/{$1=""; print $0}') 257 | echo -n "${1:-} ${_ip%/*} (${_name} ) " 258 | } || { 259 | echo -n "${1:-} ---" 260 | } 261 | done< <(nmcli d | grep "ethernet") 262 | echo -e "" 263 | } #}}} 264 | 265 | #-------------------------------# 266 | # SHOW PROSSES USE BY THIS USER # 267 | #-------------------------------# 268 | _BLOCK_23_() { #{{{ 269 | echo "${1:-} $(ps -U $USER | wc -l)" 270 | } #}}} 271 | 272 | #---------------------# 273 | # SHOW SYSTEM KERENEL # 274 | #---------------------# 275 | _BLOCK_24_() { #{{{ 276 | echo "${1:-} $(uname -r)" 277 | } #}}} 278 | 279 | #-----------------------------# 280 | # SHOW USB PLUG IN UR COMPUTE # 281 | #-----------------------------# 282 | _BLOCK_25_() { #{{{ 283 | echo "${1:-} $(lsblk -l -o 'TRAN' | grep -c "usb")" 284 | } #}}} 285 | 286 | #---------------------------------------# 287 | # SHOW TOTAL PKGS INSTALL IN YOUR SYSTE # 288 | #---------------------------------------# 289 | _BLOCK_26_() { #{{{ 290 | echo "${1:-} $(dpkg -l | grep -c "^ii")" 291 | } #}}} 292 | 293 | #--------------------------------------------# 294 | # CHECK IF THERE IS ANY UPDATE IN UR SYSTEM # 295 | #--------------------------------------------# 296 | _BLOCK_27_() { #{{{ 297 | local U_PKGS=$(apt-get -s -o APT::Get::Show-User-Simulation-Note=0 dist-upgrade | grep "^\s\s" | wc -w); 298 | echo "${1:-} $U_PKGS" 299 | } #}}} 300 | 301 | #-----------------# 302 | # SHOW UFW STATUS # 303 | #-----------------# 304 | _BLOCK_28_() { #{{{ 305 | [ "$(systemctl status ufw | awk '/Active:/{print $2}')" == "active" ] && echo "${1:-} On" || echo "${1:-} Off" 306 | } #}}} 307 | 308 | #-------------------------# 309 | # SHOW NUMBER LOCK STATUS # 310 | #-------------------------# 311 | _BLOCK_29_() { #{{{ 312 | [ "$(xset -q | awk '/00:/{print $8}')" == "on" ] && echo "${1:-} On" || echo "${1:-} Off" 313 | } #}}} 314 | 315 | #-----------------------# 316 | # SHOW BLUETOOTH STATUS # 317 | #-----------------------# 318 | _BLOCK_30_() { #{{{ 319 | [ "$(systemctl status bluetooth.target | awk '/Active:/{print $2}')" == "active" ] && echo "${1:-} On" || echo "${1:-} Off" 320 | } #}}} 321 | 322 | #------------------------# 323 | # SHOW CAPS LOCK STATUS # 324 | #------------------------# 325 | _BLOCK_31_() { #{{{ 326 | [ "$(xset -q | awk '/00:/{print $4}')" == "on" ] && echo "${1:-} On" || echo "${1:-} Off" 327 | } #}}} 328 | 329 | #-----------------------------# 330 | # DISPLAY X SCREENSAVER STATE # 331 | #-----------------------------# 332 | _BLOCK_32_() { #{{{ 333 | [ "$(xdg-screensaver status)" != "enabled" ] && echo "${1:-} Off" || echo "${1:-} On" 334 | } #}}} 335 | 336 | #--------------------------------# 337 | # CALCULE MOUNT POINTS ON SYSTEM # 338 | #--------------------------------# 339 | _BLOCK_33_() { #{{{ 340 | echo "${1:-} $(cat /proc/mounts | grep -c "^/dev/sd*") " 341 | } #}}} 342 | 343 | #-------------------------# 344 | # SHOW CMUS PLAYING SONG # 345 | #-------------------------# 346 | _BLOCK_34_() { #{{{ 347 | local CMUS_P=$(cmus-remote -Q | awk '/^status/{print $2}') 348 | local CMUS_F=$(cmus-remote -Q | awk '/^file/{$1=""; print $2}') 349 | 350 | if [ "$CMUS_P" = "Playing" ];then 351 | echo "${1:-} $(basename $CMUS_F)" 352 | else 353 | echo "${1:-} Pause" 354 | fi 355 | } #}}} 356 | 357 | #----------------------# 358 | # SHOW APPARMOR STATUS # 359 | #----------------------# 360 | _BLOCK_35_() { #{{{ 361 | [ "$(aa-enabled)" = "Yes" ] && { 362 | echo "${1:-} On" 363 | }||{ 364 | echo "${1:-} Off" 365 | } 366 | } #}}} 367 | 368 | #-----------------------------# 369 | # SHOW TOTAL PACKAGES IN ARCH # 370 | #-----------------------------#{{{ 371 | _BLOCK_36_(){ 372 | echo "${1:-} $(pacman -Q | grep -c "*")" 373 | } 374 | #}}} 375 | 376 | #--------------------# 377 | # SHOW I3 WORKSPACES # 378 | #--------------------# 379 | _BLOCK_37_() { #{{{ 380 | i3-msg -t get_workspaces | awk -F , '{ 381 | for(i=1;i<=NF;i++){ 382 | if($i~"name"){ 383 | gsub("\"name\":|\"","",$i) 384 | WK=$i 385 | } 386 | if($i~"focused"){ 387 | gsub("\"focused\":","",$i) 388 | WKF=$i 389 | } 390 | if($i~"urgent"){ 391 | gsub("\"urgent\":|\]|\}","",$i) 392 | if($i=="false" && WKF=="true"){ 393 | printf "%s ", WK 394 | } 395 | if($i=="false" && WKF=="false"){ 396 | printf"[%s] ", WK 397 | } 398 | if($i=="true" && WKF=="false"){ 399 | printf "[*%s] ", WK 400 | } 401 | if($i=="true" && WKF=="true"){ 402 | printf "*%s ", WK 403 | } 404 | } 405 | } 406 | }' 407 | } #}}} 408 | 409 | #-----------------# 410 | # SHOW USER NAME # 411 | #-----------------# 412 | _BLOCK_38_(){ #{{{ 413 | echo -e "${1:-} $USER" 414 | } #}}} 415 | 416 | #-------------------# 417 | # SHOW VOLUME PULSE # 418 | #-------------------# 419 | _BLOCK_39_(){ 420 | local Vol=$(pactl list sinks | awk '/Volume: front/{print $5-"%"}') 421 | local Mute=$(amixer get Master | awk '/Mono:/{gsub("\[|\]",""); print $6}') 422 | 423 | if [ "$Mute" = "off" ];then 424 | echo -e " --" 425 | else 426 | if [ "$Vol" -gt "60" ];then 427 | echo -e " $Vol%" 428 | elif [ "$Vol" -gt "30" ];then 429 | echo -e " $Vol%" 430 | elif [ "$Vol" -lt "30" ];then 431 | echo -e " $Vol%" 432 | fi 433 | fi 434 | } 435 | 436 | #------------------------# 437 | # USAGE AND HELP DIALOG # 438 | #------------------------# 439 | _USAGE_(){ #{{{ 440 | echo -e " 441 | i3b-gate : is a all in one collaction of small script 442 | show you useful unformation about your system 443 | 444 | There is 39 deffirent script to use 445 | for more information you can see the 'README' file 446 | or visite 'https://gitlab.com/zakariagatter/i3blocks-gate' 447 | 448 | SYNTAX : 449 | i3b-gate [NUMBER] ... 450 | " 451 | } #}}} 452 | 453 | #----------------# 454 | # MAIN ARGUMENT # 455 | #----------------# 456 | if [ "$1" -gt "39" ] || [ -z "$1" ] ;then 457 | _USAGE_ 458 | elif [ "$1" = "-h" ]; then 459 | _USAGE_ 460 | else 461 | eval $(echo "_BLOCK_$1_ $2 $3") 462 | fi 463 | --------------------------------------------------------------------------------