//! Where vcs keeps things on this machine. use std::path::PathBuf; /// VCS_HOME, else the platform's data folder (~/.local/share/vcs on Linux, /// ~/Library/Application Support/vcs on macOS, %LOCALAPPDATA%\vcs on Windows). pub fn home() -> PathBuf { if let Some(dir) = std::env::var_os("VCS_HOME") { return PathBuf::from(dir); } if cfg!(windows) && let Some(local) = std::env::var_os("LOCALAPPDATA").filter(|d| !d.is_empty()) { return PathBuf::from(local).join("vcs"); } let user = crate::sys::user_home().unwrap_or_else(|| ".".into()); if cfg!(target_os = "macos") { return user.join("Library/Application Support/vcs"); } match std::env::var_os("XDG_DATA_HOME") { Some(d) if !d.is_empty() => PathBuf::from(d).join("vcs"), _ => user.join(".local/share/vcs"), } } pub fn objects() -> PathBuf { home().join("objects") } /// Sign-in tokens, readable only by the user. pub fn credentials() -> PathBuf { home().join("credentials.json") }