statusline/icon.rs
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
use std::env;
/// Icon mode configurer
#[non_exhaustive]
#[expect(clippy::module_name_repetitions)]
pub enum IconMode {
/// Use text instead of icons
Text,
/// Use icons from nerdfonts
Icons,
/// Use alternative icon set (simpler icons, but sometimes hard to get the meaning)
MinimalIcons,
}
impl IconMode {
/// Detect prompt mode from `PS1_MODE` environment variable
///
/// | Environment | Resulting IconMode |
/// |--------------------|----------------------|
/// | `PS1_MODE=text` | Text |
/// | `PS1_MODE=minimal` | Alternative nerdfont |
/// | otherwise | Default nerdfont |
#[must_use]
pub fn build() -> Self {
match env::var("PS1_MODE") {
Ok(x) if x == "text" => Self::Text,
Ok(x) if x == "minimal" => Self::MinimalIcons,
_ => Self::Icons,
}
}
}
/// Associated icon getter, which respects icon mode
pub trait Icon {
/// Returns associated icon with respect to icon mode
fn icon(&self, mode: &IconMode) -> &'static str;
}
/// Pretty formatter with respect to selected icon mode
pub trait Pretty {
/// Pretty formats the object
fn pretty(&self, mode: &IconMode) -> Option<String>;
}