From ef2f6dc56ebb8425d95a36b0922bed81892b7aa4 Mon Sep 17 00:00:00 2001 From: mewoocat <97066700+mewoocat@users.noreply.github.com> Date: Sun, 4 Aug 2024 04:42:53 -0500 Subject: [PATCH 1/5] Better logo (#1) --- src/main.rs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main.rs b/src/main.rs index 145283d..f18075e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -47,13 +47,24 @@ fn print_system_info( ) { println!( " -{CYAN} ▗▄ {BLUE}▗▄ ▄▖ {user_info} ~{RESET} -{CYAN} ▄▄🬸█▄▄▄{BLUE}🬸█▛ {CYAN}▃ {CYAN} {BLUE}System{RESET}  {os_name} -{BLUE} ▟▛ ▜{CYAN}▃▟🬕 {CYAN} {BLUE}Kernel{RESET}  {kernel_version} -{BLUE}🬋🬋🬫█ {CYAN}█🬛🬋🬋 {CYAN} {BLUE}Uptime{RESET}  {uptime} -{BLUE} 🬷▛🮃{CYAN}▙ ▟▛ {CYAN} {BLUE}WM{RESET}  {window_manager} -{BLUE} 🮃 {CYAN}▟█🬴{BLUE}▀▀▀█🬴▀▀ {CYAN}󰍛 {BLUE}Memory{RESET}  {memory_usage} -{CYAN} ▝▀ ▀▘ {BLUE}▀▘ {CYAN}󱥎 {BLUE}Storage (/){RESET}  {storage} +{CYAN} ▜▙▖ {BLUE}▝▜▙ ▟█▘ {user_info} ~{RESET} +{CYAN} ▗▟█████▙▖{BLUE}▜██▘ {CYAN}▟▙ {CYAN} {BLUE}System{RESET}  {os_name} +{BLUE} ▄▖ ▜▛ {CYAN}▟▛▘ {CYAN} {BLUE}Kernel{RESET}  {kernel_version} +{BLUE}▟███▛ {CYAN}▖ {BLUE}▝ {CYAN}▟███▛ {CYAN} {BLUE}Uptime{RESET}  {uptime} +{BLUE} ▗▟▛ {CYAN}▟▙ ▝▀ {CYAN} {BLUE}WM{RESET}  {window_manager} +{BLUE} ▜▛ {CYAN}▗██▙{BLUE}▝▜█████▛▘ {CYAN}󰍛 {BLUE}Memory{RESET}  {memory_usage} +{CYAN} ▗█▛ ▜▙▖ {BLUE}▝▜▙ {CYAN}󱥎 {BLUE}Storage (/){RESET}  {storage} + + + {CYAN} ▟█▖ {BLUE}▝█▙ ▗█▛ {user_info} ~{RESET} + {CYAN} ▗▄▄▟██▄▄▄▄▄{BLUE}▝█▙█▛ {CYAN}▖ {CYAN} {BLUE}System{RESET}  {os_name} + {CYAN} ▀▀▀▀▀▀▀▀▀▀▀▘{BLUE}▝██ {CYAN}▟█▖ {CYAN} {BLUE}Kernel{RESET}  {kernel_version} + {BLUE} ▟█▛ {BLUE}▝█▘{CYAN}▟█▛ {CYAN} {BLUE}Uptime{RESET}  {uptime} + {BLUE}▟█████▛ {CYAN}▟█████▛ {CYAN} {BLUE}WM{RESET}  {window_manager} + {BLUE} ▟█▛{CYAN}▗█▖ {CYAN}▟█▛ {CYAN}󰍛 {BLUE}Memory{RESET}  {memory_usage} + {BLUE} ▝█▛ {CYAN}██▖{BLUE}▗▄▄▄▄▄▄▄▄▄▄▄ {CYAN}󱥎 {BLUE}Storage (/){RESET}  {storage} + {BLUE} ▝ {CYAN}▟█▜█▖{BLUE}▀▀▀▀▀██▛▀▀▘ + {CYAN} ▟█▘ ▜█▖ {BLUE}▝█▛ " ); } From 81cdc0a28118384c3eb924cf046ff28411c5d989 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 4 Aug 2024 12:44:12 +0300 Subject: [PATCH 2/5] speeding it up --- Cargo.toml | 5 +---- src/main.rs | 4 +--- src/release.rs | 29 +++++++++------------------ src/system.rs | 54 +++++++++++--------------------------------------- src/uptime.rs | 2 +- 5 files changed, 24 insertions(+), 70 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9b1e9e9..bbd651c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version = "0.2.0" edition = "2021" [dependencies] -nix = {version = "0.29", features = ["fs"]} +nix = {version = "0.29", features = ["fs", "hostname"]} color-eyre = { version = "0.6", default-features = false } [profile.release] @@ -13,6 +13,3 @@ opt-level = "z" lto = true codegen-units = 1 panic = "abort" - - - diff --git a/src/main.rs b/src/main.rs index f18075e..3264d6b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ mod release; mod system; mod uptime; -use color_eyre::{Report, Result}; +use nix::sys::sysinfo::sysinfo; use crate::colors::{BLUE, CYAN, RESET}; use crate::desktop::get_desktop_info; @@ -32,8 +32,6 @@ fn main() -> Result<(), Report> { &memory_usage, &storage, ); - - Ok(()) } fn print_system_info( diff --git a/src/release.rs b/src/release.rs index 8dee91a..25f5640 100644 --- a/src/release.rs +++ b/src/release.rs @@ -1,38 +1,27 @@ use color_eyre::Result; use std::fs::{self, read_to_string}; -use std::io::{self, Read}; +use std::io; // Try to detect OS type as accurately as possible and without depending on uname. // /etc/os-release should generally imply Linux, and /etc/bsd-release would imply BSD system. -fn detect_os() -> Result { +fn detect_os() -> Result<&'static str, io::Error> { if fs::metadata("/etc/os-release").is_ok() || fs::metadata("/usr/lib/os-release").is_ok() { - Ok("Linux".to_string()) + Ok("Linux") } else if fs::metadata("/etc/rc.conf").is_ok() || fs::metadata("/etc/bsd-release").is_ok() { - Ok("BSD".to_string()) + Ok("BSD") } else { - Ok("Unknown".to_string()) + Ok("Unknown") } } -fn get_architecture() -> Result { - // Read architecture from /proc/sys/kernel/arch - let mut arch = String::new(); - fs::File::open("/proc/sys/kernel/arch")?.read_to_string(&mut arch)?; - let arch = arch.trim().to_string(); - Ok(arch) -} - pub fn get_system_info() -> Result { let system = detect_os()?; - let mut kernel_release = String::new(); - fs::File::open("/proc/sys/kernel/osrelease")?.read_to_string(&mut kernel_release)?; - let kernel_release = kernel_release.trim().to_string(); + let kernel_release = read_to_string("/proc/sys/kernel/osrelease")?; + let kernel_release = kernel_release.trim(); - let mut cpuinfo = String::new(); - fs::File::open("/proc/cpuinfo")?.read_to_string(&mut cpuinfo)?; - - let architecture = get_architecture()?; + let architecture = read_to_string("/proc/sys/kernel/arch")?; + let architecture = architecture.trim(); let result = format!("{system} {kernel_release} ({architecture})"); Ok(result) diff --git a/src/system.rs b/src/system.rs index 43a02f9..648c03f 100644 --- a/src/system.rs +++ b/src/system.rs @@ -1,17 +1,15 @@ use nix::sys::statvfs::statvfs; +use nix::sys::sysinfo::SysInfo; use std::env; -use std::fs::File; -use std::io::{self, BufRead}; -use std::path::Path; -use std::process::Command; +use std::io::{self}; use crate::colors::{CYAN, GREEN, RED, RESET, YELLOW}; pub fn get_username_and_hostname() -> Result { let username = env::var("USER").unwrap_or_else(|_| "unknown_user".to_string()); - let output = Command::new("hostname").output()?; - let hostname = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let hostname = nix::unistd::gethostname()?; + let hostname = hostname.to_string_lossy(); Ok(format!("{YELLOW}{username}{RED}@{GREEN}{hostname}")) } @@ -34,49 +32,21 @@ pub fn get_root_disk_usage() -> Result { )) } -pub fn get_memory_usage() -> Result { - fn parse_memory_info() -> Result<(f64, f64), io::Error> { - let path = Path::new("/proc/meminfo"); - let file = File::open(path)?; - let reader = io::BufReader::new(file); - - let mut total_memory_kb = 0.0; - let mut available_memory_kb = 0.0; - - for line in reader.lines() { - let line = line?; - if line.starts_with("MemTotal:") { - total_memory_kb = line - .split_whitespace() - .nth(1) - .ok_or_else(|| { - io::Error::new(io::ErrorKind::InvalidData, "Failed to parse MemTotal") - })? - .parse::() - .unwrap_or(0.0); - } else if line.starts_with("MemAvailable:") { - available_memory_kb = line - .split_whitespace() - .nth(1) - .ok_or_else(|| { - io::Error::new(io::ErrorKind::InvalidData, "Failed to parse MemAvailable") - })? - .parse::() - .unwrap_or(0.0); - } - } +pub fn get_memory_usage(info: SysInfo) -> String { + #[inline(always)] + fn parse_memory_info(info: SysInfo) -> (f64, f64) { + let total_memory_kb = (info.ram_total() / 1024) as f64; + let available_memory_kb = (info.ram_unused() / 1024) as f64; let total_memory_gb = total_memory_kb / (1024.0 * 1024.0); let available_memory_gb = available_memory_kb / (1024.0 * 1024.0); let used_memory_gb = total_memory_gb - available_memory_gb; - Ok((used_memory_gb, total_memory_gb)) + (used_memory_gb, total_memory_gb) } - let (used_memory, total_memory) = parse_memory_info()?; + let (used_memory, total_memory) = parse_memory_info(info); let percentage_used = (used_memory / total_memory * 100.0).round() as u64; - Ok(format!( - "{used_memory:.2} GiB / {total_memory:.2} GiB ({CYAN}{percentage_used}%{RESET})" - )) + format!("{used_memory:.2} GiB / {total_memory:.2} GiB ({CYAN}{percentage_used}%{RESET})") } diff --git a/src/uptime.rs b/src/uptime.rs index ea991a1..2183143 100644 --- a/src/uptime.rs +++ b/src/uptime.rs @@ -25,7 +25,7 @@ pub fn get_current() -> Result { let hours = (total_minutes % (60 * 24)) / 60; let minutes = total_minutes % 60; - let mut parts = Vec::new(); + let mut parts = Vec::with_capacity(3); if days > 0 { parts.push(format!("{days} days")); } From a44db5e5f36a255f7f281c0d69c47f3a157cc2cc Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 4 Aug 2024 13:07:27 +0300 Subject: [PATCH 3/5] shell name & colors in output --- src/colors.rs | 7 +++++++ src/main.rs | 40 ++++++++++++++++++++-------------------- src/system.rs | 10 ++++++++++ 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/colors.rs b/src/colors.rs index f9b8bbc..1aa8096 100644 --- a/src/colors.rs +++ b/src/colors.rs @@ -4,3 +4,10 @@ pub const CYAN: &str = "\x1b[36m"; pub const GREEN: &str = "\x1b[32m"; pub const YELLOW: &str = "\x1b[33m"; pub const RED: &str = "\x1b[31m"; +pub const MAGENTA: &str = "\x1b[35m"; + +pub fn print_dots() -> Result { + let colors = format!("{BLUE} {CYAN} {GREEN} {YELLOW} {RED} {MAGENTA} {RESET}"); + + Ok(colors) +} diff --git a/src/main.rs b/src/main.rs index 3264d6b..713bf70 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,13 +4,13 @@ mod release; mod system; mod uptime; -use nix::sys::sysinfo::sysinfo; - -use crate::colors::{BLUE, CYAN, RESET}; +use crate::colors::{print_dots, BLUE, CYAN, RESET}; use crate::desktop::get_desktop_info; use crate::release::{get_os_pretty_name, get_system_info}; -use crate::system::{get_memory_usage, get_root_disk_usage, get_username_and_hostname}; +use crate::system::{get_memory_usage, get_root_disk_usage, get_shell, get_username_and_hostname}; use crate::uptime::get_current; +use color_eyre::Report; +use nix::sys::sysinfo::sysinfo; fn main() -> Result<(), Report> { color_eyre::install()?; @@ -18,51 +18,51 @@ fn main() -> Result<(), Report> { let user_info = get_username_and_hostname()?; let os_name = get_os_pretty_name()?; let kernel_version = get_system_info()?; + let shell = get_shell()?; let uptime = get_current()?; let window_manager = get_desktop_info()?; - let memory_usage = get_memory_usage()?; + let sys_info = sysinfo()?; + let memory_usage = get_memory_usage(sys_info); let storage = get_root_disk_usage()?; + let colors = print_dots()?; print_system_info( &user_info, &os_name, &kernel_version, + &shell, &uptime, &window_manager, &memory_usage, &storage, + &colors, ); + + Ok(()) } fn print_system_info( user_info: &str, os_name: &str, kernel_version: &str, + shell: &str, uptime: &str, window_manager: &str, memory_usage: &str, storage: &str, + colors: &str, ) { println!( " -{CYAN} ▜▙▖ {BLUE}▝▜▙ ▟█▘ {user_info} ~{RESET} -{CYAN} ▗▟█████▙▖{BLUE}▜██▘ {CYAN}▟▙ {CYAN} {BLUE}System{RESET}  {os_name} -{BLUE} ▄▖ ▜▛ {CYAN}▟▛▘ {CYAN} {BLUE}Kernel{RESET}  {kernel_version} -{BLUE}▟███▛ {CYAN}▖ {BLUE}▝ {CYAN}▟███▛ {CYAN} {BLUE}Uptime{RESET}  {uptime} -{BLUE} ▗▟▛ {CYAN}▟▙ ▝▀ {CYAN} {BLUE}WM{RESET}  {window_manager} -{BLUE} ▜▛ {CYAN}▗██▙{BLUE}▝▜█████▛▘ {CYAN}󰍛 {BLUE}Memory{RESET}  {memory_usage} -{CYAN} ▗█▛ ▜▙▖ {BLUE}▝▜▙ {CYAN}󱥎 {BLUE}Storage (/){RESET}  {storage} - - {CYAN} ▟█▖ {BLUE}▝█▙ ▗█▛ {user_info} ~{RESET} {CYAN} ▗▄▄▟██▄▄▄▄▄{BLUE}▝█▙█▛ {CYAN}▖ {CYAN} {BLUE}System{RESET}  {os_name} {CYAN} ▀▀▀▀▀▀▀▀▀▀▀▘{BLUE}▝██ {CYAN}▟█▖ {CYAN} {BLUE}Kernel{RESET}  {kernel_version} - {BLUE} ▟█▛ {BLUE}▝█▘{CYAN}▟█▛ {CYAN} {BLUE}Uptime{RESET}  {uptime} - {BLUE}▟█████▛ {CYAN}▟█████▛ {CYAN} {BLUE}WM{RESET}  {window_manager} - {BLUE} ▟█▛{CYAN}▗█▖ {CYAN}▟█▛ {CYAN}󰍛 {BLUE}Memory{RESET}  {memory_usage} - {BLUE} ▝█▛ {CYAN}██▖{BLUE}▗▄▄▄▄▄▄▄▄▄▄▄ {CYAN}󱥎 {BLUE}Storage (/){RESET}  {storage} - {BLUE} ▝ {CYAN}▟█▜█▖{BLUE}▀▀▀▀▀██▛▀▀▘ - {CYAN} ▟█▘ ▜█▖ {BLUE}▝█▛ + {BLUE} ▟█▛ {BLUE}▝█▘{CYAN}▟█▛ {CYAN} {BLUE}Shell{RESET}  {shell} + {BLUE}▟█████▛ {CYAN}▟█████▛ {CYAN} {BLUE}Uptime{RESET}  {uptime} + {BLUE} ▟█▛{CYAN}▗█▖ {CYAN}▟█▛ {CYAN} {BLUE}WM{RESET}  {window_manager} + {BLUE} ▝█▛ {CYAN}██▖{BLUE}▗▄▄▄▄▄▄▄▄▄▄▄ {CYAN}󰍛 {BLUE}Memory{RESET}  {memory_usage} + {BLUE} ▝ {CYAN}▟█▜█▖{BLUE}▀▀▀▀▀██▛▀▀▘ {CYAN}󱥎 {BLUE}Storage (/){RESET}  {storage} + {CYAN} ▟█▘ ▜█▖ {BLUE}▝█▛ {CYAN} {BLUE}Colors{RESET}  {colors} " ); } diff --git a/src/system.rs b/src/system.rs index 648c03f..cfd7745 100644 --- a/src/system.rs +++ b/src/system.rs @@ -14,6 +14,16 @@ pub fn get_username_and_hostname() -> Result { Ok(format!("{YELLOW}{username}{RED}@{GREEN}{hostname}")) } +pub fn get_shell() -> Result { + // In some setups, $SHELL is set to the store path + // of the actual shell program. While we can consider + // trimming by name, I will leave it to the user to handle + // what their SHELL variable is really set to. + let shell = env::var("SHELL").unwrap_or_else(|_| "unknown_shell".to_string()); + + Ok(shell) +} + pub fn get_root_disk_usage() -> Result { let vfs = statvfs("/")?; let block_size = vfs.block_size() as u64; From c2deeb38a420c85eec32774ec12bdbfd6629a90c Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 4 Aug 2024 13:08:48 +0300 Subject: [PATCH 4/5] increment version --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 722e684..d6fe5ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,7 +105,7 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "microfetch" -version = "0.2.0" +version = "0.3.0" dependencies = [ "color-eyre", "nix", diff --git a/Cargo.toml b/Cargo.toml index bbd651c..6bc2e47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "microfetch" -version = "0.2.0" +version = "0.3.0" edition = "2021" [dependencies] From fc62d72cab2760f80532ab7082e40805f6ba8d42 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 4 Aug 2024 16:35:16 +0300 Subject: [PATCH 5/5] add demo to README --- .github/assets/demo.png | Bin 0 -> 33152 bytes README.md | 39 +++++++++++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 .github/assets/demo.png diff --git a/.github/assets/demo.png b/.github/assets/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..945e489340a9628ce18893687ab431bb06248fbc GIT binary patch literal 33152 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