Polybar is a tool created to help users build beautiful and highly customizable status bars, most users running window managers should know this tool. Polybar can be configured to replace your traditional desktop environment without a mastery of shell scripting.

This guide will walk you through the steps to Install and configure Polybar status bar for use with i3wm on a Fedora workstation. The configurations will vary for other Desktop environments but should be similar to example shown here.

Features of Polybar

By installing/building Polybar, you will set the following services on the status bar.

  • Systray icons
  • Window title
  • Playback controls and status display for MPD using libmpdclient
  • ALSA volume controls
  • Workspace and desktop panel for bspwm and i3
  • Workspace module for EWMH compliant window managers
  • Keyboard layout and indicator status
  • CPU and memory load indicator
  • Battery display
  • Network connection details
  • Backlight level
  • Date and time label
  • Time-based shell script execution
  • Command output tailing
  • User-defined menu tree
  • Inter-process messaging
  • And more…

Step 1: Install Development Tools.

For Fedora systems, the polybar package is not available on the repositories. We will build it from source, so development tools are required.

sudo dnf install -y @development-tools cmake gcc-c++ autoconf automake

Install build dependencies for i3, Volume controls, mpd, network, Github e.t.c.

sudo dnf install xcb-util-xrm-devel xcb-proto xcb-util-devel xcb-util-wm-devel xcb-util-cursor-devel xcb-util-image-devel alsa-lib-devel pulseaudio-libs-devel i3-ipc jsoncpp-devel libmpdclient-devel libcurl-devel wireless-tools-devel libnl3-devel cairo-devel 

Step 2: Download the latest Polybar source.

After dependencies are installed, download the latest release of Polybar by cloning the Github repository.

cd /tmp
git clone --recursive https://github.com/polybar/polybar

To compile and install polybar, run the following commands:

cd polybar
sudo ./build.sh

You should get an output similar to this:

** Fetching submodules

** A build dir already exists (pass -f to replace)

** Setting build options

** Use GCC even if Clang is installed ----------------------------- [y/N]: y
** Include support for "internal/i3" (requires i3) ---------------- [y/N]: 

** Include support for "internal/alsa" (requires alsalib) --------- [y/N]: y
** Include support for "internal/pulseaudio" (requires libpulse) -- [y/N]: y
** Include support for "internal/network" (requires libnl/libiw) -- [y/N]: y
** Include support for "internal/mpd" (requires libmpdclient) ----- [y/N]: y
** Include support for "internal/github" (requires libcurl) ------- [y/N]: y
** Build "polybar-msg" used to send ipc messages ------------------ [y/N]: y
** Executing cmake command

