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
use std::path::PathBuf; pub fn is_ci() -> bool { std::env::var_os("CI").is_some() } pub fn home_dir() -> Option<PathBuf> { if let Some(h) = std::env::var_os("HOME") { return Some(h.into()); } #[cfg(windows)] if let Some(h) = std::env::var_os("USERPROFILE") { return Some(h.into()); } None } fn non_empty_path_var(key: &str) -> Option<PathBuf> { std::env::var(key) .ok() .map(|s| s.trim().to_string()) .filter(|s| !s.is_empty()) .map(PathBuf::from) } pub fn xdg_config_home() -> Option<PathBuf> { non_empty_path_var("XDG_CONFIG_HOME") } pub fn xdg_data_home() -> Option<PathBuf> { non_empty_path_var("XDG_DATA_HOME") } pub fn xdg_cache_home() -> Option<PathBuf> { non_empty_path_var("XDG_CACHE_HOME") }