wob icon indicating copy to clipboard operation
wob copied to clipboard

A lightweight overlay volume/backlight/progress/anything bar for Wayland.

wob — Wayland Overlay Bar

Build Status

preview

A lightweight overlay volume/backlight/progress/anything bar for wlroots based Wayland compositors (requrires support for wlr_layer_shell_unstable_v1). This project is inspired by xob - X Overlay Bar.

Release signatures

Releases are signed with 5C6DA024DDE27178073EA103F4B432D5D67990E3 and published on GitHub.

Installation

Compiling from source

Install dependencies:

  • wayland
  • inih
  • wayland-protocols *
  • meson *
  • scdoc (optional: man page) *
  • libseccomp (optional: Linux kernel syscall filtering) *

* compile-time dependecy

Run these commands:

git clone [email protected]:francma/wob.git
cd wob
meson build
ninja -C build
sudo ninja -C build install

From packages

Packaging status

Usage

Launch wob in a terminal, enter a value (positive integer), press return.

wob

General case

You may manage a bar for audio volume, backlight intensity, or whatever, using a named pipe. Create a named pipe, e.g. /tmp/wobpipe, on your filesystem using.

mkfifo /tmp/wobpipe

Connect the named pipe to the standard input of a wob instance.

tail -f /tmp/wobpipe | wob

Set up your environment so that after updating audio volume, backlight intensity, or whatever, to a new value like 43, it writes that value into the pipe:

echo 43 > /tmp/wobpipe

Adapt this use-case to your workflow (scripts, callbacks, or keybindings handled by the window manager).

See wob.ini.5 for styling and positioning options.

Sway WM example

Add these lines to your Sway config file:

set $WOBSOCK $XDG_RUNTIME_DIR/wob.sock
exec rm -f $WOBSOCK && mkfifo $WOBSOCK && tail -f $WOBSOCK | wob

Volume using alsa:

bindsym XF86AudioRaiseVolume exec amixer sset Master 5%+ | sed -En 's/.*\[([0-9]+)%\].*/\1/p' | head -1 > $WOBSOCK
bindsym XF86AudioLowerVolume exec amixer sset Master 5%- | sed -En 's/.*\[([0-9]+)%\].*/\1/p' | head -1 > $WOBSOCK
bindsym XF86AudioMute exec amixer sset Master toggle | sed -En '/\[on\]/ s/.*\[([0-9]+)%\].*/\1/ p; /\[off\]/ s/.*/0/p' | head -1 > $WOBSOCK

Volume using pulse audio:

bindsym XF86AudioRaiseVolume exec pamixer -ui 2 && pamixer --get-volume > $WOBSOCK
bindsym XF86AudioLowerVolume exec pamixer -ud 2 && pamixer --get-volume > $WOBSOCK
bindsym XF86AudioMute exec pamixer --toggle-mute && ( pamixer --get-mute && echo 0 > $WOBSOCK ) || pamixer --get-volume > $WOBSOCK

Volume using pulse audio (altenative with pactl) :

bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% && pactl get-sink-volume @DEFAULT_SINK@ | head -n 1| awk '{print substr($5, 1, length($5)-1)}' > $WOBSOCK
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% && pactl get-sink-volume @DEFAULT_SINK@ | head -n 1 | awk '{print substr($5, 1, length($5)-1)}' > $WOBSOCK

Brightness using haikarainen/light:

bindsym XF86MonBrightnessUp exec light -A 5 && light -G | cut -d'.' -f1 > $WOBSOCK
bindsym XF86MonBrightnessDown exec light -U 5 && light -G | cut -d'.' -f1 > $WOBSOCK

Brightness using brightnessctl:

bindsym XF86MonBrightnessDown exec brightnessctl set 5%- | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > $WOBSOCK
bindsym XF86MonBrightnessUp exec brightnessctl set +5% | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > $WOBSOCK

Systemd

Add this line to your config file:

exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK

Copy systemd unit files (if not provided by your distribution package):

cp contrib/systemd/wob.{service,socket} ~/.local/share/systemd/user/
systemctl daemon-reload --user

Enable systemd wob socket:

systemctl enable --now --user wob.socket

License

ISC, see LICENSE.