A cross-platform Rust library for resolving XDG and platform-specific directories with proper fallbacks.
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}