1use std::os::unix::fs::PermissionsExt;
2use std::path::PathBuf;
3
4pub fn default_private_dir() -> Option<PathBuf> {
8 if let Ok(runtime_dir) = std::env::var("XDG_RUNTIME_DIR") {
9 return Some(PathBuf::from(runtime_dir));
10 }
11
12 let uid = nix::unistd::Uid::current().as_raw();
13 let run_user_dir = PathBuf::from(format!("/run/user/{uid}"));
14 if run_user_dir.is_dir() {
15 return Some(run_user_dir);
16 }
17
18 if let Ok(home) = std::env::var("HOME") {
19 let dir = PathBuf::from(home).join(".veyron").join("run");
20 if std::fs::create_dir_all(&dir).is_ok()
21 && std::fs::set_permissions(&dir, std::fs::Permissions::from_mode(0o700)).is_ok()
22 {
23 return Some(dir);
24 }
25 }
26
27 None
28}
29
30pub fn default_socket_path() -> String {
31 default_private_dir()
32 .map(|dir| dir.join("veyron.sock").to_string_lossy().to_string())
33 .unwrap_or_default()
34}