Customisable gtk-layer-shell wlroots/sway bar written in rust.
Go to file
2022-08-14 23:32:20 +01:00
.idea chore(intellij): update run configs 2022-08-14 20:38:57 +01:00
src refactor: use macro for module config matching 2022-08-14 23:32:20 +01:00
.gitignore chore: initial commit 2022-08-14 14:30:13 +01:00
Cargo.lock chore(release): v0.2.0 2022-08-14 20:42:42 +01:00
Cargo.toml chore(release): v0.2.0 2022-08-14 20:42:25 +01:00
CONTRIBUTING.md docs: add contributing guidelines file 2022-08-14 14:34:27 +01:00
LICENSE chore: add mit license 2022-08-14 14:32:54 +01:00
README.md feat: config option for bar height 2022-08-14 20:41:38 +01:00

Ironbar

Ironbar is a customisable and feature-rich bar targeting the Sway compositor, written in Rust. It uses GTK3 and gtk-layer-shell.

The bar can be styled to your liking using CSS and hot-loads style changes. For information and examples on styling please see the wiki.

Screenshot of fully configured bar with MPD widget open

Installation

Install with cargo:

cargo install ironbar

Then just run with ironbar.

Configuration

By default, running will get you a blank bar. To start, you will need a configuration file in .config/ironbar. This could be called config.<fmt>, using one of the available extensions:

  • JSON
  • TOML
  • YAML
  • Corn (Experimental. JSON/Nix like config lang. Supports variables.)

For a full list of modules and their configuration options, please see the wiki.

There are two different approaches to configuring the bar:

Same configuration across all monitors

If you have a single monitor, or want the same bar to appear across each of your monitors, choose this option.

The top-level object takes any combination of left, center, and right. These each take a list of modules and determine where they are positioned.

{
  "left": [],
  "center": [],
  "right": []
}

Different configuration across monitors

If you have multiple monitors and want them to differ in configuration, choose this option.

The top-level object takes a single key called monitors. This takes an array where each entry is an object with a configuration for each monitor. The monitor's config object takes any combination of left, center, and right. These each take a list of modules and determine where they are positioned.

{
  "monitors": [
    {
      "left": [],
      "center": [],
      "right": []
    },
    {
      "left": [],
      "center": [],
      "right": []
    }
  ]
}
Name Type Default Description
position top or bottom [] The bar's position on screen.
height integer 42 The bar's height in pixels.
left Module[] [] Array of left modules.
center Module[] [] Array of center modules.
right Module[] [] Array of right modules.
monitors RootConfig[] null Array of root config objects for each monitor. Overrides left/center/right.

Styling

To get started, create a stylesheet at .config/ironbar/style.css. Changes will be hot-reloaded every time you save the file.

An example stylesheet and information about each module's styling information can be found on the wiki.

Project Status

This project is in very early stages:

  • Error handling is barely implemented - expect crashes
  • There will be bugs!
  • Lots of modules need more configuration options
  • There's room for lots of modules
  • The code is messy and quite prototypal in places
  • Config options aren't set in stone - expect breaking changes
  • Documentation is probably missing in lots of places

That said, it will be actively developed as I am using it on my daily driver. Bugs will be fixed, features will be added, code will be refactored.

Contribution Guidelines

I welcome contributions of any kind with open arms. That said, please do stick to some basics:

  • For code contributions:

    • Fix any cargo clippy warnings, using at least the default configuration.
    • Make sure your code is formatted using cargo fmt.
    • Keep any documentation up to date.
    • I won't enforce it, but preferably stick to conventional commit messages.
  • For PRs:

    • Please open an issue or discussion beforehand. I'll accept most contributions, but it's best to make sure you're not working on something that won't get accepted :)
  • For issues:

    • Please provide as much information as you can - share your config, any logs, steps to reproduce...

Acknowledgements

  • Waybar - A lot of the initial inspiration, and a pretty great bar.
  • Rustbar - Served as a good demo for writing a basic GTK bar in Rust