#[derive(PartialEq)] pub(crate) enum Shell { Sh, Bash, Fish, Zsh, Xonsh, Nu, Powershell, Unknown, } impl std::fmt::Display for Shell { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let shell = match self { Shell::Bash => "bash", Shell::Fish => "fish", Shell::Zsh => "zsh", Shell::Nu => "nu", Shell::Xonsh => "xonsh", Shell::Sh => "sh", Shell::Powershell => "powershell", Shell::Unknown => "unknown", }; write!(f, "{shell}") } } impl Shell { pub(crate) fn from_env() -> Shell { std::env::var("ATUIN_SHELL").map_or(Shell::Unknown, |shell| { Shell::from_string(shell.trim().to_lowercase().as_str()) }) } pub(crate) fn from_string(name: &str) -> Shell { match name { "bash" => Shell::Bash, "fish" => Shell::Fish, "zsh" => Shell::Zsh, "xonsh" => Shell::Xonsh, "nu" => Shell::Nu, "sh" => Shell::Sh, "powershell" => Shell::Powershell, _ => Shell::Unknown, } } }