Modular status panel for X11 and Wayland, inspired by https://github.com/jaagr/polybar
Find a file
Jordan Isaacs 6113f9b94e
particles/icon: init
Introduce a new icon particle. It follows the icon
spec (https://specifications.freedesktop.org/icon-theme-spec/latest/index.html).
Rendering logic is taken from fuzzel (using nanosvg + libpng), while loading
logic is taken from sway. Standard usage is with `use-tag = false` which expands
the provided string template and then loads the string as the icon name. There
are settings to manually override the base paths, themes, etc. The second usage
which is required for tray support is a special icon tag that transfers raw
pixmaps. With `use-tag = true` it first expands the string, and then uses that
output to find an icon pixmap tag. To reduce memory usage, themes are reference
counted so they can be passed down the configuration stack without having to
load them in multiple times.

For programmability, a fallback particle can be specified if no icon/tag is
found `fallback: ...`. And the new icon pixmap tag can be existence checked in
map conditions using `+{tag_name}`.

Future work to be done in follow up diffs:
1. Icon caching. Currently performs an icon lookup on each instantiation & a
   render on each refresh.
2. Theme caching. Changing theme directories results in a new "theme collection"
   being created resulting in the possibility of duplicated theme loading.
2024-07-23 22:58:23 -07:00
.builds ci (sr.ht): it’s pulseaudio-dev, not libpulse-dev 2022-12-13 10:47:07 +01:00
3rd-party/nanosvg particles/icon: init 2024-07-23 22:58:23 -07:00
bar particles/icon: init 2024-07-23 22:58:23 -07:00
completions main: change default log level to warning 2024-01-03 15:20:31 +01:00
decorations Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
doc doc: yambar(5): remove trailing whitespace 2024-06-09 10:12:23 +02:00
examples Fix remaining typos in the codebase (and update CI checks) 2024-05-02 16:28:51 +00:00
external module/river: add support for ‘layout’ events 2023-01-12 18:15:16 +01:00
modules module/network: plug memory leak 2024-06-09 10:08:38 +02:00
nanosvg particles/icon: init 2024-07-23 22:58:23 -07:00
particles particles/icon: init 2024-07-23 22:58:23 -07:00
subprojects subprojects: use meson wrap files for tllist+fcft 2020-12-25 12:22:15 +01:00
test Fix CI failing due to outdated test config file 2024-04-01 08:46:50 +00:00
.clang-format Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
.editorconfig misc: add format files for clang-format and editorconfig 2021-12-21 18:44:37 +01:00
.gitignore subprojects: use meson wrap files for tllist+fcft 2020-12-25 12:22:15 +01:00
.gitmodules fcft/tllist: remove git submodules 2020-01-11 14:43:26 +01:00
.woodpecker.yaml Fix remaining typos in the codebase (and update CI checks) 2024-05-02 16:28:51 +00:00
CHANGELOG.md log: respect the NO_COLOR environment variable 2024-07-18 08:31:46 +02:00
char32.c Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
char32.h Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
color.h initial commit: wip 2018-11-17 11:30:33 +01:00
config-verify.c particles/icon: init 2024-07-23 22:58:23 -07:00
config-verify.h particles/icon: init 2024-07-23 22:58:23 -07:00
config.c particles/icon: init 2024-07-23 22:58:23 -07:00
config.h particles/icon: init 2024-07-23 22:58:23 -07:00
decoration.h Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
font-shaping.h config: add inheritable option “font-shaping” 2022-02-23 18:43:13 +01:00
generate-version.sh generate-version: handle git repo not having any tags 2021-10-11 20:21:07 +02:00
icon.c particles/icon: init 2024-07-23 22:58:23 -07:00
icon.h particles/icon: init 2024-07-23 22:58:23 -07:00
LICENSE license: MIT 2019-01-02 11:24:28 +01:00
log.c log: respect the NO_COLOR environment variable 2024-07-18 08:31:46 +02:00
log.h Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
main.c Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
meson.build particles/icon: init 2024-07-23 22:58:23 -07:00
meson_options.txt particles/icon: init 2024-07-23 22:58:23 -07:00
module.c Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
module.h Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
nanosvg.c particles/icon: init 2024-07-23 22:58:23 -07:00
nanosvgrast.c particles/icon: init 2024-07-23 22:58:23 -07:00
particle.c particles/icon: init 2024-07-23 22:58:23 -07:00
particle.h particles/icon: init 2024-07-23 22:58:23 -07:00
PKGBUILD particles/icon: init 2024-07-23 22:58:23 -07:00
PKGBUILD.wayland-only meson/pkgbuild: bump version to 1.11.0 2024-04-17 10:30:54 +02:00
plugin.c particles/icon: init 2024-07-23 22:58:23 -07:00
plugin.h Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
png-yambar.h particles/icon: init 2024-07-23 22:58:23 -07:00
png.c particles/icon: init 2024-07-23 22:58:23 -07:00
README.md fixed meson setup directory on readme 2024-01-04 08:21:05 +00:00
screenshot.png screenshot: update 2019-09-28 21:20:03 +02:00
stride.h font: initial port from cairo scaled fonts to raw freetype + pixman 2019-09-22 00:50:11 +02:00
stringop.c particles/icon: init 2024-07-23 22:58:23 -07:00
stringop.h particles/icon: init 2024-07-23 22:58:23 -07:00
svg.c particles/icon: init 2024-07-23 22:58:23 -07:00
svg.h particles/icon: init 2024-07-23 22:58:23 -07:00
tag.c particles/icon: init 2024-07-23 22:58:23 -07:00
tag.h particles/icon: init 2024-07-23 22:58:23 -07:00
xcb.c Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00
xcb.h xcb: extern declare cached XCB atoms in header file 2020-06-05 13:30:08 +02:00
xdg.c particles/icon: init 2024-07-23 22:58:23 -07:00
yambar.desktop desktop: add Desktop Entry file 2019-09-29 20:58:15 +02:00
yml.c yml: replace_env_variables(): const:ify function variables 2024-06-09 10:05:21 +02:00
yml.h Apply "clang-format" preferences globally 2024-04-07 10:05:10 +02:00

CI status

Yambar

Packaging status

Index

  1. Introduction
  2. Configuration
  3. Modules
  4. Installation
  5. Bugs

Introduction

screenshot

yambar is a lightweight and configurable status panel (bar, for short) for X11 and Wayland, that goes to great lengths to be both CPU and battery efficient - polling is only done when absolutely necessary.

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 - a background color or a graphical underline, for example.

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

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

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

  right:
    - clock:
        content:
          - string: {text: , font: "Font Awesome 6 Free:style=solid:size=12"}
          - string: {text: "{date}", right-margin: 5}
          - string: {text: , font: "Font Awesome 6 Free:style=solid:size=12"}
          - string: {text: "{time}"}

For details, see the man pages (yambar(5) is a good start).

Example configurations can be found in examples.

Modules

Available modules:

  • alsa
  • backlight
  • battery
  • clock
  • cpu
  • disk-io
  • dwl
  • foreign-toplevel
  • i3 (and Sway)
  • label
  • mem
  • mpd
  • network
  • pipewire
  • pulse
  • removables
  • river
  • script (see script examples)
  • sway-xkb
  • xkb (XCB backend only)
  • xwindow (XCB backend only)

Installation

To build, first, create a build directory, and switch to it:

mkdir -p bld/release && cd bld/release

Second, configure the build (if you intend to install it globally, you might also want --prefix=/usr):

meson setup --buildtype=release ../..

Optionally, explicitly disable a backend (or enable, if you want a configuration error if not all dependencies are met) by adding either -Dbackend-x11=disabled|enabled or -Dbackend-wayland=disabled|enabled to the meson command line.

Three, build it:

ninja

Optionally, install it:

ninja install

Bugs

Please report bugs to https://codeberg.org/dnkl/yambar/issues

The report should contain the following:

  • Which Wayland compositor (and version) you are running
  • Yambar version (yambar --version)
  • Log output from yambar (start yambar from a terminal)
  • If reporting a crash, please try to provide a bt full backtrace with symbols (i.e. use a debug build)
  • Steps to reproduce. The more details the better