A cross-platform Rust library for resolving XDG and platform-specific directories with proper fallbacks.
at main 1.9 kB view raw
1use std::{env, path::PathBuf}; 2 3use crate::xdg; 4 5pub fn bin_home() -> Option<PathBuf> { 6 xdg::resolve_path_with_fallback(xdg::BIN_HOME, ".local/bin") 7} 8 9pub fn cache_home() -> Option<PathBuf> { 10 xdg::resolve_path_with_fallback(xdg::CACHE_HOME, ".cache") 11} 12 13pub fn config_home() -> Option<PathBuf> { 14 xdg::resolve_path_with_fallback(xdg::CONFIG_HOME, ".config") 15} 16 17pub fn config_local() -> Option<PathBuf> { 18 config_home() 19} 20 21pub fn data_home() -> Option<PathBuf> { 22 xdg::resolve_path_with_fallback(xdg::DATA_HOME, ".local/share") 23} 24 25pub fn data_local() -> Option<PathBuf> { 26 data_home() 27} 28 29pub fn desktop() -> Option<PathBuf> { 30 xdg::resolve_path_with_fallback(xdg::DESKTOP_DIR, "Desktop") 31} 32 33pub fn documents() -> Option<PathBuf> { 34 xdg::resolve_path_with_fallback(xdg::DOCUMENTS_DIR, "Documents") 35} 36 37pub fn downloads() -> Option<PathBuf> { 38 xdg::resolve_path_with_fallback(xdg::DOWNLOAD_DIR, "Downloads") 39} 40 41pub fn fonts() -> Option<PathBuf> { 42 env::home_dir().map(|p| p.join(".local/share/fonts")) 43} 44 45pub fn music() -> Option<PathBuf> { 46 xdg::resolve_path_with_fallback(xdg::MUSIC_DIR, "Music") 47} 48 49pub fn pictures() -> Option<PathBuf> { 50 xdg::resolve_path_with_fallback(xdg::PICTURES_DIR, "Pictures") 51} 52 53pub fn preferences() -> Option<PathBuf> { 54 config_home() 55} 56 57pub fn publicshare() -> Option<PathBuf> { 58 xdg::resolve_path_with_fallback(xdg::PUBLICSHARE_DIR, "Public") 59} 60 61pub fn runtime() -> Option<PathBuf> { 62 xdg::resolve_path(xdg::RUNTIME_DIR) 63 .or_else(|| env::var("TMPDIR").ok().map(PathBuf::from).or_else(|| Some(PathBuf::from("/tmp")))) 64} 65 66pub fn state_home() -> Option<PathBuf> { 67 xdg::resolve_path_with_fallback(xdg::STATE_HOME, ".local/state") 68} 69 70pub fn templates() -> Option<PathBuf> { 71 xdg::resolve_path_with_fallback(xdg::TEMPLATES_DIR, "Templates") 72} 73 74pub fn videos() -> Option<PathBuf> { 75 xdg::resolve_path_with_fallback(xdg::VIDEOS_DIR, "Videos") 76}