-- Trying to enable ccache
-- Couldn't locate ccache, disabling ccache...
-- The CXX compiler identification is GNU 9.1.1
-- Check for working CXX compiler: /usr/bin/g++
-- Check for working CXX compiler: /usr/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
y-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- No build type specified; using Release
-- Using supported compiler GNU-9.1.1
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.1") 
-- Looking for C++ include pthread.h
-- Looking for C++ include pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Check if compiler accepts -pthread
-- Check if compiler accepts -pthread - yes
-- Found Threads: TRUE  
-- Checking for module 'cairo-fc'
--   Found cairo-fc, version 1.16.0
-- Checking for module 'alsa'
--   Found alsa, version 1.1.9
-- Checking for module 'libcurl'
--   Found libcurl, version 7.64.0
-- Checking for module 'libmpdclient'
--   Found libmpdclient, version 2.14
-- Checking for module 'libnl-genl-3.0'
--   Found libnl-genl-3.0, version 3.4.0
-- Checking for module 'libpulse'
--   Found libpulse, version 12.2-rebootstrapped
-- Checking for module 'xcb-composite'
--   Found xcb-composite, version 1.13.1
-- Checking for module 'xcb-xkb'
--   Found xcb-xkb, version 1.13.1
-- Checking for module 'xcb-randr'
--   Found xcb-randr, version 1.13.1
-- Checking for module 'xcb-randr>=1.12'
--   Found xcb-randr, version 1.13.1
-- Checking for module 'xcb-xrm'
--   Found xcb-xrm, version 1.3
-- Checking for module 'xcb-cursor'
--   Found xcb-cursor, version 0.1.3
--  Build:
--    Version: 3.3.0-98-gc650513
--    Type: Release
--    CXX: /usr/bin/g++  -Wall -Wextra -Wpedantic -O2 -DNDEBUG
--    LD: /usr/bin/ld  
--  Targets:
-- [X]   polybar-msg
-- [ ]   testsuite
-- [ ]   documentation
--  Module support:
-- [X]   alsa (1.1.9)
-- [X]   curl (7.64.0)
-- [ ]   i3
-- [X]   mpd (2.14)
-- [X]   network (libnl) (3.4.0)
-- [X]   pulseaudio (12.2-rebootstrapped)
-- [X]   xkeyboard (1.13.1)
--  X extensions:
-- [X]   xcb-randr (1.13.1)
-- [X]   xcb-randr (monitor support) (1.13.1)
-- [X]   xcb-composite (1.13.1)
-- [X]   xcb-xkb (1.13.1)
-- [X]   xcb-xrm (1.3)
-- [X]   xcb-cursor (0.1.3)
--  Log options:
-- [X]   Trace logging
-- The C compiler identification is GNU 9.1.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Checking for module 'xcb-proto'
--   Found xcb-proto, version 1.13
-- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.16", minimum required is "2.7") 
-- XCB[XCB]: Found component XCB
-- Found XCB_XCB: /usr/lib64/libxcb.so  
-- XCB[ICCCM]: Found component ICCCM
-- Found XCB_ICCCM: /usr/lib64/libxcb-icccm.so  
-- XCB[EWMH]: Found component EWMH
-- Found XCB_EWMH: /usr/lib64/libxcb-ewmh.so  
-- XCB[UTIL]: Found component UTIL
-- Found XCB_UTIL: /usr/lib64/libxcb-util.so  
-- XCB[IMAGE]: Found component IMAGE
-- Found XCB_IMAGE: /usr/lib64/libxcb-image.so  
-- Found XCB: /usr/lib64/libxcb.so;/usr/lib64/libxcb-icccm.so;/usr/lib64/libxcb-ewmh.so;/usr/lib64/libxcb-util.so;/usr/lib64/libxcb-image.so  
-- Searching for xcbgen with python2
-- Searching for xcbgen with python2.7
-- Searching for xcbgen with python3
-- Found xcbgen in /usr/lib/python3.7/site-packages
-- XCB[RANDR]: Found component RANDR
-- Found XCB_RANDR: /usr/lib64/libxcb-randr.so  
-- Found XCB: /usr/lib64/libxcb.so;/usr/lib64/libxcb-icccm.so;/usr/lib64/libxcb-ewmh.so;/usr/lib64/libxcb-util.so;/usr/lib64/libxcb-image.so;/usr/lib64/libxcb-randr.so  
-- XCB[COMPOSITE]: Found component COMPOSITE
-- Found XCB_COMPOSITE: /usr/lib64/libxcb-composite.so  
-- Found XCB: /usr/lib64/libxcb.so;/usr/lib64/libxcb-icccm.so;/usr/lib64/libxcb-ewmh.so;/usr/lib64/libxcb-util.so;/usr/lib64/libxcb-image.so;/usr/lib64/libxcb-randr.so;/usr/lib64/libxcb-composite.so  
-- XCB[XKB]: Found component XKB
-- Found XCB_XKB: /usr/lib64/libxcb-xkb.so  
-- Found XCB: /usr/lib64/libxcb.so;/usr/lib64/libxcb-icccm.so;/usr/lib64/libxcb-ewmh.so;/usr/lib64/libxcb-util.so;/usr/lib64/libxcb-image.so;/usr/lib64/libxcb-randr.so;/usr/lib64/libxcb-composite.so;/usr/lib64/libxcb-xkb.so  
-- xpp: including xcb proto composite.xml
-- xpp: including xcb proto randr.xml
-- xpp: including xcb proto xkb.xml
-- xpp: including xcb proto xproto.xml
-- Font not found: fixed:pixelsize=10
-- Font not found: unifont:fontformat=truetype
-- Font not found: siji:pixelsize=10
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jmutai/Downloads/polybar/build
** Building project

