ming_wm_lib/
dirs.rs

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  //$XDG_DATA_HOME or $HOME/.local/share
14  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  //$XDG_CONFIG_HOME or $HOME/.config
29  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