Modular status panel for X11 and Wayland, inspired by https://github.com/jaagr/polybar
Find a file
2019-01-26 14:52:40 +01:00
decorations decorations: cmake: we don't *really* need 3.13 2019-01-20 13:36:06 +01:00
modules module/i3: avoid stack-allocating large buffers 2019-01-26 13:19:02 +01:00
particles cmake: we don't *really* need 3.13 2019-01-20 13:07:38 +01:00
.gitignore initial commit: wip 2018-11-17 11:30:33 +01:00
.gitlab-ci.yml ci: build both debug and release 2019-01-20 14:37:25 +01:00
bar.c bar: allow user to specify _which_ monitor to place the bar on 2019-01-20 22:05:12 +01:00
bar.h bar: allow user to specify _which_ monitor to place the bar on 2019-01-20 22:05:12 +01:00
CMakeLists.txt cmake: make sure we check for *all* xcb libs we need 2019-01-20 15:16:14 +01:00
color.h initial commit: wip 2018-11-17 11:30:33 +01:00
config-verify.c bar: allow user to specify _which_ monitor to place the bar on 2019-01-20 22:05:12 +01:00
config-verify.h config: conf_verify_dict() now assumes attr list is NULL-terminated 2019-01-13 11:37:05 +01:00
config.c bar: allow user to specify _which_ monitor to place the bar on 2019-01-20 22:05:12 +01:00
config.h decorations: are now plugins 2019-01-13 17:43:25 +01:00
decoration.h decorations: are now plugins 2019-01-13 17:43:25 +01:00
font.c font: ref-count font objects 2019-01-15 21:01:18 +01:00
font.h font: use font-config to load font 2019-01-09 18:50:16 +01:00
LICENSE license: MIT 2019-01-02 11:24:28 +01:00
log.c log: remove dead code 2019-01-26 14:52:40 +01:00
log.h log: LOG_ERRNO_P(), like LOG_ERRNO(), except user provides errno value 2018-12-31 13:18:22 +01:00
main.c main: initialize locale 2019-01-19 20:50:02 +01:00
module.c module: remove ready_fd 2019-01-13 15:25:39 +01:00
module.h Reduce header intra-dependencies 2019-01-13 19:42:16 +01:00
particle.c particles: caller of from_conf() must provide base particle instance 2019-01-13 13:25:14 +01:00
particle.h Reduce header intra-dependencies 2019-01-13 19:42:16 +01:00
PKGBUILD PKGBUILD: add missing dependency, i3-wm 2019-01-21 19:07:52 +01:00
plugin.c allow plugins to be compiled into the f00bar main binary 2019-01-14 20:57:03 +01:00
plugin.h Reduce header intra-dependencies 2019-01-13 19:42:16 +01:00
README.md README: improve description of "realtime" tags 2019-01-21 20:46:48 +01:00
screenshot.png README: some text; let's see what this looks like 2019-01-20 19:26:31 +01:00
tag.c tag: add support for "hex" and "oct" format modifiers 2019-01-21 21:05:38 +01:00
tag.h Reduce header intra-dependencies 2019-01-13 19:42:16 +01:00
tllist.h tllist: cast away const in tll_{r,}foreach() 2018-12-15 11:46:34 +01:00
xcb.c misc: xcb_connect() always returns a non-NULL pointer 2019-01-19 18:45:15 +01:00
xcb.h xcb: add xcb_error(), a generic describe-an-x-error function 2019-01-15 20:44:21 +01:00
yml.c yml: add line/column info to every node 2019-01-11 23:20:06 +01:00
yml.h yml: add line/column info to every node 2019-01-11 23:20:06 +01:00

F00bar

pipeline status

Index

  1. Introduction
  2. Configuration
    1. Overview
    2. Types
    3. Bar
  3. Modules
    1. Alsa
    2. backlight
    3. battery
    4. clock
    5. i3
    6. label
    7. mpd
    8. network
    9. removables
    10. xkb
    11. xwindow
  4. Particles
    1. empty
    2. list
    3. map
    4. progress 1.bar
    5. ramp
    6. string
  5. Decorations
    1. background
    2. stack
    3. underline

Introduction

screenshot

f00bar is a light-weight and configurable status panel (bar, for short) for X.

It has a number of modules that provide information in the form of tags. For example, the clock module has a date tag that contains the current date.

The modules do not know how to present the information though. This is instead done by particles. And the user, you, decides which particles (and thus how to present the data) to use.

Furthermore, each particle can have a decoration. These are things like a different background, or an graphical underline.

There is no support for images or icons. use an icon font (e.g. Font Awesome, or Material Icons) if you want a graphical representation.

There are a number of modules and particles builtin. More can be added as plugins. You can even write your own!

To summarize: a bar displays information provided by modules, using particles and decorations. How is configured by you.

Configuration

Overview

F00bar is configured using YAML, in ~/.config/f00bar/config.yml. It must define a top-level dictionary named bar:

bar:
  height: 26
  location: top
  background: 000000ff

Types

There are a couple types used that are specific to f00bar.

  • font: this is a string in fontconfig format. Example of valid values:
    • Font Awesome 5 Brands
    • Font Awesome 5 Free:style=solid
    • Dina:pixelsize=10:slant=italic
    • Dina:pixelsize=10:weight=bold
  • color: an rgba hexstring; RRGGBBAA. Examples:
    • ffffffff: white, no transparancy
    • 000000ff: black, no transparancy
    • 00ff00ff: green, no transparancy
    • ff000099: red, semi-transparent

Bar

Name Type Req. Description
height int yes The height of the bar, in pixels
location enum yes One of top or bottom
background color yes Background color
monitor string no Monitor to place the bar. If not specified, the primary monitor will be used.
left-spacing int no Space, in pixels, added before each module
right-spacing int no Space, in pixels, added after each module
spacing int no Short-hand for setting both left-spacing and right-spacing
left-margin int no Left-side margin, in pixels
right-margin int no Right-side margin, in pixels
margin int no Short-hand for setting both left-margin and right-margin
border dict no Configures a border around the status bar
border.width int yes Width, in pixels, of the border
border.color color yes The color of the border
font font no Default font to use in modules and particles
foreground color no Default foreground (text) color to use
left list no Left-aligned modules
center list no Center-aligned modules
right list no Right-aligned modules

The value of each item in the left, center and right lists is a module.

Modules

Generic Configuration

All modules support the following attributes:

Name Type Description
content particle A particle describing how the module's information is to be rendered
anchors dict Free-to-use dictionary, where you can put yaml anchor definitions

Tags

Modules expose information through tags. Each tag has name, type and a value. The name and type is fixed, while the value will typically change over time.

The tags are rendered by particles. Each particle type has it's own way of representing tag values. The simplest one is the string particle, which renders a text representation of the tag value.

string:
  text: "The current volume is {volume}"

The following tag types exist:

Type Description
string Value is a string. Rendered as-is by the string particle.
int Value is an integer. Rendered in base 10 by the string particle.
bool Value is true or false. Rendered as "true" or "false" by the string particle.
float Value is a float. Rendered in base 10, with two decimal digits by the string particle.
range Value is an integer, with a minimum and maximum value. By default, string renders the value. The :min or :max suffixes may be added to instead render the min/max values (`"{tag_name:min}").
realtime Value is an integer that changes in a predictable manner (in "realtime"). This allows the particle to update itself periodically. It could for example be used to represent a playing song's position. Only supported by the progress-bar particle. However, the string particle does recognize the :unit suffix. This will be translated to "s" for a tag with "seconds" resolution, or "ms" for one with "milliseconds" resolution.

Alsa

Monitors an alsa soundcard for volume and mute/unmute changes.

Tags

Name Type Description
volume range Volume level, with min and max as start and end range values
muted bool True if muted

Configuration

Name Type Req. Description
card string yes The soundcard name. Default might work.
mixer String yes Mixer channel to watch. Master might work.

Example

alsa:
  card: hw:PCH
  mixer: Master
  content: {string: {text: "{volume}"}}

Backlight

Battery

Clock

I3

Label

Mpd

Network

Removables

Xkb

Xwindow

Particles

Empty

List

Map

Progress-bar

Ramp

String

Decorations

Background

Stack

Underline