BanditHijo.dev

Membuat Module Sederhana untuk Status Bar GNU/Linux dan FreeBSD

Created at: 2020-05-11
Author by: BanditHijo

Pendahuluan

Bagi teman-teman yang menggunakan Window Manager pasti sudah sangat familiar dengan status bar. Ada bermacam-macam nama status bar yang dapat digunakan. Salah satu yang saya gunakan terakhir kali adalah Polybar. Saya sudah pernah membahas tentang Polybar di sini: Polybar, Bar yang Mudah Dikonfig, Praktis, dan Mudah Dikustomisasi

Catatan kali ini, saya ingin membahas tentang status bar yang kita racik sendiri, dan tidak tergantung dengan status-status bar yang sudah ada.

Permasalahan

Saya tidak menggunakan alasan bahwa status-status bar tersebut bloated, karena tidak semua module kita gunakan. Namun, saya ingin lebih tidak tergantung terhadap status-status bar tersebut yang bisa jadi hanya spesifik untuk sistem operasi tertentu saja. Misal untuk Polybar, sebagian besar module-module yang disediakan, tidak dapat berjalan dengan baik pada FreeBSD.

Kalau hal tersebut terjadi, maka saya yang repot. Karena harus meluangkan waktu lagi untuk melakukan riset dan membuat ulang module-module tersebut agar dapat digunakan dengan Polybar.

Selain itu, apabila saya menggunakan dwm, saya lebih baik meracik status bar saya sendiri.

Pemecahan Masalah

Saya sudah membuatkan beberapa module yang dapat digunakan untuk membangun status bar sendiri atau digunakan oleh Polybar

PERHATIAN!

Saya tidak banyak pengalaman dalam menulis Bash Script. Apabila ada logika yang kurang baik, boleh sekali loh dikasih saran dan dibenerin. Saya sangat terbuka dan senang sekali. Terima kasih (^_^).

Module

CPU Temperature

cpu_temp
1#!/bin/sh
2
3get_temp_cpu0=$(cat /sys/class/thermal/thermal_zone0/temp)
4temp_cpu0=$(($get_temp_cpu0/1000))
5echo "" $temp_cpu0"°C"

Memory

memory
1#!/bin/sh
2
3mem_total=$(free -m | awk 'NR%2==0 {print $2}')
4mem_avail=$(free -m | awk 'NR%2==0 {print $7}')
5mem_used=$(( $mem_total - $mem_avail))
6mem_usage=$(( $mem_used * 100 / $mem_total ))
7echo " "$mem_usage"%"

File System

filesystem
1#!/bin/sh
2
3cap_percentage=$(df -h --output=pcent / | awk 'NR%2==0 {print $0}')
4echo ""$cap_percentage

Volume

volume
1#!/bin/sh
2
3ou_mute=$(pamixer --get-mute)
4in_mute=$(pamixer --source 1 --get-mute)
5ou_vol=$(pamixer --get-volume)
6in_vol=$(pamixer --source 1 --get-volume)
7jack_stat=$($HOME/.local/bin/has_headphone)
8
9if [ $jack_stat = "yes" ]; then
10 icon_ou_on=""
11 icon_ou_off=""
12elif [ $jack_stat = "no" ]; then
13 icon_ou_on=""
14 icon_ou_off=""
15fi
16icon_in_on=""
17icon_in_off=""
18
19if [ $ou_mute = "true" ] && [ $in_mute = "true" ]; then
20 echo $icon_ou_off "Ø" $icon_in_off "Ø"
21elif [ $ou_mute = "true" ] && [ $in_mute = "false" ]; then
22 echo $icon_ou_off "Ø" $icon_in_on $in_vol"%"
23elif [ $ou_mute = "false" ] && [ $in_mute = "true" ]; then
24 echo $icon_ou_on $ou_vol"%" $icon_in_off "Ø"
25elif [ $ou_mute = "false" ] && [ $in_mute = "false" ]; then
26 echo $icon_ou_on $ou_vol"% $icon_in_on $in_vol"%"
27else
28 echo " ERROR"
29fi
30
$HOME/.local/bin/has_headphone
1#!/bin/sh
2
3# PulseAudio
4pacmd list-sinks | grep 'Headphones' | awk '{print $10}' | tr -d ')'

Backlight

backlight
1#!/bin/sh
2
3backlight=$(xbacklight -get | cut -d "." -f1)
4echo "" $backlight"%"

Network Traffic (Wifi)

network_traf_wlan
1#!/bin/bash
2
3wlan_card='wlan0'
4
5wlanmon_card=$(ip a s | grep $wlan_card'mon' | awk 'NR%1==0 {print $2}' | sed 's/://g')
6if [ $wlanmon_card ]; then
7 printf " MONITOR"
8fi
9
10wlan_online=$(iw $wlan_card link | grep 'Connected' | awk 'NR%1==0 {print $1}')
11wlan_offline=$(iw $wlan_card link | grep 'Not' | awk 'NR%1==0 {print $1}')
12internet=$(wget -qO- ifconfig.co)
13internet_logo=""
14if [ $internet ]; then
15 internet_logo=" "
16else
17 internet_logo=" "
18fi
19
20if [ $wlan_online ]; then
21 wlan_do=$(ifstat2 -i $wlan_card 1 1 | awk 'NR%3==0 {print $1}')
22 wlan_up=$(ifstat2 -i $wlan_card 1 1 | awk 'NR%3==0 {print $2}')
23 printf "$internet_logo %5s  %5s\\n" \
24 $(numfmt --to=none $wlan_do) \
25 $(numfmt --to=none $wlan_up)
26elif [ $wlan_offline ];then
27 printf " OFFLINE"
28else
29 printf " NOADPTR"
30fi

Battery Capacity

batt_capacity
1#!/bin/sh
2
3cap=$(cat /sys/devices/platform/smapi/BAT0/remaining_percent)
4if [ $cap -ge 0 ] && [ $cap -le 10 ]; then
5 echo "" $cap"%"
6elif [ $cap -ge 11 ] && [ $cap -le 20 ]; then
7 echo "" $cap"%"
8elif [ $cap -ge 21 ] && [ $cap -le 30 ]; then
9 echo "" $cap"%"
10elif [ $cap -ge 31 ] && [ $cap -le 40 ]; then
11 echo "" $cap"%"
12elif [ $cap -ge 41 ] && [ $cap -le 50 ]; then
13 echo "" $cap"%"
14elif [ $cap -ge 51 ] && [ $cap -le 60 ]; then
15 echo "" $cap"%"
16elif [ $cap -ge 61 ] && [ $cap -le 70 ]; then
17 echo "" $cap"%"
18elif [ $cap -ge 71 ] && [ $cap -le 80 ]; then
19 echo "" $cap"%"
20elif [ $cap -ge 81 ] && [ $cap -le 90 ]; then
21 echo "" $cap"%"
22elif [ $cap -ge 91 ] && [ $cap -le 100 ]; then
23 echo "" $cap"%"
24else
25 echo " UNKNWN"
26fi

Battery Status

batt_state
1#!/bin/sh
2
3state=$(cat /sys/devices/platform/smapi/BAT0/state)
4if [ $state = "charging" ]; then
5 echo " " # charging
6elif [ $state = "discharging" ]; then
7 echo " " # discharging
8elif [ $state = "idle" ]; then
9 echo " " # idle
10else
11 echo " " # unknown
12fi

Selesai!

Ya, seperti ini saja yang dapat saya catat.

Mudah-mudahan dapat bermanfaat untuk teman-teman yang memerlukan.

Terima kasih.

(^_^)