use std::env::{current_dir,var_os,args}; use std::path::PathBuf; use colored::{Colorize,ColoredString}; //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"|"-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 ch1: String; for part in &parts[0..len] { if part.to_string() != "" { // to avoid the 1st "/" ch1 = part.chars().next().expect(part).to_string(); // 1st char of each part short_dir = short_dir.replace(part, &ch1); } } } 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(); let ssh_char:ColoredString; let mut ssh_char_space: String = "".to_string(); if args.len() > 1 { shell = args[1].clone(); } else { shell = "none".to_string(); } /* if user == "root" { println!("heh"); }*/ match var_os("SSH_TTY") { Some(_val) => { ssh_char = "".on_truecolor(0,150,180).truecolor(20,20,20); ssh_char_space = " ";//.to_string(); }, None => { ssh_char = "".truecolor(34,109,155); } } print!("{}{}{} {}{} ", ssh_char, ssh_char_space, get_shell_char(shell).truecolor(75,75,75), abrev_path(pwd,homedir).italic().truecolor(82,82,82), angle.truecolor(0, 255, 180), ); Ok(()) }