Skip to content

Instantly share code, notes, and snippets.

@kuznero
Last active October 17, 2022 17:36
Show Gist options
  • Star 23 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save kuznero/f4e983c708cd2bdcadc97be695baacf8 to your computer and use it in GitHub Desktop.
Save kuznero/f4e983c708cd2bdcadc97be695baacf8 to your computer and use it in GitHub Desktop.
Install polybar on Ubuntu 18.03

Polybar for i3

Installation in Ubuntu 18.04

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
@zus0
Copy link

zus0 commented Mar 5, 2020

plz remove i3-wm, and add git to apt-get install. This broke couple of my systems, and made me reinstall ubuntu.

@Hitomi98
Copy link

how can I launch polybar? launch.sh doesn't exist within the config/polybar folder

@Ivanioel
Copy link

how can I launch polybar? launch.sh doesn't exist within the config/polybar folder


# Terminate already running bar instances
killall -q polybar
# If all your bars have ipc enabled, you can also use 
# polybar-msg cmd quit

# Launch bar1 and bar2
echo "---" | tee -a /tmp/polybar1.log /tmp/polybar2.log
polybar bar1 >>/tmp/polybar1.log 2>&1 &
polybar bar2 >>/tmp/polybar2.log 2>&1 &

echo "Bars launched..."

Be sure you change the bar name(s) from your config

@kemalkolcuoglu
Copy link

Hello,
python-xcbgen cannot install on Ubuntu 20.04. Could you please help me for this?
E: Unable to locate package python-xcbgen

@alyssonzanchi
Copy link

Hello,
python-xcbgen cannot install on Ubuntu 20.04. Could you please help me for this?
E: Unable to locate package python-xcbgen

Hello,

Try using python3-xcbgen!!

@kemalkolcuoglu
Copy link

Hello,
python-xcbgen cannot install on Ubuntu 20.04. Could you please help me for this?
E: Unable to locate package python-xcbgen

Hello,

Try using python3-xcbgen!!

Yeah! That's work! Thanks Superman :)

@samueltwallace
Copy link

samueltwallace commented May 15, 2020

Hi, still having problems on Ubuntu 20.04. Installed python3-xcbgen but build.sh still spits out an error that it can't find the package.

Partial output of build.sh:

-- XCB[XCB]: Found component XCB
-- XCB[ICCCM]: Found component ICCCM
-- XCB[EWMH]: Found component EWMH
-- XCB[UTIL]: Found component UTIL
-- XCB[IMAGE]: Found component IMAGE
-- Searching for xcbgen with python
-- Searching for xcbgen with python3
-- Searching for xcbgen with python2
-- Searching for xcbgen with python2.7
CMake Error at lib/xpp/CMakeLists.txt:70 (message):
Missing required python module: xcbgen

No idea what the problem could be.

EDIT: I had Anaconda Base active. I needed to conda deactivate before I ran build.sh.

@natec425
Copy link

A note for pyenv users. The script was using the wrong python thanks to my pyenv global ... setting.

Further complicating things, pyenv is currently broken for 20.04 in that it doesn't detect the system python (where apt would be installing these python modules). This issue discusses the problem and this comment outlines the solution that worked for me).

@christiaan-janssen
Copy link

That was the trick for me:
pyenv global system

@Relox09
Copy link

Relox09 commented Nov 4, 2020

SyntaxError: invalid syntax
make[2]: *** [lib/xpp/CMakeFiles/xpp.dir/build.make:74: ../lib/xpp/include/xpp/proto/x.hpp] Errore 1
make[2]: *** Eliminazione del file «../lib/xpp/include/xpp/proto/x.hpp»
make[2]: uscita dalla directory «/home/dominik/polybar/build»
make[1]: *** [CMakeFiles/Makefile2:536: lib/xpp/CMakeFiles/xpp.dir/all] Errore 2
make[1]: uscita dalla directory «/home/dominik/polybar/build»
make: *** [Makefile:130: all] Errore 2
** Failed to build project

I have this error, can you help me, I'm not very experienced in fact I'm almost a beginner

@AnustupBhaumik
Copy link

can you please tell me how to do it in awesomewm?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment