use std::{fmt::Write, path::PathBuf}; use dim_sdk::{plugin_info, Context, DimPlugin}; use std::fs::read_to_string; plugin_info!( Plug, // Your main global structs name that implements `DimPlugin` "battery", // Plugin name "1.0.0", // Plugin Version (leave empty for none) "GPLv3" // Plugin license (leave empty for none) ); #[derive(Debug, Clone)] struct Plug { } impl Plug { pub fn new() -> Self { Self { } } } const BATT0: &'static str = "/sys/class/power_supply/BAT0/capacity"; const BATT1: &'static str = "/sys/class/power_supply/BAT1/capacity"; impl DimPlugin for Plug { fn init(&mut self, _ctx: Context) { } fn poll(&mut self, f: &mut dim_sdk::CBuffer) -> dim_sdk::Result<()> { //TODO: Quick fix, make this better, more portable let path = if PathBuf::from(BATT0).exists() { BATT0 } else { BATT1 }; let contents = read_to_string(path)?; let cleaned_contents: String = contents.chars().filter(|c| c.is_digit(10)).collect(); write!(f, "Battery: {}%", cleaned_contents)?; Ok(()) } fn pre_reload(&mut self) { } fn post_reload(&mut self) { } fn free(&mut self) { } }