use std::path::{Path, PathBuf};
pub(super) fn resolve_gh_config_dir() -> Option<String> {
let explicit = std::env::var("GH_CONFIG_DIR").ok().map(PathBuf::from);
if let Some(path) = explicit.filter(|path| has_gh_hosts_file(path)) {
return Some(path.display().to_string());
}
let home = PathBuf::from(std::env::var_os("HOME")?);
for path in [
home.join(".config/gh"),
home.join("snap/gh/current/.config/gh"),
] {
if has_gh_hosts_file(&path) {
return Some(path.display().to_string());
}
}
for entry in std::fs::read_dir(home.join("snap/gh")).ok()?.flatten() {
let path = entry.path().join(".config/gh");
if has_gh_hosts_file(&path) {
return Some(path.display().to_string());
}
}
None
}
fn has_gh_hosts_file(path: &Path) -> bool {
path.join("hosts.yml").exists()
}