Polybar Configuration
Table of Contents
Colors
[colors] bg = ${xrdb:background} red = ${xrdb:color1} green = ${xrdb:color2} yellow = ${xrdb:color3} blue = ${xrdb:color4} purple = ${xrdb:color5} aqua = ${xrdb:color6} gray = ${colors.color7} darkgray = ${colors.color8} darkred = ${xrdb:color9} darkgreen = ${xrdb:color10} darkyellow = ${xrdb:color11} darkblue = ${xrdb:color12} darkpurple = ${xrdb:color13} darkaqua = ${xrdb:color14} fg = ${xrdb:foreground}
VM
[global/wm] margin-top = 0 margin-bottom = 0
Top Bar
[bar/top] enable-ipc = true # override-redirect = false bottom = false fixed-center = false width = 100% height = 27 radius = 0.0 background = ${colors.bg} foreground = ${colors.fg} line-size = 2 border-size = 0 padding-left = 2 padding-right = 12 module-margin-left = 1 module-margin-right = 1 font-0 = Hack Nerd Font:style=Regular:pixelsize=10;1 font-1 = unifont:fontformat=truetype:size=8:antialias=false;0 modules-left = i3 xwindow modules-center = modules-right = pulseaudio drive_monochromator drive_tmp drive_homelab drive_groupshare drive_data_id21 drive_unix_home dunst cursor unread_mail calendar battery date # wm-restack = i3 tray-position = right tray-detached = true tray-padding = 0 tray-background = ${colors.bg}
Show Windows Title
[module/xwindow] type = internal/xwindow label = %title:0:30:...%
I3 - Information about workspaces and active one
[module/i3] type = internal/i3 enable-scroll = false wrapping-scroll = false
format = <label-state> <label-mode> index-sort = true
label-mode-foreground = ${colors.bg} label-mode-background = ${colors.fg} label-mode-padding = 1 # focused = Active workspace on focused monitor label-focused = %icon% %index% label-focused-foreground = ${colors.fg} label-focused-background = ${colors.bg} label-focused-underline = ${colors.aqua} label-focused-padding = 1 # unfocused = Inactive workspace on any monitor label-unfocused = %icon% %index% label-unfocused-foreground = ${colors.fg} label-unfocused-background = ${colors.bg} label-unfocused-underline = ${colors.bg} label-unfocused-padding = 1 # visible = Active workspace on unfocused monitor label-visible = %icon% %index% label-visible-background = ${colors.bg} label-visible-underline = ${colors.aqua} label-visible-padding = 1 # urgent = Workspace with urgency hint set label-urgent = %icon% %index% label-urgent-background = ${colors.red} label-urgent-padding = 1
Music using MPD
[module/mpd] type = internal/mpd format-online = <icon-prev> <toggle> <icon-next> %{A1:$TERMINAL -e ncmpcpp &:}<label-song>%{A} format-online-spacing = 0 format-online-padding = 0 label-offline = mpd is offline format-offline = <label-offline> format-offline-foreground = #777 label-song = %artist% - %title% label-song-maxlen = 30 label-song-ellipsis = true icon-prev = 寧 icon-stop = 栗 icon-play = 契 icon-pause = icon-next = 嶺 icon-random = 咽 icon-repeat = 凌 # Used to display the state of random/repeat/repeatone/single # Only applies if <icon-[random|repeat|repeatone|single]> is used toggle-on-foreground = ${colors.fg} toggle-off-foreground = ${colors.gray} bar-progress-width = 15 bar-progress-indicator = | bar-progress-fill = ─ bar-progress-empty = ─
Backlight level
[module/xbacklight] type = internal/xbacklight format = <ramp> ramp-0 = ramp-1 = ramp-2 = ramp-3 = ramp-4 = ramp-5 = ramp-6 = ramp-7 = ramp-8 = ramp-9 = ramp-10 = ramp-11 =
CPU Usage
[module/cpu] type = internal/cpu interval = 2 format-prefix-foreground = ${colors.fg} format-underline = ${colors.bg} label = %{A1:$TERMINAL -e htop &:} %percentage:2%%%{A}
Date
[module/date] type = internal/date interval = 1 # Open google calendar on left right date = %{A1:$TERMINAL --title khal -e ikhal &:} %d-%m%{A} date-alt = "%{A1:$TERMINAL --title khal -e ikhal &:} %d-%m-%Y%{A}" time = %H:%M time-alt = %H:%M:%S label = %date% %time%
Sound Volume
[module/pulseaudio] type = internal/pulseaudio sink = alsa_output.pci-0000_00_1f.3-platform-sof_sdw.HiFi__hw_sofsoundwire_2__sink # Open pavucontrol on left right format-volume =%{A1:pavucontrol &:}<label-volume> <bar-volume>%{A} label-volume = %percentage%% label-volume-foreground = ${root.foreground} label-muted = ﱝ muted bar-volume-width = 10 bar-volume-foreground-0 = ${colors.green} bar-volume-foreground-1 = ${colors.green} bar-volume-foreground-2 = ${colors.blue} bar-volume-foreground-3 = ${colors.blue} bar-volume-foreground-4 = ${colors.red} bar-volume-foreground-5 = ${colors.red} bar-volume-foreground-6 = ${colors.red} bar-volume-gradient = false bar-volume-indicator = | bar-volume-indicator-font = 2 bar-volume-fill = ─ bar-volume-fill-font = 2 bar-volume-empty = ─ bar-volume-empty-font = 2 bar-volume-empty-foreground = ${colors.fg}
Battery
[module/battery] type = internal/battery battery = BAT0 adapter = AC full-at = 95 format-charging = %{A1:xfce4-power-manager-settings &:}<ramp-capacity> <label-charging>%{A} format-charging-underline = ${colors.blue} format-discharging = %{A1:xfce4-power-manager-settings &:}<ramp-capacity> <label-discharging>%{A} format-discharging-underline = ${colors.red} label-full = %{A1:xfce4-power-manager-settings &:} %{A} format-full-underline = ${colors.bg} ramp-capacity-0 = ramp-capacity-1 = ramp-capacity-2 = ramp-capacity-3 = ramp-capacity-4 =
Temperature
[module/temperature] type = internal/temperature interval = 2 thermal-zone = 0 base-temperature = 50 warn-temperature = 80 hwmon-path = /sys/class/thermal/thermal_zone10/temp units = false format = %{A1:$TERMINAL --title="Sensors" -e watch sensors &:}<ramp> <label>%{A} format-warn = <ramp> <label-warn> label = %temperature-c%°C label-warn = %temperature-c%°C label-warn-foreground = ${colors.fg} format-warn-underline = ${colors.red} ramp-0 = ramp-1 = ramp-2 = ramp-3 = ramp-4 = ramp-foreground = ${colors.fg}
Unread Mails
[module/unread_mail] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/mail-open.sh >/dev/null 2>%1 & click-right = ~/.config/polybar/scripts/mail-refresh.sh >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/mail-status.sh interval = 2
Unread Mail Scripts
mail_nb=`du -a ~/.mail/*/Inbox/new/* 2>/dev/null | wc -l` if [ "$mail_nb" -eq "0" ]; then echo ""; else echo "%{F#859900} $mail_nb%{F-}"; fi
Refresh Mail Scripts
notify-send --hint=string:x-dunst-stack-tag:YpqAgorv "Mails " "Syncing..."; checkmail -q && \ mail_nb=`du -a ~/.mail/*/Inbox/new/* 2>/dev/null | wc -l` && \ if [ "$mail_nb" -eq "0" ]; then notify-send --hint=string:x-dunst-stack-tag:YpqAgorv "Mails " "No new mail"; fi
Open Mails
$TERMINAL -e tmux new-session -A -s neomutt neomutt
Unread News
[module/unread_news] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/news-open.sh >/dev/null 2>%1 & click-right = ~/.config/polybar/scripts/news-refresh.sh >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/news-status.sh interval = 60
Unread News Scripts
news_nb=`newsboat -x print-unread 2>/dev/null | cut -d " " -f1` if [ -z "$news_nb" ] || [ "$news_nb" -eq "0" ]; then echo ""; else echo "%{F#859900} $news_nb%{F-}"; fi
Refresh News Scripts
notify-send --hint=string:x-dunst-stack-tag:4z5CvV6G "Newsboat " "Reloading..."; if pgrep -x "newsboat" >/dev/null; then # If newsboat is already running, try to refresh in the tmux session tmux send-keys -t newsboat R else newsboat -x reload && / news_nb=`newsboat -x print-unread | cut -d " " -f1` && \ notify-send --hint=string:x-dunst-stack-tag:4z5CvV6G "Newsboat " "$news_nb Unread News"; fi
Open Newsboat
$TERMINAL -e tmux new-session -A -s newsboat newsboat
Calendar
[module/calendar] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/calendar-open.sh >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/calendar-status.sh interval = 5
Calendar Status Scripts
next_events=$(khal list "$(date +"%H:%M")" 23:59 --format "{start-time} - {title}" -df 'SKIPME' | grep -v 'SKIPME' | grep -v 'No events') cal_icon="" cal_nb="" cal_desc="" if [ -n "$next_events" ]; then events_number="$(echo "$next_events" | wc -l)" if [ "$events_number" -gt "1" ]; then cal_nb=" ($events_number)" fi next_timed_events=$(echo "$next_events" | sed -e '/^[^0-9]/d') if [ -z "$next_timed_events" ]; then # Only full day events cal_desc=" $(echo "$next_events" | sed -e '/^[0-9]/d;s/^ - //' | head -n 1 | cut -c 1-15)" else cal_desc=" $(echo "$next_timed_events" | head -n 1 | cut -c 1-20)" fi fi echo "${cal_icon}${cal_nb}${cal_desc}"
Open Calendar
$TERMINAL --title=khal -e ikhal
Redshift
[module/redshift] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/redshift-toggle.sh >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/redshift-status.sh interval = 2
Redshift - Status
if pgrep -x "redshift" >/dev/null; then echo "望"; else echo "盛"; fi
Toggle Redshift
if pgrep -x "redshift" >/dev/null; then killall redshift && \ notify-send --hint=string:x-dunst-stack-tag:EKFLpst1 "Redshift 望" "Turned off"; else nohup redshift > /dev/null 2>&1 & notify-send --hint=string:x-dunst-stack-tag:EKFLpst1 "Redshift 望" "Starting..."; fi
Packages
[module/packages] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/packages-update.sh >/dev/null 2>%1 & click-right = ~/.config/polybar/scripts/packages-refresh.sh >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/packages-status.sh interval = 600
Packages Status script
paru -Sy > /dev/null 2>&1 && \ package_nb=`paru -Qu 2> /dev/null | wc -l` || \ package_nb=0 if [ "$package_nb" -eq "0" ]; then echo ""; else echo "%{F#859900} $package_nb%{F-}"; fi
Refresh New Packages script
notify-send --hint=string:x-dunst-stack-tag:SE5nDEVA 'Packages ' "Refreshing..." paru -Sy > /dev/null 2>&1 && \ package_nb=$(paru -Qu 2> /dev/null | wc -l) || \ package_nb=0 if [ "$package_nb" -eq "0" ]; then notify-send --hint=string:x-dunst-stack-tag:SE5nDEVA 'Packages ' "No upgrade available" else notify-send --hint=string:x-dunst-stack-tag:SE5nDEVA 'Packages ' "$package_nb upgrade(s) available" fi
Packages Update
$TERMINAL -e paru
Dunst
[module/dunst] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/dunst-toggle.sh >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/dunst-status.sh interval = 2
Dunst Status script
tmpfile="/tmp/dunststatus"; if [ -f $tmpfile ]; then if grep -q "on" $tmpfile; then echo ""; elif grep -q "off" $tmpfile; then echo ""; fi else echo ""; fi
Dunst Toggle
tmpfile="/tmp/dunststatus"; if [ -f $tmpfile ] && grep -q "off" $tmpfile ; then killall -SIGUSR2 dunst && \ echo "on" > $tmpfile; notify-send --hint=string:x-dunst-stack-tag:KLJ63nVo "Notifications " "Activated"; else notify-send --hint=string:x-dunst-stack-tag:KLJ63nVo "Notifications " "Deactivated"; sleep 1 && \ killall -SIGUSR1 dunst && \ echo "off" > $tmpfile; fi
Lock Screen
[module/lockscreen] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/lockscreen-toggle.sh >/dev/null 2>%1 & click-right = ~/.local/bin/lockscreen >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/lockscreen-status.sh interval = 2
Lock screen Status script
if pgrep -x "xautolock" >/dev/null then echo ""; else echo ""; fi
Toggle Automatic Lock Screen
if pgrep -x "xautolock" >/dev/null ; then pkill xautolock && \ notify-send --hint=string:x-dunst-stack-tag:tH6bxvvv 'Lock Screen ' 'Desactivated' else xautolock -locker "~/.local/bin/lockscreen" -detectsleep -time 30 -notify 60 -notifier "notify-send -u --hint=string:x-dunst-stack-tag:tH6bxvvv critical -t 10000 -- 'Locking Screen' '60 seconds'" & notify-send --hint=string:x-dunst-stack-tag:tH6bxvvv 'Lock Screen ' 'Activated' fi
Network
[module/wired-network] type = internal/network interface = enp57s0u2u4u4 label-connected = %{A3:bash ~/.config/polybar/scripts/connection-manager.sh >/dev/null 2>%1 &:}%{A1:bash ~/.config/polybar/scripts/connection-toggle.sh enp57s0u2u4u4 >/dev/null 2>%1 &:} %local_ip%%{A}%{A} label-connected-foreground = ${colors.fg} label-disconnected = %{A3:bash ~/.config/polybar/scripts/connection-manager.sh >/dev/null 2>%1 &:}%{A1:bash ~/.config/polybar/scripts/connection-toggle.sh enp57s0u2u4u4 >/dev/null 2>%1 &:}%{A}%{A} label-disconnected-foreground = #777
[module/wireless-network] type = internal/network interface = wlp2s0 format-connected = <label-connected> format-disconnected = <label-disconnected> label-connected = %{A3:bash ~/.config/polybar/scripts/connection-manager.sh >/dev/null 2>%1 &:}%{A1:bash ~/.config/polybar/scripts/connection-toggle.sh wlp2s0 >/dev/null 2>%1 &:}直 %essid%%{A}%{A} label-connected-foreground = ${colors.fg} label-disconnected = %{A3:bash ~/.config/polybar/scripts/connection-manager.sh >/dev/null 2>%1 &:}%{A1:bash ~/.config/polybar/scripts/connection-toggle.sh wlp2s0 >/dev/null 2>%1 &:}直%{A}%{A} label-disconnected-foreground = #777
Run Network Manager
$TERMINAL -e sudo nmtui
Toggle Wifi or Ethernet
# Check if an argument is passed if [ -z "$1" ] then exit 1 fi isdevicedown=$(nmcli device status | grep ^$1 | grep disconnected) if [ -z "$isdevicedown" ] then notify-send --hint=string:x-dunst-stack-tag:EfjAHGgu "$1" "Disconnecting..." && \ nmcli device disconnect $1 && \ notify-send --hint=string:x-dunst-stack-tag:EfjAHGgu "$1" "Disconnected" else notify-send --hint=string:x-dunst-stack-tag:EfjAHGgu "$1" "Connection..." && \ nmcli device connect $1 && \ notify-send --hint=string:x-dunst-stack-tag:EfjAHGgu "$1" "Connected" fi
Bluetooth
[module/bluetooth] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/bluetooth-toggle.sh >/dev/null 2>%1 & click-right = ~/.config/polybar/scripts/bluetooth-run.sh >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/bluetooth-status.sh interval = 2
bluetooth-run.sh
- Bluetooth Run Manager
blueman-manager && pkill blueman-applet
bluetooth-status.sh
- Bluetooth Connection Status
controllerid="9C:B6:D0:96:6E:C0" isconnected=$(bluetoothctl show $controllerid | grep Powered | grep yes) if [ -z "$isconnected" ] then echo "" else echo "%{F#859900}%{F-}" fi
bluetooth-toggle.sh
- Toggle Bluetooth Connection
controllerid="9C:B6:D0:96:6E:C0" isconnected=$(bluetoothctl show $controllerid | grep Powered | grep yes) if [ -z "$isconnected" ] then bluetoothctl power on && \ notify-send --hint=string:x-dunst-stack-tag:kidF4g53 "Bluetooth" "Power ON" else bluetoothctl power off && \ notify-send --hint=string:x-dunst-stack-tag:kidF4g53 "Bluetooth" "Power OFF" fi
NordVPN
[module/nordvpn] type = custom/script format-underline = ${colors.bg} click-left = ~/.local/bin/nordvpn-toggle >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/nordvpn-status.sh interval = 2
Nordvpn Status script
tmpfile="/tmp/vpnstatus"; if [ -f $tmpfile ] && grep -q "on" $tmpfile; then echo "%{F#859900}%{F-}"; else echo ""; fi
Nordvpn Toggle
The script is accessible here.
High cursor
This is using this program: module/
[module/cursor] type = custom/script format-underline = ${colors.bg} click-left = ~/.config/polybar/scripts/cursor-toggle.sh >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/cursor-status.sh interval = 2
Cursor - Status
if pgrep -x "highlight-point" >/dev/null; then echo "%{F#859900}%{F-}"; else echo ""; fi
Toggle Cursor
if pgrep -x "highlight-point" >/dev/null; then killall highlight-point && \ notify-send --hint=string:x-dunst-stack-tag:kidF4g53 "Cursor" "Turned off"; else nohup highlight-pointer -r 10 > /dev/null 2>&1 & notify-send --hint=string:x-dunst-stack-tag:kidF4g53 "Cursor" "Highlight..."; fi
Mounted Drives
[module/drive_tmp] type = custom/script format-underline = ${colors.bg} click-left = ~/.local/bin/mount-dir tmp_14_days >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/drive-status.sh tmp_14_days T interval = 5
[module/drive_groupshare] type = custom/script format-underline = ${colors.bg} click-left = ~/.local/bin/mount-dir groupshare >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/drive-status.sh groupshare G interval = 5
[module/drive_homelab] type = custom/script format-underline = ${colors.bg} click-left = ~/.local/bin/mount-dir homelab >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/drive-status.sh homelab H interval = 5
[module/drive_unix_home] type = custom/script format-underline = ${colors.bg} click-left = ~/.local/bin/mount-dir unix_home >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/drive-status.sh unix_home U interval = 5
[module/drive_monochromator] type = custom/script format-underline = ${colors.bg} click-left = ~/.local/bin/mount-dir monochromators >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/drive-status.sh monochromators M interval = 5
[module/drive_data_id21] type = custom/script format-underline = ${colors.bg} click-left = ~/.local/bin/mount-dir data_id21 >/dev/null 2>%1 & format = <label> exec = ~/.config/polybar/scripts/drive-status.sh data_id21 D interval = 5
Drive - Status
if mountpoint -q ~/mnt/$1; then echo "%{F#859900}$2 歷%{F-}"; else echo "$2 轢"; fi
Screenshot
[module/screenshot] type = custom/text content = "" click-left = ~/.local/bin/screenshot >/dev/null 2>%1 &