1extern crate uptime_lib;
2mod logo;
3use std::env::var;
4
5fn get_time() -> String {
6 let mut uptime = match uptime_lib::get() {
7 Ok(uptime) => {
8 uptime.as_secs_f64()
9 }
10 Err(err) => {
11 eprintln!("uptime: {}", err);
12 std::process::exit(1);
13 }
14 };
15
16 let mut uptime_str: String = String::new();
17
18 let days: f64 = uptime as f64 / 60.0 / 60.0 / 24.0;
19 if days >= 1.0 {
20 uptime_str.push_str(&format!("{}d ", days as i32));
21 uptime -= f64::from(days as i32 * 24 * 60 * 60);
22 }
23
24 let hours: f64 = uptime / 60.0 / 60.0;
25 if hours >= 1.0 {
26 uptime_str.push_str(&format!("{}h ", hours as i32));
27 uptime -= f64::from(hours as i32 * 60 * 60);
28 }
29
30 let minutes: f64 = uptime / 60.0;
31 if minutes >= 1.0 {
32 uptime_str.push_str(&format!("{}m ", minutes as i32));
33 uptime -= f64::from(minutes as i32 * 60);
34 }
35
36 uptime_str.push_str(&format!("{}s ", uptime as i32));
37 uptime_str
38}
39
40#[cfg(target_os = "linux")]
41fn get_session() -> String {
42 match var("XDG_CURRENT_DESKTOP") {
43 Ok(session) => String::from(session),
44 Err(_e) => String::from("Error Finding Session")
45 }
46}
47
48#[cfg(target_os = "windows")]
49fn get_session() -> String {
50 String::from("Windows")
51}
52
53fn main() {
54 get_time();
55
56 let distro: logo::Logos = match whoami::distro().as_str().split(" ").collect::<Vec<&str>>()[0] {
57 "Arch" => logo::Logos::ArchLinux,
58 "Ubuntu" => logo::Logos::Ubuntu,
59 "Windows" => logo::Logos::Windows,
60 _ => logo::Logos::Unknown(whoami::distro())
61 };
62
63 println!(" ╭────────╮");
64 println!(" {} \x1b[0;0m│ \x1b[1;31m User \x1b[0;0m│ {}\x1b[1m@\x1b[0m{}", logo::get(&distro)[0], whoami::username(), whoami::hostname());
65 println!(" {} \x1b[0;0m│ \x1b[1;33m OS \x1b[0;0m│ {}", logo::get(&distro)[1], whoami::distro());
66 println!(" {} \x1b[0;0m│ \x1b[1;36m WM \x1b[0;0m│ {}", logo::get(&distro)[2], get_session());
67 println!(" {} \x1b[0;0m│ \x1b[1;34m UP \x1b[0;0m│ {}", logo::get(&distro)[3], get_time());
68 println!(" ╰────────╯");
69}
70