[  1%] Generating ../../../lib/xpp/include/xpp/proto/x.hpp
[  2%] Generating ../../../lib/xpp/include/xpp/proto/composite.hpp
[  3%] Generating ../../../lib/xpp/include/xpp/proto/randr.hpp
list: size, ['red', 'green', 'blue']
list: size, ['red', 'green', 'blue']
[  4%] Generating ../../../lib/xpp/include/xpp/proto/xkb.hpp
Scanning dependencies of target xpp
[  5%] Linking CXX static library libxpp.a
[  5%] Built target xpp
Scanning dependencies of target poly
[  6%] Building CXX object bin/CMakeFiles/poly.dir/adapters/alsa/control.cpp.o
[  7%] Building CXX object bin/CMakeFiles/poly.dir/adapters/alsa/mixer.cpp.o
[  8%] Building CXX object bin/CMakeFiles/poly.dir/adapters/mpd.cpp.o
[  9%] Building CXX object bin/CMakeFiles/poly.dir/adapters/net.cpp.o
[ 10%] Building CXX object bin/CMakeFiles/poly.dir/adapters/net_nl.cpp.o
[ 12%] Building CXX object bin/CMakeFiles/poly.dir/adapters/pulseaudio.cpp.o
[ 13%] Building CXX object bin/CMakeFiles/poly.dir/cairo/utils.cpp.o
[ 14%] Building CXX object bin/CMakeFiles/poly.dir/components/bar.cpp.o
[ 15%] Building CXX object bin/CMakeFiles/poly.dir/components/builder.cpp.o
[ 16%] Building CXX object bin/CMakeFiles/poly.dir/components/command_line.cpp.o
[ 17%] Building CXX object bin/CMakeFiles/poly.dir/components/config.cpp.o
[ 18%] Building CXX object bin/CMakeFiles/poly.dir/components/controller.cpp.o
[ 19%] Building CXX object bin/CMakeFiles/poly.dir/components/ipc.cpp.o
[ 20%] Building CXX object bin/CMakeFiles/poly.dir/components/logger.cpp.o
[ 21%] Building CXX object bin/CMakeFiles/poly.dir/components/parser.cpp.o
[ 23%] Building CXX object bin/CMakeFiles/poly.dir/components/renderer.cpp.o
[ 24%] Building CXX object bin/CMakeFiles/poly.dir/components/screen.cpp.o
[ 25%] Building CXX object bin/CMakeFiles/poly.dir/components/taskqueue.cpp.o
[ 26%] Building CXX object bin/CMakeFiles/poly.dir/drawtypes/animation.cpp.o
[ 27%] Building CXX object bin/CMakeFiles/poly.dir/drawtypes/iconset.cpp.o
[ 28%] Building CXX object bin/CMakeFiles/poly.dir/drawtypes/label.cpp.o
[ 29%] Building CXX object bin/CMakeFiles/poly.dir/drawtypes/progressbar.cpp.o
[ 30%] Building CXX object bin/CMakeFiles/poly.dir/drawtypes/ramp.cpp.o
[ 31%] Building CXX object bin/CMakeFiles/poly.dir/events/signal_emitter.cpp.o
[ 32%] Building CXX object bin/CMakeFiles/poly.dir/events/signal_receiver.cpp.o
[ 34%] Building CXX object bin/CMakeFiles/poly.dir/modules/alsa.cpp.o
[ 35%] Building CXX object bin/CMakeFiles/poly.dir/modules/backlight.cpp.o
[ 36%] Building CXX object bin/CMakeFiles/poly.dir/modules/battery.cpp.o
[ 37%] Building CXX object bin/CMakeFiles/poly.dir/modules/bspwm.cpp.o
[ 38%] Building CXX object bin/CMakeFiles/poly.dir/modules/counter.cpp.o
[ 39%] Building CXX object bin/CMakeFiles/poly.dir/modules/cpu.cpp.o
[ 40%] Building CXX object bin/CMakeFiles/poly.dir/modules/date.cpp.o
[ 41%] Building CXX object bin/CMakeFiles/poly.dir/modules/fs.cpp.o
[ 42%] Building CXX object bin/CMakeFiles/poly.dir/modules/github.cpp.o
[ 43%] Building CXX object bin/CMakeFiles/poly.dir/modules/ipc.cpp.o
[ 45%] Building CXX object bin/CMakeFiles/poly.dir/modules/memory.cpp.o
[ 46%] Building CXX object bin/CMakeFiles/poly.dir/modules/menu.cpp.o
[ 47%] Building CXX object bin/CMakeFiles/poly.dir/modules/meta/base.cpp.o
[ 48%] Building CXX object bin/CMakeFiles/poly.dir/modules/mpd.cpp.o
[ 49%] Building CXX object bin/CMakeFiles/poly.dir/modules/network.cpp.o
[ 50%] Building CXX object bin/CMakeFiles/poly.dir/modules/pulseaudio.cpp.o
[ 51%] Building CXX object bin/CMakeFiles/poly.dir/modules/script.cpp.o
[ 52%] Building CXX object bin/CMakeFiles/poly.dir/modules/systray.cpp.o
[ 53%] Building CXX object bin/CMakeFiles/poly.dir/modules/temperature.cpp.o
[ 54%] Building CXX object bin/CMakeFiles/poly.dir/modules/text.cpp.o
[ 56%] Building CXX object bin/CMakeFiles/poly.dir/modules/xbacklight.cpp.o
[ 57%] Building CXX object bin/CMakeFiles/poly.dir/modules/xkeyboard.cpp.o
[ 58%] Building CXX object bin/CMakeFiles/poly.dir/modules/xwindow.cpp.o
[ 59%] Building CXX object bin/CMakeFiles/poly.dir/modules/xworkspaces.cpp.o
[ 60%] Building CXX object bin/CMakeFiles/poly.dir/utils/bspwm.cpp.o
[ 61%] Building CXX object bin/CMakeFiles/poly.dir/utils/command.cpp.o
[ 62%] Building CXX object bin/CMakeFiles/poly.dir/utils/concurrency.cpp.o
[ 63%] Building CXX object bin/CMakeFiles/poly.dir/utils/env.cpp.o
[ 64%] Building CXX object bin/CMakeFiles/poly.dir/utils/factory.cpp.o
[ 65%] Building CXX object bin/CMakeFiles/poly.dir/utils/file.cpp.o
[ 67%] Building CXX object bin/CMakeFiles/poly.dir/utils/http.cpp.o
[ 68%] Building CXX object bin/CMakeFiles/poly.dir/utils/inotify.cpp.o
[ 69%] Building CXX object bin/CMakeFiles/poly.dir/utils/io.cpp.o
[ 70%] Building CXX object bin/CMakeFiles/poly.dir/utils/process.cpp.o
[ 71%] Building CXX object bin/CMakeFiles/poly.dir/utils/socket.cpp.o
[ 72%] Building CXX object bin/CMakeFiles/poly.dir/utils/string.cpp.o
[ 73%] Building CXX object bin/CMakeFiles/poly.dir/utils/throttle.cpp.o
[ 74%] Building CXX object bin/CMakeFiles/poly.dir/x11/atoms.cpp.o
[ 75%] Building CXX object bin/CMakeFiles/poly.dir/x11/background_manager.cpp.o
[ 76%] Building CXX object bin/CMakeFiles/poly.dir/x11/connection.cpp.o
[ 78%] Building CXX object bin/CMakeFiles/poly.dir/x11/cursor.cpp.o
[ 79%] Building CXX object bin/CMakeFiles/poly.dir/x11/ewmh.cpp.o
[ 80%] Building CXX object bin/CMakeFiles/poly.dir/x11/extensions/composite.cpp.o
[ 81%] Building CXX object bin/CMakeFiles/poly.dir/x11/extensions/randr.cpp.o
[ 82%] Building CXX object bin/CMakeFiles/poly.dir/x11/extensions/xkb.cpp.o
[ 83%] Building CXX object bin/CMakeFiles/poly.dir/x11/icccm.cpp.o
[ 84%] Building CXX object bin/CMakeFiles/poly.dir/x11/registry.cpp.o
[ 85%] Building CXX object bin/CMakeFiles/poly.dir/x11/tray_client.cpp.o
[ 86%] Building CXX object bin/CMakeFiles/poly.dir/x11/tray_manager.cpp.o
[ 87%] Building CXX object bin/CMakeFiles/poly.dir/x11/window.cpp.o
[ 89%] Building CXX object bin/CMakeFiles/poly.dir/x11/winspec.cpp.o
[ 90%] Building CXX object bin/CMakeFiles/poly.dir/x11/xembed.cpp.o
[ 91%] Building CXX object bin/CMakeFiles/poly.dir/x11/xresources.cpp.o
[ 92%] Linking CXX static library libpoly.a
[ 92%] Built target poly
Scanning dependencies of target polybar
[ 93%] Building CXX object bin/CMakeFiles/polybar.dir/main.cpp.o
[ 94%] Linking CXX executable polybar
[ 94%] Built target polybar
Scanning dependencies of target polybar-msg
[ 95%] Building CXX object bin/CMakeFiles/polybar-msg.dir/ipc.cpp.o
[ 96%] Building CXX object bin/CMakeFiles/polybar-msg.dir/utils/env.cpp.o
[ 97%] Building CXX object bin/CMakeFiles/polybar-msg.dir/utils/file.cpp.o
[ 98%] Building CXX object bin/CMakeFiles/polybar-msg.dir/utils/string.cpp.o
[100%] Linking CXX executable polybar-msg
[100%] Built target polybar-msg
** Execute 'sudo make install'? [Y/n] 
** Install example configuration? [y/N]: y
[  5%] Built target xpp
[ 92%] Built target poly
[ 94%] Built target polybar
[100%] Built target polybar-msg
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/share/doc/polybar/config
-- Installing: /usr/local/share/bash-completion/completions/polybar
-- Installing: /usr/local/share/zsh/site-functions/_polybar
-- Installing: /usr/local/share/zsh/site-functions/_polybar_msg
-- Installing: /usr/local/bin/polybar
-- Installing: /usr/local/bin/polybar-msg
[  5%] Built target xpp
[ 97%] Built target poly
[100%] Built target polybar
Scanning dependencies of target userconfig
-- Installing: /root/.config/polybar/config
[100%] Built target userconfig
** Build complete!

