This commit is contained in:
raf 2024-08-04 00:05:57 +03:00
parent 6dafa776d2
commit 0e4b2d2ac1
Signed by: NotAShelf
GPG key ID: AF26552424E53993
4 changed files with 67 additions and 24 deletions

View file

@ -9,5 +9,18 @@ pub fn get_desktop_info() -> Result<String, io::Error> {
// instead of just "foo" // instead of just "foo"
let desktop_env = desktop_env.trim_start_matches("none+"); let desktop_env = desktop_env.trim_start_matches("none+");
Ok(format!("{desktop_env} ({display_backend})")) // Use "Unknown" if desktop_env or display_backend is empty
let desktop_env = if desktop_env.is_empty() {
"Unknown"
} else {
desktop_env
};
let display_backend = if display_backend.is_empty() {
"Unknown"
} else {
&display_backend
};
Ok(format!("{} ({})", desktop_env, display_backend))
} }

View file

@ -15,16 +15,36 @@ use crate::uptime::get_system_uptime;
fn main() -> Result<(), Report> { fn main() -> Result<(), Report> {
color_eyre::install()?; color_eyre::install()?;
let user_info = get_username_and_hostname().expect("Failed to get username and hostname"); let user_info = get_username_and_hostname()?;
let os_name = get_os_pretty_name().expect("Failed to get OS name"); let os_name = get_os_pretty_name()?;
let kernel_version = get_system_info().expect("Failed to get kernel info"); let kernel_version = get_system_info()?;
let uptime = get_system_uptime().expect("Failed to get uptime"); let uptime = get_system_uptime()?;
let window_manager = get_desktop_info().expect("Failed to get desktop info"); let window_manager = get_desktop_info()?;
let memory_usage = get_memory_usage().expect("Failed to get memory usage"); let memory_usage = get_memory_usage()?;
let storage = get_root_disk_usage().expect("Failed to get storage info"); let storage = get_root_disk_usage()?;
// Construct the ASCII art with dynamic OS name print_system_info(
&user_info,
&os_name,
&kernel_version,
&uptime,
&window_manager,
&memory_usage,
&storage,
);
Ok(())
}
fn print_system_info(
user_info: &str,
os_name: &str,
kernel_version: &str,
uptime: &str,
window_manager: &str,
memory_usage: &str,
storage: &str,
) {
println!( println!(
" "
{CYAN} {BLUE} {user_info} ~{RESET} {CYAN} {BLUE} {user_info} ~{RESET}
@ -34,8 +54,16 @@ fn main() -> Result<(), Report> {
{BLUE} 🬷🮃{CYAN} {CYAN} {BLUE}WM{RESET} {window_manager} {BLUE} 🬷🮃{CYAN} {CYAN} {BLUE}WM{RESET} {window_manager}
{BLUE} 🮃 {CYAN}🬴{BLUE}🬴 {CYAN}󰍛 {BLUE}Memory{RESET} {memory_usage} {BLUE} 🮃 {CYAN}🬴{BLUE}🬴 {CYAN}󰍛 {BLUE}Memory{RESET} {memory_usage}
{CYAN} {BLUE} {CYAN}󱥎 {BLUE}Storage (/){RESET} {storage} {CYAN} {BLUE} {CYAN}󱥎 {BLUE}Storage (/){RESET} {storage}
" ",
CYAN = CYAN,
BLUE = BLUE,
RESET = RESET,
user_info = user_info,
os_name = os_name,
kernel_version = kernel_version,
uptime = uptime,
window_manager = window_manager,
memory_usage = memory_usage,
storage = storage
); );
Ok(())
} }

View file

@ -1,4 +1,4 @@
use color_eyre::Result; use color_eyre::{Result};
use std::fs::{self, read_to_string}; use std::fs::{self, read_to_string};
use std::io::{self, Read}; use std::io::{self, Read};
@ -38,11 +38,10 @@ pub fn get_system_info() -> Result<String, io::Error> {
Ok(result) Ok(result)
} }
pub fn get_os_pretty_name() -> Option<String> { pub fn get_os_pretty_name() -> Result<String, io::Error> {
let os_release_content = read_to_string("/etc/os-release").ok()?; let os_release_content = read_to_string("/etc/os-release")?;
let os_release_lines: Vec<&str> = os_release_content.lines().collect(); let pretty_name = os_release_content
let pretty_name = os_release_lines .lines()
.iter()
.find(|line| line.starts_with("PRETTY_NAME=")) .find(|line| line.starts_with("PRETTY_NAME="))
.map(|line| { .map(|line| {
line.trim_start_matches("PRETTY_NAME=") line.trim_start_matches("PRETTY_NAME=")
@ -50,5 +49,8 @@ pub fn get_os_pretty_name() -> Option<String> {
.to_string() .to_string()
}); });
pretty_name match pretty_name {
Some(name) => Ok(name),
None => Ok("Unknown".to_string()),
}
} }

View file

@ -16,7 +16,7 @@ pub fn get_username_and_hostname() -> Result<String, io::Error> {
Ok(format!("{YELLOW}{username}{RED}@{GREEN}{hostname}")) Ok(format!("{YELLOW}{username}{RED}@{GREEN}{hostname}"))
} }
pub fn get_root_disk_usage() -> Result<String, Box<dyn std::error::Error>> { pub fn get_root_disk_usage() -> Result<String, io::Error> {
let vfs = statvfs("/")?; let vfs = statvfs("/")?;
let block_size = vfs.block_size() as u64; let block_size = vfs.block_size() as u64;
let total_blocks = vfs.blocks(); let total_blocks = vfs.blocks();
@ -25,12 +25,12 @@ pub fn get_root_disk_usage() -> Result<String, Box<dyn std::error::Error>> {
let total_size = block_size * total_blocks; let total_size = block_size * total_blocks;
let used_size = total_size - (block_size * available_blocks); let used_size = total_size - (block_size * available_blocks);
let total_size_gib = total_size as f64 / (1024.0 * 1024.0 * 1024.0); let total_size = total_size as f64 / (1024.0 * 1024.0 * 1024.0);
let used_size_gib = used_size as f64 / (1024.0 * 1024.0 * 1024.0); let used_size = used_size as f64 / (1024.0 * 1024.0 * 1024.0);
let usage_percentage = (used_size as f64 / total_size as f64) * 100.0; let usage = (used_size as f64 / total_size as f64) * 100.0;
Ok(format!( Ok(format!(
"{used_size_gib:.2} GiB / {total_size_gib:.2} GiB ({CYAN}{usage_percentage:.0}%{RESET})" "{used_size:.2} GiB / {total_size:.2} GiB ({CYAN}{usage:.0}%{RESET})"
)) ))
} }