hyprshell-core-lib 0.7.0

hyprshell is a Rust-based GUI designed to enhance window management in hyprland
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()
}