26 lines
972 B
Rust
26 lines
972 B
Rust
use nu_ansi_term::AnsiGenericString;
|
||
use nu_ansi_term::Color::Rgb;
|
||
use std::env::var_os; // For environment variables
|
||
|
||
pub const SSH_SYMBOL: &str = "\u{276F}"; // SSH indicator symbol: "❯"
|
||
pub const SSH_COL: nu_ansi_term::Color = Rgb(255, 149, 0); // In SSH session
|
||
pub const NORMIE_COL: nu_ansi_term::Color = Rgb(82, 82, 82); // Non-SSH session
|
||
const SSH_ENV_VARS: [&str; 3] = ["SSH_TTY", "SSH_CONNECTION", "SSH_CLIENT"]; // Environment variables normally present in SSH sessions
|
||
|
||
/// Checks if current session is an SSH session
|
||
fn is_ssh_session() -> bool {
|
||
SSH_ENV_VARS
|
||
.iter()
|
||
.any(|&var_name| var_os(var_name).is_some()) // any() iterates through the iter and stops at first `true`. Equal to `||`(`or` condition)
|
||
}
|
||
|
||
/// SSH shell indicator
|
||
pub fn indicator() -> AnsiGenericString<'static, str> {
|
||
let is_ssh: bool = is_ssh_session();
|
||
if is_ssh {
|
||
SSH_COL.paint(SSH_SYMBOL)
|
||
} else {
|
||
NORMIE_COL.paint(SSH_SYMBOL)
|
||
}
|
||
}
|