[−][src]Crate i3monkit
i3monkit - The i3 Status Bar Monitor Toolkit
This is a toolkit for building customized i3 status bar for the i3 tiling window manager.
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.
It comes with a set of builtin widget as well, such as, CPU usage bar, Network speed meter, etc.
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
[dependencies]
i3mokit = "*"
Then, config your customized i3 status bar
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
# 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.
use i3monkit::{Block, Widget, WidgetUpdate}; struct Greeter(&'static str); impl Widget for Greeter { fn update(&mut self) -> Option<WidgetUpdate> { 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")); ..... }
Modules
widgets |
Structs
Block | A block shown on the I3 status bar |
Header | The I3 protocol header |
I3Protocol | The abstraction for a i3 protocol instance |
WidgetCollection | The collection of widgets |
WidgetUpdate | An update of a widget. |
Traits
Decoratable | The trait for a decoratable object |
Widget | The trait for an widget. |