Skip to content

Module reference

Every module accepts the common block keys (fg, bg, format, ...), a states: mapping and an on: mapping. This page lists what each module adds on top: its options, placeholders, condition states and verbs.

Each section starts with the module's shipped defaults: the yaml file embedded in pawbar that forms the bottom layer of the cascade for that module. It is real config in exactly the syntax you write; a bare module name behaves exactly as if you pasted it. Print it any time with pawbar defaults <name>, override any key in your entry, unbind a shipped on: binding with ~, or drop the whole layer with defaults: false (see configuration).

backlight

Screen brightness via sysfs and udev.

Shipped defaults:

yaml
format: "{icon} {light}%"
icons: ["󰃞", "󰃟", "󰃝", "󰃠"]
on:
  scroll-up: { run: "brightnessctl set +5%" }
  scroll-down: { run: "brightnessctl set 5%-" }
OptionDefaultDescription
icons["󰃞", "󰃟", "󰃝", "󰃠"]icon ramp, picked by brightness level
PlaceholderDescription
{icon}brightness level icon
{light}brightness percentage
{now}raw brightness value
{max}raw maximum brightness

battery

Battery level via upower.

Shipped defaults:

yaml
format: "{icon} {bat}%"
discharging_icons: ["󰂃", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
charging_icons: ["󰢟", "󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"]
charged_icon: "󱟢"
warn_at: 30
low_at: 15
states:
  warn: { fg: "@warning" }
  low: { fg: "@urgent" }
  hover: { format: "{hours} hrs {minutes} mins" }
OptionDefaultDescription
discharging_icons["󰂃", "󰁺", ... "󰁹"]icon ramp while discharging
charging_icons["󰢟", "󰢜", ... "󰂅"]icon ramp while charging
charged_icon"󱟢"icon when fully charged
warn_at30percentage that turns on the warn state
low_at15percentage that turns on the low state
PlaceholderDescription
{icon}battery level icon
{bat}battery percentage
{hours}hours until full/empty
{minutes}minutes until full/empty (0-59)
StateShipped stylingWhen
warnfg: "@warning"at or below warn_at
lowfg: "@urgent"at or below low_at
chargingnoneplugged in and charging
chargednonefully charged
hoverETA format (see above)pointer over the module

bluetooth

Adapter and device status via bluez.

Shipped defaults:

yaml
format: "󰂱"
states:
  disconnected: { format: "" }
  off: { fg: darkgray, format: "󰂲" }

No options.

PlaceholderDescription
{device}connected device name
StateShipped stylingWhen
disconnectedempty format (hidden)powered, nothing connected
offfg: darkgray, format 󰂲adapter powered off

Add a user state to show the device name on demand:

yaml
- bluetooth:
    states:
      detail: { format: "󰂱 {device}" }
    on:
      left: { cycle: [detail] }

clock

Wall-clock date and time.

Shipped defaults:

yaml
format: "{time:%Y-%m-%d %H:%M:%S}"
tick: 5s
auto_tick: true
on:
  right: calendar
OptionDefaultDescription
auto_ticktruederive the tick from the displayed granularity: a format showing seconds ticks every second, one showing minutes ticks on the minute
tick5sfixed interval, used when auto_tick is off

Ticks are aligned to wall-clock boundaries, so %M changes exactly on the minute.

PlaceholderDescription
{time}current time; the spec is a strftime layout, e.g. {time:%H:%M}
VerbEffect
calendaropen the calendar menu at the pointer (shipped: right)

cpu

CPU usage percentage.

Shipped defaults:

yaml
format: " {cpu}%"
tick: 3s
high_at: 90
high_for: 7s
states:
  high: { fg: "@urgent" }
OptionDefaultDescription
tick3ssample interval
high_at90usage percentage that arms the high state
high_for7show long usage must stay above high_at before high triggers
PlaceholderDescription
{cpu}usage percentage
StateShipped stylingWhen
highfg: "@urgent"sustained load (see high_at/high_for)

custom

User-defined text. Combine format, states and on: for anything interactive; there is no module-specific behavior.

Shipped defaults:

yaml
format: ""
yaml
- custom:
    format: "hello"
    states:
      alt: { format: "world" }
    on:
      left: { cycle: [alt] }
      right: { run: "pavucontrol" }

No options, placeholders, states or verbs of its own.

disk

Filesystem usage for one mountpoint.

Shipped defaults:

yaml
format: "{icon} {used_pct}%"
tick: 10s
path: /
icon: disk
unit: auto
use_si: false
warn_at: 80
critical_at: 90
states:
  warn: { fg: "@warning" }
  critical: { fg: "@urgent" }
OptionDefaultDescription
path/mountpoint to report
tick10srefresh interval
icondisk iconicon used by {icon}
unitautoauto scales dynamically; or a fixed unit (GB, GiB, MB, ...)
use_sifalsedecimal (SI) units instead of binary
warn_at80percentage that turns on warn
critical_at90percentage that turns on critical
PlaceholderDescription
{icon}module icon
{used} {free} {total}space in the selected unit
{used_pct} {free_pct}percentages
{unit}selected unit name
StateShipped stylingWhen
warnfg: "@warning"usage at or above warn_at
criticalfg: "@urgent"usage at or above critical_at

A handy detail toggle:

yaml
- disk:
    states:
      detail: { format: "{icon} {used:.2f}/{total:.2f} {unit}" }
    on:
      left: { cycle: [detail] }

idleinhibitor

Keeps the system awake through the desktop portal.

Shipped defaults:

yaml
format: "󰛐"
states:
  inhibiting: { format: "󰛑" }
on:
  left: toggle

No options or placeholders.

StateShipped stylingWhen
inhibitingformat 󰛑idle is currently inhibited
VerbEffect
toggletoggle idle inhibition (shipped: left)

locale

Current locale from the environment.

Shipped defaults:

yaml
format: "{locale}"
tick: 7s
OptionDefaultDescription
tick7srefresh interval
PlaceholderDescription
{locale}language-REGION, e.g. en-US

mpris

Media player status via MPRIS.

Shipped defaults:

yaml
format: "󰫔"
states:
  playing: { format: " {artists}  {title}" }
  paused: { format: " {artists}  {title}" }
on:
  left: play-pause

No options.

PlaceholderDescription
{artists}track artists, comma separated
{title}track title
StateShipped stylingWhen
playingplay-icon formata player is playing
pausedpause-icon formata player is paused

The base format (idle icon) shows when no player is active.

VerbEffect
play-pausetoggle playback on the active player (shipped: left)

powerprofiles

Power profile via power-profiles-daemon.

Shipped defaults:

yaml
format: "󰐦"
states:
  performance: { format: "󰓅" }
  balanced: { format: "󰾅" }
  power-saver: { format: "󰾆" }
on:
  left: toggle
  right: menu

No options.

PlaceholderDescription
{profile}active profile name
StateShipped stylingWhen
performanceformat 󰓅that profile is active
balancedformat 󰾅
power-saverformat 󰾆
VerbEffect
togglecycle performance, power-saver, balanced (shipped: left)
menuopen the profile menu at the pointer (shipped: right)

ram

Memory usage.

Shipped defaults:

yaml
format: "{icon} {used_pct}%"
tick: 10s
icon: compass
unit: auto
use_si: false
warn_at: 80
critical_at: 90
states:
  warn: { fg: "@warning" }
  critical: { fg: "@urgent" }

Options, placeholders and states are identical to disk, minus path (and with its own default icon).

sep, space

Static separator and spacer. Their shipped defaults are just a format:

yaml
format: " │ "
yaml
format: " "

Styleable and replaceable like any module:

yaml
- sep: { fg: "@cool" }
- sep: { format: " · " }

sessioncontrols

Session menu launcher.

Shipped defaults:

yaml
format: "󰐦"
on:
  right: menu
VerbEffect
menuopen the session menu: lock, logout, shutdown, ... (shipped: right)

title

Focused window title (hyprland, i3/sway).

Shipped defaults:

yaml
format: "{title}"
states:
  class: { format: " {class} ", fg: "@black", bg: "@cool" }

No options.

PlaceholderDescription
{title}focused window title
{class}focused window class
StateShipped stylingWhen
classchip styling (see above)per-segment state on the window-class chip rendered before the title

tray

Status-notifier item tray.

Shipped defaults:

yaml
cursor: pointer

No options, placeholders or verbs. Left click activates an item, middle click secondary-activates, right click opens its menu, scrolling scrolls it.

volume

Default-sink volume via pulseaudio/pipewire.

Shipped defaults:

yaml
format: "{icon} {vol}%"
icons: ["󰕿", "󰖀", "󰕾"]
step: 5
states:
  muted: { fg: darkgray, format: "󰖁 MUTED" }
on:
  left: toggle-mute
  scroll-up: volume-up
  scroll-down: volume-down
OptionDefaultDescription
icons["󰕿", "󰖀", "󰕾"]icon ramp, picked by volume
step5percentage step for volume-up/volume-down
PlaceholderDescription
{icon}volume level icon
{vol}volume percentage
StateShipped stylingWhen
mutedfg: darkgray, format 󰖁 MUTEDthe default sink is muted
VerbEffect
toggle-mutemute/unmute (shipped: left)
volume-upraise by step (shipped: scroll-up)
volume-downlower by step (shipped: scroll-down)

wifi

Wifi status via NetworkManager.

Shipped defaults:

yaml
format: "{icon}"
tick: 5s
device_index: 2
icons: ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"]
states:
  disconnected: { fg: darkgray, format: "󰤭" }
OptionDefaultDescription
tick5ssignal strength refresh interval
device_index2NetworkManager device number
icons["󰤯", ... "󰤨"]icon ramp, picked by strength
PlaceholderDescription
{icon}signal strength icon
{ssid}connected network name
{interface}wireless interface name
{strength}signal strength percentage
StateShipped stylingWhen
disconnectedfg: darkgray, format 󰤭no active access point

A detail toggle plus interface on hover:

yaml
- wifi:
    states:
      detail: { format: "{icon} {ssid}" }
      hover: { format: "{interface}" }
    on:
      left: { cycle: [detail] }

ws

Workspaces (hyprland, i3/sway). Clicking a workspace switches to it (the shipped left: goto binding; unbind with left: ~).

Shipped defaults:

yaml
format: " {ws} "
cursor: pointer
current_only: false
states:
  urgent: { fg: "@black", bg: "@urgent" }
  active: { fg: "@black", bg: "@active" }
  special: { fg: "@active", bg: "@special" }
on:
  left: goto
OptionDefaultDescription
current_onlyfalserender only the focused workspace
PlaceholderDescription
{ws}workspace name
StateShipped stylingWhen
urgentfg: "@black", bg: "@urgent"workspace with an urgent window (applied per workspace segment)
activefg: "@black", bg: "@active"the focused workspace (per segment)
specialfg: "@active", bg: "@special"special/scratchpad workspace (per segment)
VerbEffect
gotoswitch to the clicked workspace (shipped: left)

current_only is a plain option, so a user state can override it and a binding can toggle that state; this shows only the focused workspace after a right click:

yaml
- ws:
    states:
      focus: { current_only: true }
    on:
      right: { cycle: [focus] }

Released under the BSD-3-Clause License.