use std::path::PathBuf;
use anyhow::bail;
use crate::cli::branding::Branding;
#[derive(Debug, Clone)]
pub struct Home {
pub dir: PathBuf,
}
impl Home {
pub fn locate(branding: &Branding) -> anyhow::Result<Home> {
let var = |k: &str| std::env::var_os(k).filter(|d| !d.is_empty());
let dir = if let Some(d) = var(branding.home_env) {
PathBuf::from(d)
} else if let Some(d) = var("XDG_CONFIG_HOME") {
PathBuf::from(d).join(branding.bin_name)
} else if let Some(h) = var("HOME") {
PathBuf::from(h).join(".config").join(branding.bin_name)
} else {
bail!(
"cannot find a configuration directory: set {} or HOME",
branding.home_env
);
};
Ok(Home { dir })
}
pub fn credentials_path(&self) -> PathBuf {
self.dir.join("credentials.toml")
}
}