limes-login 0.2.0

Login manager/session-launch library for limes frontends.
Documentation
use std::env;
use std::path::PathBuf;

pub(super) fn session_desktop_dirs() -> Vec<PathBuf> {
    let mut roots = Vec::new();

    if let Some(home) = env::var_os("XDG_DATA_HOME") {
        roots.push(PathBuf::from(home));
    } else if let Some(home) = env::var_os("HOME") {
        roots.push(PathBuf::from(home).join(".local/share"));
    }

    if let Some(value) = env::var_os("XDG_DATA_DIRS") {
        roots.extend(env::split_paths(&value));
    } else {
        roots.extend([
            PathBuf::from("/run/current-system/sw/share"),
            PathBuf::from("/etc/profiles/per-user")
                .join(env::var("USER").unwrap_or_default())
                .join("share"),
            PathBuf::from("/usr/local/share"),
            PathBuf::from("/usr/share"),
        ]);
    }

    let mut dirs = Vec::new();
    for root in roots {
        for subdir in ["wayland-sessions", "xsessions"] {
            let directory = root.join(subdir);
            if !dirs.iter().any(|existing| existing == &directory) {
                dirs.push(directory);
            }
        }
    }

    dirs
}