Customisable gtk-layer-shell wlroots/sway bar written in rust.
Go to file
Jake Stanger 15a9d8d42c
fix(script): parser incorrectly handling colons
The short input parser was previously splitting colons, and incorrectly handling situations where the `cmd` section contained colons. The parser now properly checks input in the `mode:interval:cmd` format, moving onto the next section regardless of whether the previous was found.

This means unless your script literally starts with `poll:` or `5000:` you won't hit this issue anymore.
2023-04-20 21:59:23 +01:00
.github ci(nix): fix cachix error 2023-03-01 20:35:12 +00:00
.idea chore(intellij): update run configs 2022-09-25 22:50:05 +01:00
docs docs(custom): fix potential error in progress example 2023-04-10 20:05:37 +01:00
examples feat: new label module 2023-04-07 14:29:07 +01:00
nix fix(nix): home manager module, and features 2023-03-29 01:45:40 -07:00
scripts chore: bash script for regenerating examples 2023-04-07 14:26:17 +01:00
src fix(script): parser incorrectly handling colons 2023-04-20 21:59:23 +01:00
.gitignore chore: initial commit 2022-08-14 14:30:13 +01:00
Cargo.lock chore(release): v0.11.0 2023-04-01 18:36:24 +01:00
Cargo.toml chore(release): v0.11.0 2023-04-01 18:36:24 +01:00
CHANGELOG.md docs: update CHANGELOG.md for v0.11.0 [skip ci] 2023-04-01 17:44:26 +00:00
CONTRIBUTING.md feat(logging): IRONBAR_LOG and IRONBAR_FILE_LOG env vars 2022-10-16 13:42:59 +01:00
flake.lock flake.lock: Update 2023-04-01 00:57:22 +00:00
flake.nix fix(nix): home manager module, and features 2023-03-29 01:45:40 -07:00
LICENSE chore: add mit license 2022-08-14 14:32:54 +01:00
README.md fix(nix): home manager module, and features 2023-03-29 01:45:40 -07:00

Ironbar

Ironbar is a customisable and feature-rich bar for wlroots compositors, 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

Features

  • First-class support for Sway and Hyprland, but should (mostly) work on any wlroots compositor.
  • Fully themeable with CSS and hot-loaded styles.
  • Support for multiple configuration languages.
  • Popups used by widgets to show rich content and controls on click.
  • Out of the box widgets which can be used to create anything from a lightweight to a more traditional desktop experience.
  • Ability to create custom widgets (including popups), run scripts and inject dynamic content.

Installation

Cargo

Ensure you have the build dependencies installed.

cargo install ironbar

crate

Arch Linux

yay -S ironbar-git

aur package

Nix Flake

A flake is included with the repo which can be used with home-manager.

Example

Here is an example nix flake that uses Ironbar.

{
  # Add the ironbar flake input
  inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
  inputs.ironbar = {
    url = "github:JakeStanger/ironbar";
    inputs.nixpkgs.follows = "nixpkgs";
  };
  inputs.hm = {
    url = "github:nix-community/home-manager";
    inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = inputs: {
    homeManagerConfigurations."USER@HOSTNAME" = inputs.hm.lib.homeManagerConfiguration {
      pkgs = nixpkgs.legacyPackages.x86_64-linux;
      modules = [
        # And add the home-manager module
        inputs.ironbar.homeManagerModules.default
        {
          # And configure
          programs.ironbar = {
            enable = true;
            config = {};
            style = "";
            package = inputs.ironbar;
            features = ["feature" "another_feature"];
          };
        }
      ];
    };
  };
}

Binary Caching

There is a Cachix cache available at https://app.cachix.org/cache/jakestanger in case you don't want to compile Ironbar.

Source

Ensure you have the build dependencies installed.

git clone https://github.com/jakestanger/ironbar.git
cd ironbar
cargo build --release
# change path to wherever you want to install
install target/release/ironbar ~/.local/bin/ironbar

By default, all features are enabled. See here for controlling which features are included.

repo

Running

All of the above installation methods provide a binary called ironbar.

You can set the IRONBAR_LOG or IRONBAR_FILE_LOG environment variables to error, warn, info, debug or trace to configure the log output level. These default to IRONBAR_LOG=info and IRONBAR_FILE_LOG=error. File output can be found at ~/.local/share/ironbar/error.log.

Configuration

Ironbar gives a lot of flexibility when configuring, including multiple file formats and options for scaling complexity: you can use a single config across all monitors, or configure different/multiple bars per monitor.

A full configuration guide can be found here.

Styling

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

A full styling guide can be found here.

Project Status

This project is in alpha, but should be usable. Everything that is implemented works and should be documented. Proper error handling is in place so things should either fail gracefully with detail, or not fail at all.

There is currently room for lots more modules, and lots more configuration options for the existing modules. The current configuration schema is not set in stone and breaking changes could come along at any point; until the project matures I am more interested in ease of use than backwards compatibility.

A few bugs do exist, and I am sure there are plenty more to be found.

The project 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

Please check here.

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
  • Smithay Client Toolkit - Essential in being able to communicate to Wayland