Wildan's Workspace

Gorgeous Status Bar with Polybar

Posted on 6 mins

Polybar Status Bar Linux

Polybar adalah tool yang cepat mudah digunakan untuk membuat status bar1, seperti: ss1

Secara umum, artikel ini akan membahas 3 proses: Memasang Polybar, Menjalankan Polybar, dan Mengkustom Polybar.

Memasang Polybar

Project polybar dapat ditemukan di internet, di repo github official-nya: Polybar Github

Di linux, polybar dapat dipasang dengan mengetikkan perintah berikut:

No Distro Install
1 Debian/Ubuntu sudo apt install polybar
2 Arch sudo pacman -S polybar
3 OpenSuse sudo zypper in polybar
4 Fedora sudo dnf install polybar

Untuk memastikan polybar sudah terpasang, ketikkan perintah berikut di terminal:

polybar -h

ss2

Menjalankan Polybar

Polybar dapat dijalankan sesederhana mengetikkan perintah berikut di terminal:

polybar

Ketika perintah tersebut dijalankan, maka polybar akan mengambil konfigurasi default dari /etc/polybar/config.ini.

Atau dengan perintah:

polybar example -r

Perintah tersebut berarti secara spesifik meminta agar polybar menjalankan bar example dari file konfigurasinya dan me-reload-nya (artinya, tampilan polybar akan langsung berubah jika ada konfigurasi yang diubah tanpa harus menjalankan polybar lagi di terminal). ss3

Untuk menjalankan polybar langsung setelah login ke komputer (khususnya openbox, karena saya menjalankan openbox saat artikel ini dibuat), masukkan perintah tersebut ke file .config/openbox/autostart.

Mengkustom Polybar

Copy file config polybar dari /etc/polybar/config.ini dan paste-kan ke .config/polybar/config.ini.

mkdir ~/.config/polybar
cp /etc/polybar/config.ini ~/.config/polybar

Saya akan mengkustom polybar melalui file .config/polybar/config.ini.

Secara umum, saya akan membuat status bar dengan 3 bagian, yaitu bagian kiri, bagian tengah, dan bagian kanan. Setiap bagian akan membawa module-nya masing-masing. Berikut adalah pembagian module pada konfigurasi polybar saya:

Instalasi Font (JetBrains Mono)

Sebelum masuk ke tahap-tahap kustomisasi, kita perlu meng-install font JetBrains terlebih dahulu. Font JetBrains di Archlinux dapat langsung dipasang via package manager:

sudo pacman -Sy ttf-jetbrains-mono ttf-jetbrains-mono-nerd

[colors]

Sekarang, kita akan mulai memasukkan baris-baris konfigurasi di file .config/polybar/config.ini.

Pertama-tama, saya akan mendefinisikan warna-warna yang akan digunakan pada polybar nanti.

; Warna
[colors]
; referensi warna bisa search di google "color selector"
background = #000000 
background-alt = #000000
foreground = #ffffff
primary = #74f0eb
secondary = #8ABEB7
alert = #A54242	
disabled = #707880

Jika ingin konfigurasi warna yang berbeda, kalian bisa bereksperimen mencari warna-warna yang keren dari google, tinggal search dengan keywordcolor selector ”, dimana kalian hanya perlu HEX dari warna yang kalian inginkan untuk kemudian di-copy-paste-kan ke dalam variabel-variabel pada blok [colors] tersebut. ss5

[bar/nama-bar]

Blok bar ini digunakan untuk membuat nama barnya. Saya akan biarkan namanya default, yaitu [bar/example], kalian boleh menggantinya sesuai selera, misalnya [bar/bar1], [bar/bar-percobaan], atau [bar/bar gue]2.

; Bar
[bar/example]
width = 80% ; it's X
offset-x = 10% ; it's Y, so that X + 2 * Y = 100
height = 22pt
radius = 6

background = ${colors.background}
foreground = ${colors.foreground}

line-size = 2pt

border-size = 6pt
border-color = #00000000

padding-left = 0
padding-right = 1

module-margin = 1

separator = ""
separator-foreground = ${colors.disabled}

font-0 = JetBrains Mono:weight=Bold:pixelsize=10;1
font-1 = Font Awesome 6 Free:weight=Bold:pixelsize=10;1
font-2 = JetBrainsMono Nerd Font:weight=Bold:pixelsize=10;1

modules-left = xworkspaces xwindow mpd
modules-center = date 
modules-right = filesystem pulseaudio battery eth netspeed

cursor-click = pointer
cursor-scroll = ns-resize

enable-ipc = true

Terlihat bahwa pada blok [bar] ini, kita mendefinisikan beberapa hal penting, misalnya mengatur ukuran, posisi, warna, dan font bar serta mengatur module-module apa saja yang akan terletak di sebelah kiri, tengah, maupun di kanan.

Sekarang, kita akan mengkonfigurasi modul-modul yang sebelumnya sudah saya tentukan.

Module di bagian kiri

[module/xworspaces]

Module ini akan mengkonfigurasi workspace yang muncul di polybar.

; Workspaces
[module/xworkspaces]
type = internal/xworkspaces

label-active = 
label-active-font = font-1	
label-active-foreground = ${colors.primary}
label-active-background = ${colors.background-alt}
label-active-underline= ${colors.primary}
label-active-padding = 1

