use anyhow::{Context, Result};
use std::path::PathBuf;
fn base_dir(env_var: &str, default_suffix: &str) -> Result<PathBuf> {
if let Some(val) = std::env::var_os(env_var).filter(|v| !v.is_empty()) {
let path = PathBuf::from(val);
if path.is_absolute() {
return Ok(path);
}
tracing::debug!(
var = env_var,
"ignoring non-absolute XDG path, falling back to default"
);
}
let home = home::home_dir().context("Could not determine home directory")?;
Ok(home.join(default_suffix))
}
pub fn config_dir() -> Result<PathBuf> {
Ok(base_dir("XDG_CONFIG_HOME", ".config")?.join("workmux"))
}
pub fn cache_dir() -> Result<PathBuf> {
Ok(base_dir("XDG_CACHE_HOME", ".cache")?.join("workmux"))
}
pub fn state_dir() -> Result<PathBuf> {
Ok(base_dir("XDG_STATE_HOME", ".local/state")?.join("workmux"))
}