1use std::env;
2use std::path::PathBuf;
3
4pub fn home() -> Option<PathBuf> {
5 if let Ok(home) = env::var("HOME") {
6 Some(PathBuf::from(home))
7 } else {
8 None
9 }
10}
11
12pub fn data_dir() -> Option<PathBuf> {
13 if let Ok(data_home) = env::var("XDG_DATA_HOME") {
15 Some(PathBuf::from(data_home))
16 } else {
17 if let Some(mut data_home) = home() {
18 data_home.push(".local");
19 data_home.push("share");
20 Some(data_home)
21 } else {
22 None
23 }
24 }
25}
26
27pub fn config_dir() -> Option<PathBuf> {
28 if let Ok(config_home) = env::var("XDG_CONFIG_HOME") {
30 Some(PathBuf::from(config_home))
31 } else {
32 if let Some(mut config_home) = home() {
33 config_home.push(".config");
34 Some(config_home)
35 } else {
36 None
37 }
38 }
39}
40
41pub fn exe_dir(add: Option<&str>) -> PathBuf {
42 let mut exe_dir = env::current_exe().unwrap();
43 exe_dir.pop();
44 if let Some(add) = add {
45 exe_dir.push(add);
46 }
47 exe_dir
48}
49