use std::env::current_dir; use std::env::var_os; use std::env::args; use std::path::PathBuf; //use std::ffi::OsString; use colored::Colorize; 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; if part.to_string() != "" { // to avoid "/" fch = part.chars().next().expect(p).to_string(); //1st char of p short_dir = short_dir.replace(part, &fch); } } } short_dir } 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 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 user == "root" { 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(()) }