Step 3: Confirm Polybar installation

Confirm polybar installation and features available.

$ which polybar  
/usr/local/bin/polybar

$ polybar --version
polybar 3.3.0-98-gc650513
Features: +alsa +curl -i3 +mpd +network(libnl) +pulseaudio +xkeyboard

Configuring Polybar

I recommend you visit Polybar documentation page to learn about its configuration for different environments.

Below is the polybar configuration for my i3wm – Path: ~/.config/polybar/config

;=====================================================
;
;   To learn more about how to configure Polybar
;   go to https://github.com/jaagr/polybar
;
;   The README contains alot of information
;
;=====================================================

[colors]
background = #ee2f343f
background-alt = #f72f343f
foreground = #f3f4f5
foreground-alt = #f3f4f5
foreground-dim = #676e7d
primary = #ffb52a
secondary = #e60053
alert = #ff6600

high = #268bd2
high-alt = #0c2b41

; other colors
black = #000000
red = #E06C75
green = #98C379
orange = #D19A66
blue = #61AEEE
magenta = #C678DD
cyan = #56B6C2
lightgray = #ABB2BF
darkgray = #5C6370
white = #FFFFFF


[bar/main]
;monitor = ${env:MONITOR:HDMI-1}
;bottom = true
override-redirect = true
wm-restack = i3
width = 100%
height = 18
offset-x = 0
offset-y = 0
;radius = 6.0
;fixed-center = false

