Skip to content

Instantly share code, notes, and snippets.

@shubhamoli
Forked from kuznero/install-polybar.md
Created July 11, 2020 12:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shubhamoli/9c61315b95ccb464179953047d0977c5 to your computer and use it in GitHub Desktop.
Save shubhamoli/9c61315b95ccb464179953047d0977c5 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment