An open API service indexing awesome lists of open source software.

https://github.com/38/i3monkit

The toolkit to create customized I3 status bar
https://github.com/38/i3monkit

i3bar i3status i3wm tiling-window-manager

Last synced: 4 months ago
JSON representation

The toolkit to create customized I3 status bar

Awesome Lists containing this project

README

        

# i3monkit - The i3 Status Bar Monitor Toolkit

[![Latest Version](https://img.shields.io/crates/v/i3monkit.svg)](https://crates.io/crates/i3monkit)

* [API Documentation](https://docs.rs/i3monkit/)

## Overview

This is a toolkit for building customized status bar program for the [i3 tiling window manager](https://i3wm.org).
i3 has its default status bar program called `i3status`, but it's somehow limited and hard to
extend and customize. This crate gives you the ability to reimplement an status bar program for
i3 quickly.

![Screen Shot](https://raw.githubusercontent.com/38/i3monkit/master/screenshot.png)

It comes with a set of builtin widget as well, such as, CPU usage bar, Network speed meter,
etc.

## How to build the status bar program

You can crate your own status bar with just a few lines of code in Rust.

First, you need to crate a crate and import this crate

```toml
[dependencies]
i3monkit = "*"

```

Then, config your customized i3 status bar

```rust
use i3monkit::*;
use i3monkit::widgets::*;

fn main() {
let mut bar = WidgetCollection::new();

//Add realtime stock prices, for example: Microsoft, AMD and Facebook
let stock_client = StockClient::new("your-alphavantage-API-key");
bar.push(StockClient::create_widget(&stock_client, "MSFT"));
bar.push(StockClient::create_widget(&stock_client, "AMD"));
bar.push(StockClient::create_widget(&stock_client, "FB"));

//Realtime upload/download rate for a interface
bar.push(NetworkSpeedWidget::new("wlp58s0"));

//Display all the cpu usage for each core
for i in 0..4 {
bar.push(CpuWidget::new(i));
}

//Volume widget
bar.push(VolumeWidget::new("default", "Master", 0));

//Battery status
bar.push(BatteryWidget::new(0));

//Time
bar.push(DateTimeWidget::new());

// Then start updating the satus bar
bar.update_loop(I3Protocol::new(Header::new(1), std::io::stdout()));
}
```

Finally, you can change `~/.config/i3/config` to make i3wm uses your status bar program

``` config
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
status_command path/to/your/customized/status/program
tray_output primary
colors {
background #222222
statusline #00ee22
separator #666666
# border backgr. text
focused_workspace #4c7899 #285577 #ffffff
inactive_workspace #333333 #222222 #888888
urgent_workspace #2f343a #900000 #ffffff
}
}
```
## Write your own widget

You can also add your customized widget to the framework by implementing the `Widget` trait.

```rust
use i3monkit::{Block, Widget, WidgetUpdate};
struct Greeter(&'static str);
impl Widget for Greeter {
fn update(&mut self) -> Option {
Some(WidgetUpdate{
refresh_interval: std::time::Duration::new(3600,0),
data: Some(Block::new().append_full_text(self.0).clone())
})
}
}

fn main() {
let bar = WidgetCollection::new();
bar.push(Greeter("hello world"));
.....
}
```