overline-size = 2
overline-color = #f00
underline-size = 2
underline-color = ${colors.high}

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

line-size = 3
line-color = #f00

border-size = 4
border-color = #00000000

padding-left = 0
padding-right = 2

module-margin-left = 0
module-margin-right = 2

;font-0 = fixed:pixelsize=10;1
;font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
font-0 = Monaco:size=8:weight=bold
font-1 = FontAwesome:size=11
font-2 = siji:pixelsize=10;1

;modules-left = menu i3 xwindow
;modules-left = menu i3 xwindow
;modules-left = i3
modules-center = mpd
modules-right = fsroot fshome  xkeyboard memory cpu xbacklight volume wlan eth battery temperature date powermenu

tray-position = right
tray-padding = 2
;tray-transparent = true
;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

[module/xwindow]
type = internal/xwindow
;label = %title:0:30:...%
label = %title:0:30:...%  %{B- -o -u}


[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock

format-prefix = " "
format-underline = ${colors.secondary}
format-prefix-foreground = ${colors.foreground-alt}

label-layout = %layout%

label-indicator-padding = 2
label-indicator-background = ${colors.secondary}
label-indicator-underline = ${colors.secondary}

#[module/filesystem]
#type = internal/fs
#interval = 25
#
#mount-0 = /
#mount-1 = /home
#
#label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %free%
#;label-mounted = %mountpoint%: %percentage_free%% of %total%
#label-unmounted = %mountpoint% not mounted
#label-unmounted-foreground = ${colors.foreground-alt}

[module/bspwm]
type = internal/bspwm

label-focused = %name%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2

label-occupied = %name%
label-occupied-padding = 2

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

label-empty = %name%
label-empty-foreground = ${colors.foreground-alt}
label-empty-padding = 2

[module/i3]
type = internal/i3
format = <label-state> <label-mode>
name-sort = true
strip-wsnumbers = true  ;This will split the workspace name on ':'
ws-icon-0 = 1;
ws-icon-1 = 2; 
ws-icon-2 = 3; 
ws-icon-3 = 4; 
ws-icon-4 = 5; 
ws-icon-5 = 6; 
ws-icon-6 = 7; 
ws-icon-default = ♟

; 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 = %name%
label-focused-background = ${module/bspwm.label-focused-background}
label-focused-underline = ${module/bspwm.label-focused-underline}
label-focused-padding = ${module/bspwm.label-focused-padding}

; unfocused = Inactive workspace on any monitor
label-unfocused = %name%
label-unfocused-padding = ${module/bspwm.label-occupied-padding}

; visible = Active workspace on unfocused monitor
label-visible = %name%
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 = %name%
label-urgent-background = ${module/bspwm.label-urgent-background}
label-urgent-padding = ${module/bspwm.label-urgent-padding}

; 

[module/mpd]
type = internal/mpd
format-online = <icon-prev> <toggle> <icon-next> <icon-random>  <icon-repeat> <label-time> 
format-offline = <label-offline>
label-offline =  no music

icon-prev = 
icon-stop = o
icon-play = 
icon-pause = 
icon-next = 
icon-seekf = >>
icon-random = 
icon-repeat = 

;label-song = 𝄞 %artist% - %title%
label-song-maxlen = 25
label-song-ellipsis = true

toggle-on-foreground = #e60053
toggle-off-foreground = #66



[module/xbacklight]
type = internal/xbacklight

format = <label> <bar>
label =  %percentage%%

; Only applies if <ramp> is used
ramp-0 = 🌕
ramp-1 = 🌔
ramp-2 = 🌓
ramp-3 = 🌒
ramp-4 = 🌑

bar-width = 1
bar-indicator = |
bar-indicator-foreground = #ff
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 = " "
;format-underline = #f90000
label = %percentage%%

[module/memory]
inherit = module/theme
format-underline = #999999
type = internal/memory
interval = 2
format-prefix = " "
;format-underline = #4bffdc
;label = %percentage%%
label = %gb_used%/%gb_total%
;label-foreground = #ed5456
label-foreground = #999999

;bar-used-width = 10
bar-used-gradient = true
bar-used-foreground-0 = #0088CC
bar-used-foreground-1 = #2f8419
bar-used-foreground-2 = #f5a70a
bar-used-foreground-3 = #ed5456

[module/wlan]
inherit = module/theme
type = internal/network
interface = wlo1
interval = 1
;format-connected-underline = #268bd2
format-connected = <ramp-signal> <label-connected>
;label-connected-foreground = ${colors.high}

;format-connected-underline = #0a6cf5
;label-connected =  %essid%
;label-connected =    %downspeed% |     %upspeed% 
label-connected = " %signal% [  %downspeed% ] [  %upspeed% ]"

format-disconnected = 
;format-disconnected = <label-disconnected>
;format-disconnected-underline = ${self.format-connected-underline}
;label-disconnected = %ifname% disconnected
;label-disconnected-foreground = ${colors.foreground-alt}

ramp-signal-0 = 
ramp-signal-1 = 
ramp-signal-2 = 
ramp-signal-3 = 
ramp-signal-4 = 
ramp-signal-foreground = ${colors.foreground-alt}

[module/eth]
type = internal/network
interface = virbr0-nic
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 = 1

date =  %a %d-%m-%Y |
date-alt = " %Y-%m-%d"

time =   %H:%M:%S
time-alt = %H:%M:%S

format-prefix = 
format-prefix-foreground = ${colors.foreground-alt}
;format-underline = #0a6cf5

label = %date% %time%

[module/volume]
type = internal/volume
master-mixer = Master

;format-underline = #55aa55
format-volume-foreground = ${colors.green}

format-volume = %{T1} <label-volume>

format-volume-prefix = " "
format-muted-prefix = " "

label-muted =  [muted]
label-muted-foreground = ${colors.red}
label-muted-font = 1

[module/battery]
type = internal/battery
full-at = 98
battery = BAT0
adapter = AC0
poll-interval = 5
time-format = %H:%M
format-underline = #55aa55
label-charging = %percentage%%
label-discharging = %percentage%%
label-full = 
format-charging = <animation-charging> <label-charging>
format-charging-foreground = ${colors.foreground-alt}
format-discharging = <ramp-capacity> <label-discharging>
format-discharging-foreground = ${colors.orange}
format-full-foreground = ${colors.green}
format-charging-prefix = " "
format-discharging-prefix = " "
format-full-prefix = " "

ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-3 = 
ramp-capacity-4 = 

animation-charging-0 = 
animation-charging-1 = 
animation-charging-2 = 
animation-charging-3 = 
animation-charging-4 = 
animation-charging-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%
label-warn =  %temperature%
label-warn-foreground = ${colors.secondary}

ramp-0 = 
ramp-1 = 
ramp-2 = 
ramp-foreground = ${colors.foreground-alt}

[module/powermenu]
type = custom/menu

format-spacing = 1
format-underline = #0a6cf5


label-open = 
label-open-foreground = ${colors.secondary}
label-close = 
label-close-foreground = ${colors.secondary}
label-separator = |
label-separator-foreground = ${colors.foreground-alt}

menu-0-0 =  
menu-0-0-exec = menu-open-1
menu-0-1 =  shutdown
menu-0-1-exec = menu-open-2

menu-1-0 = cancel
menu-1-0-exec = menu-open-0
menu-1-1 = reboot
menu-1-1-exec = sudo reboot

menu-2-0 =  shutdown
menu-2-0-exec = sudo poweroff
menu-2-1 = cancel
menu-2-1-exec = menu-open-0

[settings]
screenchange-reload = true
;compositing-background = xor
;compositing-background = screen
;compositing-foreground = source
;compositing-border = over

[global/wm]
margin-top = 5
margin-bottom = 5


[module/fsroot]
inherit = module/theme
type = internal/fs
interval = 20
mount-0 = /
label-mounted = " %free%"
label-unmounted = " ??"
format-mounted-underline = #39c639
format-unmounted-underline = #39c639

[module/fshome]
inherit = module/theme
type = internal/fs
interval = 20
format-prefix = ""
mount-0 = /home
label-mounted = " %free%"
label-unmounted = " ??"
format-mounted-underline = #39c639
format-unmounted-underline = #39c639

[module/menu-apps]
type = custom/menu

; "menu-LEVEL-N" has the same properties as "label-NAME" with
;  the additional "exec" property
; 
;  Available exec commands:
;    menu-open-LEVEL
;    menu-close
;  Other commands will be executed using "/usr/bin/env sh -c $COMMAND"
; 

 menu-0-0 =  
 #menu-0-0-exec = menu-open-1
 menu-0-2 =  
 #menu-0-2-exec = menu-open-3

 menu-1-0 = Firefox
 menu-1-0-exec = firefox &
 menu-1-1 = Chromium
 menu-1-1-exec = chromium &

 menu-2-0 = Gimp
 menu-2-0-exec = gimp &
 menu-2-1 = Scrot
 menu-2-1-exec = scrot &

 menu-3-0 = Gvim
 menu-3-0-exec = gvim &

[module/theme]
format-background = ${colors.background}
format-padding = 2
format-foreground = ${self.format-underline}

format-connected-background = ${module/theme.format-background}
format-unconnected-background = ${module/theme.format-background}
format-mounted-background = ${module/theme.format-background}
format-unmounted-background = ${module/theme.format-background}
format-charging-background = ${module/theme.format-background}
format-discharging-background = ${module/theme.format-background}

format-connected-padding = ${module/theme.format-padding}
format-unconnected-padding = ${module/theme.format-padding}
format-mounted-padding = ${module/theme.format-padding}
format-unmounted-padding = ${module/theme.format-padding}
format-charging-padding = ${module/theme.format-padding}
format-discharging-padding = ${module/theme.format-padding}

format-mounted-foreground = ${self.format-mounted-underline}
format-unmounted-foreground = ${self.format-unmounted-underline}


; vim:ft=dosini

With below launch script.

$ cat  ~/.config/polybar/launch.sh
#!/usr/bin/env sh

# Terminate already running bar instances
killall -q polybar

# Wait until the processes have been shut down
while pgrep -x polybar >/dev/null; do sleep 1; done

# Launch bar1 and bar2
polybar main &

#polybar mybar &

echo "Bars launched..."

On i3 side, there is a definition for launching polybar.

exec_always --no-startup-id $HOME/.config/polybar/launch.sh

Uninstalling Polybar

To uninstall Polybar installed manually through compilation process go into the build folder where you originally ran build script.

cd polybar/build

There you can run the following command to remove all installed files from your system.

sudo make uninstall

Similar:

How to configure i3pystatus on Linux

Install KDE Desktop Environment on Fedora

Install Deepin Desktop Environment on Fedora