Initial Commit
This commit is contained in:
commit
8ccb89b3b5
1 changed files with 155 additions and 0 deletions
155
src/main.rs
Normal file
155
src/main.rs
Normal file
|
@ -0,0 +1,155 @@
|
|||
use std::fs::File;
|
||||
use std::io::{BufRead, BufReader};
|
||||
use std::process::Command;
|
||||
use ansi_term::Colour::{Red, Green, Yellow, Blue, Purple, Cyan};
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
|
||||
// User & hostname
|
||||
let user = Command::new("whoami")
|
||||
.output()
|
||||
.expect("Failed to get user");
|
||||
|
||||
let user = String::from_utf8_lossy(&user.stdout);
|
||||
|
||||
let hostname = Command::new("uname")
|
||||
.args(&["-n"])
|
||||
.output()
|
||||
.expect("Failed to get hostname");
|
||||
|
||||
let hostname = String::from_utf8_lossy(&hostname.stdout);
|
||||
|
||||
// Don't print user and hostname just yet.
|
||||
|
||||
// println!("{}@{}", user.trim(), hostname.trim());
|
||||
// println!("══════════════════════════════════");
|
||||
|
||||
// drop(user);
|
||||
//drop(hostname);
|
||||
|
||||
|
||||
// Read release file, AKA get OS name
|
||||
let mut release_distro = String::new();
|
||||
{
|
||||
let release_file = File::open("/etc/os-release").expect("Failed to find release file.");
|
||||
let mut release_reader = BufReader::new(release_file);
|
||||
release_reader.read_line(&mut release_distro).expect("Failed string conversion.");
|
||||
}
|
||||
|
||||
// Release file processing, huge credit to ChatGPT for this one!
|
||||
let mut distro_name: String = (&release_distro[5..release_distro.len() - 1]).to_string();
|
||||
distro_name = distro_name.replace("\"", "");
|
||||
// println!("OS: {}", Red.paint(distro_name.clone()));
|
||||
|
||||
let figlet = Command::new("figlet")
|
||||
.args(["-f", "smslant", &distro_name.clone()])
|
||||
.output();
|
||||
|
||||
let figlet = figlet.unwrap();
|
||||
let figlet = String::from_utf8_lossy(&figlet.stdout);
|
||||
|
||||
// Print all the things we've been saving.
|
||||
print!("{}", figlet);
|
||||
println!("{}@{}", user.clone().trim(), hostname.clone().trim());
|
||||
println!("------------------------");
|
||||
println!("OS: {}", Red.paint(distro_name.clone()));
|
||||
|
||||
// Free up RAM
|
||||
drop(release_distro);
|
||||
drop(distro_name);
|
||||
|
||||
// Kernel Version
|
||||
let kernel = Command::new("uname")
|
||||
.arg("-r")
|
||||
.output()
|
||||
.expect("Couldn't get kernel version!");
|
||||
|
||||
let kernel = String::from_utf8_lossy(&kernel.stdout);
|
||||
|
||||
println!("Kernel: {}", Yellow.paint(kernel.trim()));
|
||||
|
||||
// Read memfile
|
||||
if let Ok(file) = File::open("/proc/meminfo") {
|
||||
// Reader & Iterator
|
||||
let reader = BufReader::new(file);
|
||||
let mut lines = reader.lines();
|
||||
|
||||
// Vars
|
||||
let mut ramtotal: u32 = 0;
|
||||
let mut ramavail: u32 = 0;
|
||||
let mut ramused: u32 = 0;
|
||||
|
||||
// Read 1st & 2nd line
|
||||
if let Some(Ok(line)) = lines.next() {
|
||||
if let Some(idx) = line.find(char::is_whitespace) {
|
||||
// Reading & Parsing
|
||||
let mut line_processed = line[idx..].trim();
|
||||
line_processed = &line_processed[0..line_processed.len() - 3];
|
||||
// mafs
|
||||
let mut ram_gb: u32 = line_processed.parse().unwrap();
|
||||
ram_gb = ram_gb / 1048576;
|
||||
ramtotal = ram_gb;
|
||||
}
|
||||
}
|
||||
|
||||
lines.next();
|
||||
|
||||
if let Some(Ok(line)) = lines.next() {
|
||||
if let Some(idx) = line.find(char::is_whitespace) {
|
||||
// Reading & Parsing
|
||||
let mut line_processed = line[idx..].trim();
|
||||
line_processed = &line_processed[0..line_processed.len() - 3];
|
||||
// mafs
|
||||
let mut ram_gb: u32 = line_processed.parse().unwrap();
|
||||
ram_gb = ram_gb / 1048576;
|
||||
ramavail = ram_gb;
|
||||
}
|
||||
}
|
||||
|
||||
ramused = ramtotal - ramavail;
|
||||
|
||||
println!("Mem: {}/{} GB ({} GB Available)", Green.paint(ramused.to_string()), Green.paint(ramtotal.to_string()), Green.paint(ramavail.to_string()));
|
||||
|
||||
// Read Uptime
|
||||
|
||||
let uptime = Command::new("uptime")
|
||||
.output()
|
||||
.expect("Failed to get uptime");
|
||||
|
||||
let mut uptime = String::from_utf8_lossy(&uptime.stdout).trim().to_string();
|
||||
uptime = uptime.split_whitespace().nth(2).unwrap_or("").to_string();
|
||||
uptime = uptime[0..uptime.len() - 1].to_string();
|
||||
println!("Uptime: {} (H:MM)", Blue.paint(uptime));
|
||||
} else {
|
||||
panic!("Cannot find /proc/meminfo");
|
||||
}
|
||||
|
||||
// Get shell
|
||||
let shell = env::var("SHELL").expect("Could not read $SHELL variable");
|
||||
println!("Shell: {}", Cyan.paint(shell));
|
||||
|
||||
// Time for a challenge, Get CPU model!
|
||||
{
|
||||
let file = File::open("/proc/cpuinfo").expect("Could not read /proc/cpuinfo");
|
||||
let reader = BufReader::new(file);
|
||||
let mut lines = reader.lines();
|
||||
|
||||
// Read up until the 5th line
|
||||
let mut i = 1;
|
||||
while i < 5 {
|
||||
lines.next();
|
||||
i = i + 1;
|
||||
|
||||
}
|
||||
|
||||
drop(i);
|
||||
let mut model: String = String::new();
|
||||
|
||||
if let Some(Ok(line)) = lines.next() {
|
||||
model = line.split(":").nth(1).expect("Failed to parse CPU Info").trim().to_string();
|
||||
}
|
||||
|
||||
println!("CPU: {}", Purple.paint(model));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue