From 6a97c1d2f462b0d4646a4acdc43fba754b33446f Mon Sep 17 00:00:00 2001 From: Sachin Malik Date: Tue, 14 Jan 2025 18:17:36 +0530 Subject: [PATCH] Initial commit --- .gitignore | 10 --- Cargo.toml | 31 ++++++++ README.md | 15 ++++ extra/applet_icon.svg | 3 + extra/applet_screenshot.png | Bin 0 -> 37401 bytes extra/applet_sysinfo.desktop | 13 ++++ justfile | 27 +++++++ src/applet.rs | 137 +++++++++++++++++++++++++++++++++++ src/lib.rs | 5 ++ src/main.rs | 8 ++ 10 files changed, 239 insertions(+), 10 deletions(-) create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 extra/applet_icon.svg create mode 100644 extra/applet_screenshot.png create mode 100644 extra/applet_sysinfo.desktop create mode 100644 justfile create mode 100644 src/applet.rs create mode 100644 src/lib.rs create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore index d01bd1a..ff47c2d 100644 --- a/.gitignore +++ b/.gitignore @@ -9,13 +9,3 @@ Cargo.lock # These are backup files generated by rustfmt **/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb - -# RustRover -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..a722d58 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "cosmic-ext-applet-sysinfo" +version = "0.1.0" +edition = "2021" +license = "GPL-3.0" +authors = ["rwxroot "] +homepage = "https://github.com/rwxroot/cosmic-ext-applet-sysinfo/" +repository = "https://github.com/rwxroot/cosmic-ext-applet-sysinfo.git" + +[profile.release] +lto = "fat" + +[dependencies] +sysinfo = { version = "0.33.1", default-features = false, features = [ + "system", + "network", +] } + +tracing = "0.1" +tracing-log = "0.2.0" +tracing-subscriber = { version = "0.3", default-features = false, features = [ + "fmt", + "env-filter", + "ansi", +] } + +libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = false, features = [ + "applet", + "tokio", + "wayland", +] } diff --git a/README.md b/README.md new file mode 100644 index 0000000..bed0eb9 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# Simple system info applet for cosmic + +

+ Applet Screenshot +

+ +## Install + +```sh +sudo apt install libxkbcommon-dev +git clone https://github.com/rwxroot/cosmic-ext-applet-sysinfo.git +cd cosmic-ext-applet-sysinfo +just build +sudo just install +``` diff --git a/extra/applet_icon.svg b/extra/applet_icon.svg new file mode 100644 index 0000000..f04b05d --- /dev/null +++ b/extra/applet_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/extra/applet_screenshot.png b/extra/applet_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5e885597c4a245d7e2e9b6fc933c40dc414725 GIT binary patch literal 37401 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 cosmic::iced::Result { + cosmic::applet::run::(()) +} + +struct SysInfo { + core: cosmic::app::Core, + system: System, + networks: Networks, + pub cpu_usage: f32, + pub ram_usage: u64, + pub download_speed: f64, + pub upload_speed: f64, +} + +impl SysInfo { + fn update(&mut self) { + self.system.refresh_specifics( + RefreshKind::nothing() + .with_memory(MemoryRefreshKind::nothing().with_ram()) + .with_cpu(CpuRefreshKind::nothing().with_cpu_usage()), + ); + + self.networks.refresh(true); + + self.cpu_usage = self.system.global_cpu_usage(); + self.ram_usage = (self.system.used_memory() * 100) / self.system.total_memory(); + + let mut upload = 0; + let mut download = 0; + + for (_, data) in self.networks.iter() { + upload += data.transmitted(); + download += data.received(); + } + + self.upload_speed = (upload as f64) / 1_000_000.0; + self.download_speed = (download as f64) / 1_000_000.0; + } +} + +#[derive(Debug, Clone)] +pub enum Message { + Tick, +} + +impl cosmic::Application for SysInfo { + type Flags = (); + type Message = Message; + type Executor = cosmic::SingleThreadExecutor; + + const APP_ID: &'static str = "io.github.rwxroot.cosmic-ext-applet-sysinfo"; + + fn init( + core: app::Core, + _flags: Self::Flags, + ) -> (Self, cosmic::iced::Task>) { + let system = System::new_with_specifics( + RefreshKind::nothing() + .with_memory(MemoryRefreshKind::nothing().with_ram()) + .with_cpu(CpuRefreshKind::nothing().with_cpu_usage()), + ); + + let networks = Networks::new(); + + ( + Self { + core, + system, + networks, + cpu_usage: 0.0, + ram_usage: 0, + download_speed: 0.00, + upload_speed: 0.00, + }, + cosmic::iced::Task::none(), + ) + } + + fn core(&self) -> &cosmic::app::Core { + &self.core + } + + fn core_mut(&mut self) -> &mut cosmic::app::Core { + &mut self.core + } + + fn subscription(&self) -> Subscription { + cosmic::iced::time::every(Duration::from_secs(2)).map(|_| Message::Tick) + } + + fn update(&mut self, message: Message) -> cosmic::iced::Task> { + match message { + Message::Tick => { + self.update(); + } + } + + cosmic::iced::Task::none() + } + + fn view(&self) -> Element { + let content = { + row![ + text(format!("C: {:.0}%", self.cpu_usage)), + text(format!("R: {}%", self.ram_usage)), + text(format!( + "N: ↓{:.2}MB/s ↑{:.2}MB/s", + self.download_speed, self.upload_speed + )), + ] + .spacing(8) + .align_y(Alignment::Center) + }; + + let button = button::custom(content) + .padding([ + self.core.applet.suggested_padding(false), + self.core.applet.suggested_padding(false), + ]) + .class(cosmic::theme::Button::AppletIcon); + + autosize::autosize(button, cosmic::widget::Id::unique()).into() + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..4da86b2 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,5 @@ +pub mod applet; + +pub fn run() -> cosmic::iced::Result { + applet::run() +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..656ab41 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,8 @@ +fn main() -> cosmic::iced::Result { + tracing_subscriber::fmt::init(); + let _ = tracing_log::LogTracer::init(); + + tracing::info!("Starting sysinfo applet"); + + cosmic_ext_applet_sysinfo::run() +}