rsftch 0.3.4

Lightning fast hardware fetch tool written in rust.
use colored::Colorize;
use nixinfo::uptime;
use std::env;

mod mods {
    pub mod r#ascii;
    pub mod r#fn;
}

use mods::r#ascii::*;
use mods::r#fn::*;

fn main() {
    let mut args: Vec<String> = env::args().collect();
    let mut overriden_ascii: Option<String> = None;
    for count in 0..args.len() {
        let arg = &args[count];

        if arg == "-h" || arg == "--help" || arg == "--usage" {
            return help();
        } else if arg == "-o" || arg == "--override" {
            if count + 1 < args.len() {
                overriden_ascii = Some(std::mem::replace(&mut args[count + 1], String::new()));
            } else {
                println!("Error: Missing argument for override.\n");
                return help();
            }
        }
    }

    info(overriden_ascii);
}

fn info(overriden_ascii: Option<String>) {
    let user = whoami();
    let hostname = uname_n();
    let distroascii = get_distro_ascii(overriden_ascii);
    let kernel = uname_r();
    let desktop = get_wm();
    let shell = shell_name();
    let terminal = get_terminal();
    let memory = get_mem();
    let os = uname_s(None);
    let cpu = get_cpu_info();

    let gpu = match get_gpu_info() {
        Ok(count) => count,
        Err(err) => {
            eprintln!("{}", err);
            "error in cpu".to_string()
        }
    };

    let uptime = match uptime() {
        Ok(string_from_uptime) => string_from_uptime,
        Err(error) => {
            eprintln!("{}", error);
            "error in uptime".to_string()
        }
    };

    println!("{}\n", distroascii.blue().bold());
    println!("{}  os      {}  {}", &"╭─".green(), "~>".green(), os);
    println!("{}  host    {}  {}", &"├─󱩛".green(), "~>".green(), hostname);
    println!("{}  shell   {}  {}", &"├─".green(), "~>".green(), shell);
    println!("{}  kernel  {}  {}\n", &"╰─".green(), "~>".green(), kernel);
    println!(
        "{}  user    {}  {}",
        &"╭─".bright_red(),
        "~>".bright_red(),
        user
    );
    println!(
        "{}  term    {}  {}",
        &"├─".bright_red(),
        "~>".bright_red(),
        terminal
    );
    println!(
        "{}  de/wm   {}  {}\n",
        &"╰─".bright_red(),
        "~>".bright_red(),
        desktop
    );
    println!("{}  cpu     {}  {}", &"╭─󰍛".purple(), "~>".purple(), cpu);
    println!("{}  gpu     {}  {}", &"├─󰍹".purple(), "~>".purple(), gpu);
    println!("{}  memory  {}  {}", &"├─".purple(), "~>".purple(), memory);
    println!("{}  uptime  {}  {}", &"╰─󰄉".purple(), "~>".purple(), uptime);
}