i3bar-river
This is a port of i3bar for river.
i3bar compatibility
I've tested i3status-rs, bumblebee-status and py3status and everything seems usable.
A list of things that are missing (for now):
border[_top|_right|_bottom|_left]- Click events lack some info (IDK if anyone actually relies on
x,y,width, etc.) - Tray icons
Features
riversupport (obviously)short_textswitching is "progressive" (see https://github.com/i3/i3/issues/4113)- Support for rounded corners
- Show/hide with
pkill -SIGUSR1 i3bar-river
Hyprland support
Hyprland/wlr_ext_workspaces support is experimental and is behind hyprland feature flag. Build with -F hyprland to enable it.
Installation
Arch
AUR: i3bar-river-git
From Source
External dependencies: libpango1.0-dev.
cargo install --locked i3bar-river
Configuration
Add this to the end of your river init script:
riverctl spawn i3bar-river
The configuration file should be stored in $XDG_CONFIG_HOME/i3bar-river/config.toml or ~/.config/i3bar-river/config.toml.
Example configuration (every parameter is optional):
= "#282828"
= "#ffffff"
= "#9a8a62"
= "#d79921"
= "#282828"
= "#1d2021"
= "#689d68"
= "#282828"
= "#cc241d"
= "#d79921"
= "#282828"
= "JetBrainsMono Nerd Font 10"
= 20
= 0
= 0
= 0
= 0
= 0
= 6
= 25
= 6
= 0
= "i3status-rs"
= "top"
= true
= true
= false
How progressive short mode and rounded corners work
Some status bar generators (such as i3status-rs) use more than one "json block" per logical block
to implement, for example, buttons.
Short text management and corner rounding are performed on per-logical-block basis.
i3bar-river defines a logical block as a continuous series of "json blocks" with the same name.
Also, only the last "json block" is allowed to have a non zero (or absent) separator_block_width,
all the other "json blocks" should explicitly set it to zero. If you think this definition is not
the best one, feel free to open a new github issue.
blocks_overlap option
Sometimes pango lives a gap between "powerline separators" and the blocks (see https://github.com/greshake/i3status-rust/issues/246#issuecomment-1086753440). In this case, you can set blocks_overlap option to number of pixels you want your blocks to overlap. Usually, 1 is a good choice.
Showcase (with i3status-rs)
Native separators

i3bar-river
= "JetBrainsMono Nerd Font 10"
= 20
= "i3status-rs"
i3status-rs
[]
= "native"
[]
= "#ebdbb2"
= "#458588"
= "#8ec07c"
= "#fabd2f"
= "#fb4934"
Powerline separators

i3bar-river
= "JetBrainsMono Nerd Font 10"
= 20
= "i3status-rs"
i3status-rs
[]
= "slick"
Rounded corners

i3bar-river
= "JetBrainsMono Nerd Font 10"
= 20
= 0
= 6
= 6
= "i3status-rs"
i3status-rs
[]
= "slick"
[]
= "native"
= "none"
= "none"