sudo apt-get install \
cmake cmake-data libcairo2-dev libxcb1-dev libxcb-ewmh-dev \
libxcb-icccm4-dev libxcb-image0-dev libxcb-randr0-dev \
libxcb-util0-dev libxcb-xkb-dev pkg-config python-xcbgen \
xcb-proto libxcb-xrm-dev i3-wm libasound2-dev libmpdclient-dev \
libiw-dev libcurl4-openssl-dev libpulse-dev \
libxcb-composite0-dev xcb libxcb-ewmh2
git clone https://github.com/jaagr/polybar.git
cd polybar
git tag # see what version do you need
git checkout 3.4.1
./build.sh
During the build process answer Yes
to all the options (except the first on
on using GCC instead of CLang if available).
And in the end say Yes
to run sudo make install
.
Nice fonts:
FreeSans:style=Regular
Bitstream Charter:style=Regular
Liberation Sans Narrow:style=Regular
+ Liberation Sans:style=Regular
Liberation Mono:style=Regular
++ Lato:style=Regular
FreeSerif:style=Regular
+ Liberation Serif:style=Regular
Configuration:
;==========================================================
;
;
; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
;
;
; To learn more about how to configure Polybar
; go to https://github.com/polybar/polybar
;
; The README contains a lot of information
;
;==========================================================
[colors]
;background = ${xrdb:color0:#222}
background = #222
background-alt = #444
;foreground = ${xrdb:color7:#222}
foreground = #dfdfdf
foreground-alt = #555
primary = #ffb52a
secondary = #e60053
alert = #bd2c40
[bar/example]
monitor = ${env:MONITOR:}
width = 100%
height = 32
;offset-x = 1%
;offset-y = 1%
radius = 0.0
fixed-center = false
background = ${colors.background}
foreground = ${colors.foreground}
line-size = 3
line-color = #f00
border-size = 2
border-color = #00000000
padding-left = 0
padding-right = 2
module-margin-left = 1
module-margin-right = 2
; Query installed fonts with `fc-list`
font-0 = Lato:style=Regular:size=13
font-1 = Lato:style=Regular:size=13
font-2 = Lato:style=Regular:size=13
modules-left = bspwm xkeyboard wifi-status vpn-status eth i3
modules-center = mpd
modules-right = xbacklight pulseaudio backlight-acpi memory cpu battery temperature filesystem date
tray-position = right
tray-padding = 2
;tray-background = #0063ff
;wm-restack = bspwm
wm-restack = i3
; override-redirect = true
;scroll-up = bspwm-desknext
;scroll-down = bspwm-deskprev
;scroll-up = i3wm-wsnext
;scroll-down = i3wm-wsprev
cursor-click = pointer
cursor-scroll = ns-resize
[module/xwindow]
type = internal/xwindow
label = %title:0:30:...%
[module/xkeyboard]
type = internal/xkeyboard
; List of indicators to ignore
blacklist-0 = num lock
blacklist-1 = scroll lock
; Available tags:
; <label-layout> (default)
; <label-indicator> (default)
format = <label-layout> <label-indicator>
format-spacing = 0
; Available tokens:
; %layout%
; %name%
; %number%
; %icon%
; Default: %layout%
label-layout = %name%
label-layout-padding = 2
label-layout-background = ${colors.background-alt}
label-layout-foreground = #000
; Available tokens:
; %name%
; Default: %name%
; @deprecated, use label-indicator-on
label-indicator = %name%
; layout-icon-[0-9]+ = layout;icon
; Assign each layout an icon that will be available as %icon% token for the
; <label-layout> tag. The part before ';' will try to match %layout% value.
layout-icon-default = some-icon
layout-icon-0 = ch;C
layout-icon-1 = us;U
; indicator-icon-[0-9]+ = indicator;off icon;on icon
; Provides the content of the %icon% token in label-indicator-*
indicator-icon-default =
indicator-icon-0 = caps lock;-CL;+CL
indicator-icon-1 = scroll lock;;+SL
indicator-icon-2 = num lock;-NL;+NL
; Replaces label-indicator
; Available tokens:
; %name%
; %icon%
; Default: %name%
label-indicator-on = +%name%
; Available tokens:
; %name%
; %icon%
; Default: (none)
label-indicator-off = -%name%
; Replaces label-indicator-* if for specific indicators
; Available tokens:
; %name%
; %icon%
label-indicator-on-capslock =
label-indicator-off-capslock =
label-indicator-on-numlock =
label-indicator-off-numlock =
label-indicator-on-scrolllock =
label-indicator-off-scrolllock =
; type = internal/xkeyboard
; blacklist-0 = num lock
; blacklist-1 = scroll lock
; format-prefix = " "
; format-prefix-foreground = ${colors.foreground-alt}
; format-prefix-underline = ${colors.secondary}
; label-layout = %layout%
; label-layout-underline = ${colors.secondary}
; label-indicator-padding = 2
; label-indicator-margin = 1
; label-indicator-background = ${colors.secondary}
; label-indicator-underline = ${colors.secondary}
[module/filesystem]
type = internal/fs
; Mountpoints to display
mount-0 = /
; mount-1 = /home
; mount-2 = /var
; Seconds to sleep between updates
; Default: 30
interval = 10
; Display fixed precision values
; Default: false
fixed-values = true
; Spacing between entries
; Default: 2
spacing = 4
; Available tags:
; <label-mounted> (default)
; <bar-free>
; <bar-used>
; <ramp-capacity>
format-mounted = <label-mounted>
; Available tags:
; <label-unmounted> (default)
format-unmounted = <label-unmounted>
; Available tokens:
; %mountpoint%
; %type%
; %fsname%
; %percentage_free%
; %percentage_used%
; %total%
; %free%
; %used%
; Default: %mountpoint% %percentage_free%%
label-mounted = %mountpoint%: %percentage_free%% of %total%
label-mounted-background = ${colors.background-alt}
label-mounted-foreground = #000
label-mounted-padding = 2
; Available tokens:
; %mountpoint%
; Default: %mountpoint% is not mounted
label-unmounted = %mountpoint%: not mounted
label-unmounted-foreground = #55
[module/bspwm]
type = internal/bspwm
label-focused = %index%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2
label-occupied = %index%
label-occupied-padding = 2
label-urgent = %index%!
label-urgent-background = ${colors.alert}
label-urgent-padding = 2
label-empty = %index%
label-empty-foreground = ${colors.foreground-alt}
label-empty-padding = 2
; Separator in between workspaces
; label-separator = |
[module/i3]
type = internal/i3
format = <label-state> <label-mode>
index-sort = true
wrapping-scroll = false
; Only show workspaces on the same output as the bar
;pin-workspaces = true
label-mode-padding = 2
label-mode-foreground = #000
label-mode-background = ${colors.primary}
; focused = Active workspace on focused monitor
label-focused = %index%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2
; unfocused = Inactive workspace on any monitor
label-unfocused = %index%
label-unfocused-padding = 2
; visible = Active workspace on unfocused monitor
label-visible = %index%
label-visible-background = ${self.label-focused-background}
label-visible-underline = ${self.label-focused-underline}
label-visible-padding = ${self.label-focused-padding}
; urgent = Workspace with urgency hint set
label-urgent = %index%
label-urgent-background = ${colors.alert}
label-urgent-padding = 2
; Separator in between workspaces
; label-separator = |
[module/mpd]
type = internal/mpd
format-online = <label-song> <icon-prev> <icon-stop> <toggle> <icon-next>
icon-prev =
icon-stop =
icon-play =
icon-pause =
icon-next =
label-song-maxlen = 25
label-song-ellipsis = true
[module/xbacklight]
type = internal/xbacklight
format = <label> <bar>
label = %percentage:2%%
label-foreground = ${colors.foreground-alt}
bar-width = 10
bar-indicator = |
bar-indicator-foreground = ${colors.foreground}
bar-indicator-font = 2
bar-fill = ─
bar-fill-font = 2
bar-fill-foreground = #9f78e1
bar-empty = ─
bar-empty-font = 2
bar-empty-foreground = ${colors.foreground-alt}
[module/backlight-acpi]
inherit = module/xbacklight
type = internal/backlight
card = intel_backlight
[module/cpu]
type = internal/cpu
interval = 2
format-prefix = "CPU "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #f90000
label = %percentage:2%%
[module/memory]
type = internal/memory
interval = 2
format-prefix = "MEM "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #4bffdc
label = %percentage_used%%
[module/wifi-status]
type = custom/script
exec = ~/.config/polybar/connections.sh wifi
interval = 3
format-underline = ${colors.foreground-alt}
[module/vpn-status]
type = custom/script
exec = ~/.config/polybar/connections.sh vpn
interval = 3
format-underline = ${colors.foreground-alt}
[module/eth]
type = internal/network
interface = tun0
interval = 3.0
format-connected-underline = #55aa55
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.foreground-alt}
label-connected = %local_ip%
format-disconnected =
;format-disconnected = <label-disconnected>
;format-disconnected-underline = ${self.format-connected-underline}
;label-disconnected = %ifname% disconnected
;label-disconnected-foreground = ${colors.foreground-alt}
[module/date]
type = internal/date
interval = 5
date =
date-alt = " %Y-%m-%d"
time = %H:%M
time-alt = %H:%M:%S
format-prefix =
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #0a6cf5
label = %date% %time%
[module/pulseaudio]
type = internal/pulseaudio
format-volume = <label-volume> <bar-volume>
label-volume = %percentage%%
label-volume-foreground = ${colors.foreground-alt}
label-muted = 🔇 muted
label-muted-foreground = #666
bar-volume-width = 10
bar-volume-foreground-0 = #55aa55
bar-volume-foreground-1 = #55aa55
bar-volume-foreground-2 = #55aa55
bar-volume-foreground-3 = #55aa55
bar-volume-foreground-4 = #55aa55
bar-volume-foreground-5 = #f5a70a
bar-volume-foreground-6 = #ff5555
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.foreground-alt}
[module/alsa]
type = internal/alsa
format-volume = <label-volume> <bar-volume>
label-volume = VOL
label-volume-foreground = ${root.foreground}
format-muted-prefix = " "
format-muted-foreground = ${colors.foreground-alt}
label-muted = sound muted
bar-volume-width = 10
bar-volume-foreground-0 = #55aa55
bar-volume-foreground-1 = #55aa55
bar-volume-foreground-2 = #55aa55
bar-volume-foreground-3 = #55aa55
bar-volume-foreground-4 = #55aa55
bar-volume-foreground-5 = #f5a70a
bar-volume-foreground-6 = #ff5555
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.foreground-alt}
[module/battery]
type = internal/battery
battery = BAT0
adapter = AC
full-at = 98
format-charging = <animation-charging> <label-charging>
format-charging-underline = #ffb52a
format-discharging = <animation-discharging> <label-discharging>
format-discharging-underline = ${self.format-charging-underline}
format-full-prefix = " "
format-full-prefix-foreground = ${colors.foreground-alt}
format-full-underline = ${self.format-charging-underline}
ramp-capacity-0 =
ramp-capacity-1 =
ramp-capacity-2 =
ramp-capacity-foreground = ${colors.foreground-alt}
animation-charging-0 =
animation-charging-1 =
animation-charging-2 =
animation-charging-foreground = ${colors.foreground-alt}
animation-charging-framerate = 750
animation-discharging-0 =
animation-discharging-1 =
animation-discharging-2 =
animation-discharging-foreground = ${colors.foreground-alt}
animation-discharging-framerate = 750
[module/temperature]
type = internal/temperature
thermal-zone = 0
warn-temperature = 60
format = <ramp> <label>
format-underline = #f50a4d
format-warn = <ramp> <label-warn>
format-warn-underline = ${self.format-underline}
label = %temperature-c%
label-warn = %temperature-c%
label-warn-foreground = ${colors.secondary}
ramp-0 =
ramp-1 =
ramp-2 =
ramp-foreground = ${colors.foreground-alt}
[settings]
screenchange-reload = true
;compositing-background = xor
;compositing-background = screen
;compositing-foreground = source
;compositing-border = over
pseudo-transparency = false
[global/wm]
margin-top = 2
margin-bottom = 2
; vim:ft=dosini
And, connections.sh
:
#!/usr/bin/env bash
command -v nmcli >/dev/null 2>&1 || { echo >&2 "[nmcli] is required, but not installed. Aborting."; exit 1; }
# can be wifi, vpn, etc.
KIND=$1
KIND=${KIND:-wifi}
cons=$(nmcli con | grep -i " $KIND " | grep -v -E '\-\-' | awk '{print $1}')
len=0
for con in $cons; do
len=$((len + 1))
echo $con
done
if [ "$len" -eq "0" ]; then
kind=$(echo $KIND | awk '{ print toupper($0) }')
echo "$kind disconnected"
fi