use std::env::current_dir as current_dir; use std::env::var_os as var_os; use std::env::args as args; use colored::Colorize; use std::path::PathBuf; use std::ffi::OsString; fn get_shell_char (shell: String) -> String { let shell_char = match shell.as_str() { "bash"|"/bin/bash" => "", "zsh"|"/bin/zsh"|"/usr/bin/zsh" => "󰰶", "fish" => "󰈺", "nushell" => "", "ion" => "", "oursh" => "󱢇", _ => "󱆃", }; shell_char.to_string() } fn abrev_path (pwd: PathBuf, homedir: String) -> String { let mut path = pwd.display().to_string(); path = path.replace(&homedir, "~"); // Abreviate homedir with "~" let mut short_dir = path.clone(); let slashes = path.matches("/").count(); if slashes > 3 { let parts: Vec<&str> = path.split("/").collect(); let len = parts.len() - 1; let mut fch: String; for p in &parts[0..len] { let part = p; fch = part.chars().next().expect("REASON").to_string(); //1st char of p short_dir = short_dir.replace(part, &fch); } } short_dir } fn root_user (user: Option) -> bool { let u = user.expect("UnknownUser").to_str().expect("UnknownUser").to_string(); if u == "root" { true } else { false } } fn main() -> std::io::Result<()> { let angle = "❯"; let pwd = current_dir()?; let args: Vec = args().collect(); let shell: String; let user = var_os("USER"); //.expect("UnknownUser").to_str().expect("UnknownUser").to_string(); //let user = var_os("USER").expect("UnknownUser").to_str().expect("UnknownUser").to_string(); let homedir = var_os("HOME").expect("UnknownDir").to_str().expect("UnknownDir").to_string(); if args.len() > 1 { shell = args[1].clone(); } else { shell = "none".to_string(); } //if root_user(user) { // println!("heh"); //} print!("{} {}{} ", get_shell_char(shell).truecolor(75,75,75), abrev_path(pwd,homedir).italic().truecolor(75,75,75), angle.truecolor(0, 255, 180), ); Ok(()) }