XOB(1)
π XOB(1) β the xob manual, but make it cute
okay bestie so you're looking at the xob manual page from the xob Manual (that's the manual name, we're folding it in right here at the top β¨) and honestly? it's giving iconic little utility. sit down, grab a strawberry π, and let's get into it.
πΈ NAME πΈ
xob β a lightweight overlay bar for the X Window System that does volume, backlight, progress, or literally anything you want. it's the X Overlay Bar, iykyk π
π SYNOPSIS π
xob [-m maximum] [-t timeout] [-c configfile] [-s style] [-q]
like, that's the whole vibe check. five flags, maximum chaos, no cap.
π¦ DESCRIPTION π¦
so xob β the X Overlay Bar β takes numerical values you feed it through standard input and displays them on a bar. and the bar? it looks exactly like the volume bar on a television screen. like, exactly. main character energy π
when it reads a new integer value on standard input, the bar pops up over other windows for a configurable amount of time, then dips out until it gets fed a new value. ghosting you politely, basically π
and here's the cute part: when a value is followed by a bang !, an alternative color is used. so you can get visual feedback for alternative states β things like unmutβed/muted, or auto/manual. yeah, unmutβed, that's the word in the manual, we're keeping it π
the appearance is configurable through all those options described below in this manual, and the way overflows (that's when the value exceeds the maximum) are displayed is also configurable. flexible queen.
and the program ends when it readsendorquitβ or actually literally anything other than a number. so like, it's not picky, it's just done. periodt π
β¨ OPTIONS β¨
-m maximumβ number of steps in the bar (and the maximum value, since0is always the minimum value, no negotiation on that one). by default:100.-t timeoutβ duration in milliseconds between an update and the vanishing of the bar. and if you set it to0, the bar is never hidden β it just stays there, living its best life forever π«Ά. by default:1000(1 second).-s styleβ which style (appearance) to choose in the configuration file. by default:default.-c configfileβ specifies a configuration file path. by default: see below π.-qβ specifies whether to suppress all normal output. by default: not suppressed. so yes, you can make it go quiet π€«
β USAGE β
π GENERAL CASE π
use a program that listens to events (like, a change in audio volume levels) and issues new values on the standard output automatically. then you just launch it like this:
the_listener_program | xob
that's it. that's the pipeline. slay π₯
and guess what β readyβtoβuse input programs for audio volume and screen backlight are available on the xob project homepage:
https://github.com/florentc/xob
go, it's yours π
π FALLBACK METHOD π
in case no input program fits your needs (rude of them tbh), you can trigger changes manually. the trick: append new values into a named pipe β that's a pipe that persists as a special file on the filesystem β and have xob consume them as they arrive. lowkey genius.
step one: create a named pipe on your filesystem, e.g. /tmp/xobpipe.
mkfifo /tmp/xobpipe
step two: have xob consume new values as they arrive on the pipe.
tail -f /tmp/xobpipe | xob
step three: write values to the pipe when you deem it relevant. in the classic audio volume bar example, that'd be after the user has pressed a button and you changed the volume β usually set up as a keybinding in your window manager or desktop environment. πΉ
command_that_outputs_a_value >> /tmp/xobpipe
and to try it manually? just issue a test value like this:
echo 43 >> /tmp/xobpipe
look at you go. iconic behavior, honestly π β¨
π CONFIGURATION FILE π
okay so the config file is only about styles (aka appearances) for the bar. that's literally it. the maximum value and the timeout come from -m and -t, not from here. when it starts up, xob goes looking for the config file in this exact order:
- the path you passed as the
-cargument. $XDG_CONFIG_HOME$/xob/styles.cfgβ only if$XDG_CONFIG_HOME$is actually set.~/.config/xob/styles.cfg- under the system configuration directory (determined during the build process): e.g.
/etc/xob/styles.cfgor/usr/local/etc/xob/styles.cfg
β¨ SYNTAX β¨
the config file speaks libconfig syntax. you set an option with = or :, and you separate options with ;. slay.
option1 = value1;
option2 = value2;
commented lines start with #, no notes app needed:
# This is a comment
options can be grouped together inside curly brackets β and some options expect a group as their value, so don't leave them hanging:
option3 = {
suboptionA = valueA;
suboptionB = {
subsuboptionB1 = valueB1;
subsuboptionB2 = valueB2;
};
suboptionC = valueC;
};
πΈ OPTIONS πΈ
length
βββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββ] outline
βββββββββββββββββββββββββββββββββββββββ] border
βββββββββββββββββββββββββββββββββββββββ] padding
ββββββββββββββββββββββββββββββββββββββββ
βββββββforegroundβββββbackgroundββββββββ thickness
ββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββ] padding
ββββββββββββββββborderβββββββββββββββββ] border
βββββββββββββββββββββββββββββββββββββββ] outline
| |
0 maximum
quick vocab check bestie: a dot . means suboption. so color.normal.fg is read as "the suboption fg, of the suboption normal, of the option color". iykyk.
orientation"horizontal"|"vertical"β (default:vertical) which way the bar fills up."horizontal"goes left to right,"vertical"goes bottom to top.x.relativeratio β (default:1.0) relative horizontal position on screen, between0.0(left edge) and1.0(right edge). centered by default (0.5). yes both of those are in here, i'm just the messenger π«Άx.offsetpixels β (default:-48) horizontal offset in pixels from whereverx.relativeput you. this is the moment for absolute positioning from an edge of the screen, making gaps, stacking bars, the whole vibe.y.relativeratio β (default:0.5) relative vertical position on screen, between0.0(top edge) and1.0(bottom edge).y.offsetpixels β (default:0) vertical offset in pixels from wherevery.relativeput you. again: absolute positioning from an edge of the screen, gaps, stacking bars, etc.length.relativeratio β (default:0.3) relative length (horizontal bar) or height (vertical bar) of the bar, between0.0(collapsed) and1.0(full available length on screen).length.offsetpixels β (default:0) length offset in pixels from the relative length you set withlength.relative. use it for absolute sizes (positive values with0aslength.relative) or for making gaps (negative values with1aslength.relative).thickness.absolutepositive integer β (default:24) height (horizontal bar) or width (vertical bar) in pixels, not counting borders.borderpixels β (default:4) size of the border in pixels.outlinepixels β (default:3) size of the outline in pixels.paddingpixels β (default:3) size of the padding in pixels.overflow"hidden"|"proportional"β (default:proportional) when it's"hidden", a full bar gets displayed using the overflow color once the value exceeds the maximum, whatever that value is. when it's"proportional", only a portion of the bar gets displayed in the overflow color, and how much depends on the overflow β if the value is twice the maximum, half the bar shows in the overflow color. the two zones are separated by a padding-sized gap. cute divider energy π
each of the following has three suboptions β .fg, .bg, and .border β which take hexadecimal RGB or RGBA specs (e.g. #ff0000 or #ff0000ff) for the foreground, the background, and the border colors. heads up: if xob was built without transparency support, the alpha channel gets ignored. no cap.
color.normalcolors β (default:{fg = "#ffffff"; bg = "#00000090"; border = "#ffffff";}) the colors for the general case.color.altcolors β (default:{fg = "#555555"; bg = "#00000090"; border = "#555555";}) colors for alternate display (e.g. muted).color.overflowcolors β (default:{fg = "#ff0000"; bg = "#00000090"; border = "#ff0000";}) colors for when there's overflow (the displayed value exceeds the maximum).color.altoverflowcolors β (default:{fg = "#ff0000"; bg = "#00000090"; border = "#555555";}) colors for alternate display when there's overflow.
π¦ STYLES π¦
every single option up there has to live inside a style specification. a style is just a group containing all or some of the options above, and the style's name is the name of an option at the root level of the config file. if an option is missing from a style, the default values step in. a config file can hold several styles (at least 1, minimum one, we don't do zero here) and you pick between them with the -s argument.
this example config file serves up two styles, volume and backlight. instances of xog launched with -s volume and -s backlight will look according to the matching style (yes, the manpage says xog there β we love a typo with main character energy, anyway β¨):
volume = {
thickness = 24;
outline = 1;
border = 2;
padding = 0;
y = {
relative = 0.9;
offset = 0;
};
};
backlight = {
thickness = 24;
outline = 1;
border = 2;
padding = 0;
y = {
relative = 0.9;
# To prevent overlap with the volume bar if displayed at the same time
offset = -30;
};
color = {
normal = {
fg = "#0000ff";
bg = "#000000";
border = "#0000ff";
};
};
};
π DEFAULT CONFIGURATION FILE π
default = {
x = {relative = 1; offset = -48;};
y = {relative = 0.5; offset = 0;};
length = {relative = 0.3; offset = 0;};
thickness = 24;
outline = 3;
border = 4;
padding = 3;
orientation = "vertical";
overflow = "proportional";
color = {
normal = {
fg = "#ffffff";
bg = "#00000090";
border = "#ffffff";
};
alt = {
fg = "#555555";
bg = "#00000090";
border = "#555555";
};
overflow = {
fg = "#ff0000";
bg = "#00000090";
border = "#ff0000";
};
altoverflow = {
fg = "#550000";
bg = "#00000090";
border = "#550000";
};
};
};
π¬ FAQ π¬
"How should I display different sources of information (e.g. volume and brightness)?" "What happens if several bars are displayed at the same time?"
you can run two or more instances of xob and tell them apart with different styles (color, position, extreme values, all of it). just define and use different styles from your config file (or straight up use different config files). to keep the bars from overlapping, that's what the offset options are for β for instance you can offset a bar to the top or the bottom (see the example in STYLES above, it's right there π«Ά).
"Can I integrate xob in a panel of my desktop environment or window manager?"
nope, there's no support for panel integration. you can, however, use absolute positioning and no timeout (timeout set to 0) to mimic that behaviour in simple situations. lowkey works.
"How to set up xob with multiple monitors?"
xob works well under multihead setups, but there's no easy way to configure the position of the bar for now. for example, in a dual monitor setup with the default configuration, the horizontal centering is not local to one of the two monitors β it's global. the bar might get split in two: one part on each screen π. stick to a corner or use absolute positioning. if you want an xob instance centered (horizontally) on the far-right monitor, set x.relative to 1.0 (anchored on the far right) and the x.offset to minus half the width of that screen.
π CONTRIBUTIONS π
feedback and contributions are welcome. (yes fr fr, come through π)
β AUTHORS β
Florent Ch.
and that's the whole page bestie, you ate it up π
πΈ this was xob 0.3, dated July 2021 β go forth and make your bars iconic β¨ππ¦
π¦ where this page comes from
- alpine 3.24: xob-doc 0.3-r2 Β· GPL-3.0-or-later
- nixos 26.05: xob 0.3
- nixpkgs unstable: xob 0.3
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms