use std::env;
use std::path::PathBuf;
use tracing::warn;
pub fn get_default_config_path() -> PathBuf {
let mut path = get_config_dir();
path.push("hyprshell/config.ron");
path
}
pub fn get_default_css_path() -> PathBuf {
let mut path = get_config_dir();
path.push("hyprshell/styles.css");
path
}
pub fn get_default_data_dir() -> PathBuf {
let mut path = get_data_dir();
path.push("hyprshell");
path
}
pub fn get_data_dir() -> PathBuf {
env::var_os("XDG_DATA_HOME")
.map(PathBuf::from)
.or_else(|| {
env::var_os("HOME")
.map(|home| PathBuf::from(format!("{}/.local/share", home.to_string_lossy())))
})
.expect("Failed to get config dir (XDG_DATA_HOME or HOME not set)")
}
pub fn get_config_dir() -> PathBuf {
env::var_os("XDG_CONFIG_HOME")
.map(PathBuf::from)
.or_else(|| {
env::var_os("HOME")
.map(|home| PathBuf::from(format!("{}/.config", home.to_string_lossy())))
})
.expect("Failed to get config dir (XDG_CONFIG_HOME or HOME not set)")
}
pub fn find_config_dirs() -> Vec<PathBuf> {
env::var_os("XDG_CONFIG_DIRS")
.map(|val| env::split_paths(&val).collect())
.unwrap_or_else(|| vec![PathBuf::from("/etc/xdg/")])
}
pub fn find_application_dirs() -> Vec<PathBuf> {
let mut dirs = env::var_os("XDG_DATA_DIRS")
.map(|val| env::split_paths(&val).collect())
.unwrap_or_else(|| {
vec![
PathBuf::from("/usr/local/share"),
PathBuf::from("/usr/share"),
]
});
if let Some(data_home) = env::var_os("XDG_DATA_HOME").map(PathBuf::from).map_or_else(
|| {
env::var_os("HOME")
.map(|p| PathBuf::from(p).join(".local/share"))
.or_else(|| {
warn!("No XDG_DATA_HOME and HOME environment variable found");
None
})
},
Some,
) {
dirs.push(data_home)
}
dirs.into_iter()
.map(|dir| dir.join("applications"))
.collect()
}