aboutsummaryrefslogtreecommitdiffstats
path: root/crates/turtle/src/atuin_common/shell.rs
blob: 880ff00ff94732b1dd1443f86d50467c99f7a32b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#[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 {
            Self::Bash => "bash",
            Self::Fish => "fish",
            Self::Zsh => "zsh",
            Self::Nu => "nu",
            Self::Xonsh => "xonsh",
            Self::Sh => "sh",
            Self::Powershell => "powershell",

            Self::Unknown => "unknown",
        };

        write!(f, "{shell}")
    }
}

impl Shell {
    pub(crate) fn from_env() -> Self {
        std::env::var("ATUIN_SHELL").map_or(Self::Unknown, |shell| {
            Self::from_string(shell.trim().to_lowercase().as_str())
        })
    }

    pub(crate) fn from_string(name: &str) -> Self {
        match name {
            "bash" => Self::Bash,
            "fish" => Self::Fish,
            "zsh" => Self::Zsh,
            "xonsh" => Self::Xonsh,
            "nu" => Self::Nu,
            "sh" => Self::Sh,
            "powershell" => Self::Powershell,

            _ => Self::Unknown,
        }
    }
}