label-occupied = 
label-occupied-font = font-1
label-occupied-foreground = ${colors.disabled}
label-occupied-padding = 1

label-urgent = %name%
label-urgent-background = ${colors.alert}
label-urgent-padding = 1

label-empty = 
label-empty-font = font-1
label-empty-foreground = ${colors.disabled}
label-empty-padding = 1

[module/xwindow]

Module xwindow ini mengkonfigurasi nama window aktif yang sedang tampil.

; Current Window
[module/xwindow]
type = internal/xwindow
label = %{F#74F0EB}%{F-}  %title:0:10:...%

[module/mpd]

Module mpd ini akan menampilkan output audio yang sedang berjalan yang di-handle oleh mpd server.

; MPD
[module/mpd]
type = internal/mpd
host = 127.0.0.1
port = 6600
interval = 2

format-online = <label-song>
label-song = %{F#74F0EB}%{F-} %artist% - %title%
label-offline = 🎜 mpd is offline

Ketiga konfigurasi module tersebut akan menampilkan workspace, current window, dan mpd di polybar sebelah kiri: ss6

Note:

Status dari module xwindow & mpd tidak akan muncul jika memang tidak ada window aktif yang sedang berjalan atau mpd tidak sedang berjalan.

Module di tengah

[module/date]

Module ini akan mengatur status jam dan tanggal yang akan muncul.

; Date
[module/date]
type = internal/date
interval = 1

date = %H:%M
date-alt = %Y-%m-%d %H:%M:%S

label = %date%
label-foreground = ${colors.foreground}

Status dari module date ini akan muncul di bagian tengah polybar. ss7

Module di bagian kanan

[module/filesystem]

Module ini akan menampilkan status kuantitas diska komputer kita yang sudah terisi (dengan format persentase tentu saja).

; File System
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /
label-mounted = %{F#74F0EB}%{F-}  %percentage_used%%

[module/pulseaudio]

Module ini bertanggung jawab untuk mengatur besar-kecil-nya volume audio komputer kita. Jadi, nanti melalui status pulseaudio ini, saya bisa mengecilkan atau membesarkan audio hanya dengan scrolling via mouse di status pulseaudio tersebut.

; Pulseaudio
[module/pulseaudio]
type = internal/pulseaudio

format-volume-prefix = "  " 
format-volume-prefix-foreground = ${colors.primary}
format-volume = <label-volume>

label-volume = %percentage%%

label-muted = muted
label-muted-foreground = ${colors.disabled}

[module/battery]

Sesuai namanya, modul ini akan menampilkan status battery laptop atau komputer kita.

; Battery 
[module/battery]
type = internal/battery
battery = BAT0
adapter = AC
full-at = 90

format-charging = "<animation-charging><label-charging>"
label-charging-foreground = ${colors.foreground}
label-charging-background = ${colors.background}

format-discharging = "<ramp-capacity><label-discharging>"
label-discharging-foreground = ${colors.foreground}
label-discharging-background = ${colors.background}

format-full-prefix = "  "
format-full-prefix-foreground = ${colors.foreground}
format-full-prefix-background = ${colors.background}

ramp-capacity-0 = "  "
ramp-capacity-0-foreground = ${colors.alert}
ramp-capacity-1 = "  "
ramp-capacity-2 = "  "
ramp-capacity-3 = "  "
ramp-capacity-foreground = ${colors.primary}
ramp-capacity-background = ${colors.background}

animation-charging-0 = "   "
animation-charging-1 = "   "
animation-charging-2 = "   "
animation-charging-3 = "   "
animation-charging-foreground = ${colors.primary}
animation-charging-background = ${colors.background}
animation-charging-framerate = 750

[network-base] & [module/eth]

Blok [network-base] adalah konfigurasi untuk membuat inisiasi pada jaringan internet di laptop atau komputer kita.

; Network Base
[network-base]
type = internal/network
interval = 5
format-connected = <label-connected>
format-disconnected = <label-disconnected>
label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected

Adapun module [module/eth0] digunakan untuk menampilkan status di polybar berupa alamat ip private yang tersambung ke jaringan internet (kebetulan saya menggunakan virtual machine, jadi koneksinya ke interface VLAN alias eth0, bukan wi-fi).

; Network (eth)
[module/eth]
inherit = network-base
interface-type = wired
label-connected = %{F#74F0EB}%{F-} %local_ip%

[module/netspeed]

Module ini nanti akan menampilkan status upload dan download koneksi jaringan internet saya.3

; NetSpeed
[module/netspeed]
type = internal/network
interface = enp0s3
interval = 0.1
format-connected = "<label-connected>"
label-connected = "%{F#74F0EB}▼%{F-} %downspeed:3% %{F#74F0EB}▲%{F-} %upspeed:3%"
label-connected-foreground = ${colors.foreground}
label-connected-background = ${colors.background}

Kelima module tersebut akan menampilkan status dari, secara berurutan, filesystem, pulseaudio, battery, eth0, dan netspeed di polybar bagian kanan: ss8

Oke, sekian dulu tutorial menginstall dan mengonkigurasi polybar.

Sampai jumpa lagi di kesempatan yang lain! ⋆.˚🦋⋆ 🫶🏻🥹❤️‍🩹


Btw, openbox + polybar = awesome! ss9