diff --git a/src/lib.rs b/src/lib.rs index 6fd2719..2e5ff05 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -132,6 +132,7 @@ pub struct ProjectDirs { // base directories cache_dir: PathBuf, config_dir: PathBuf, + config_local_dir: PathBuf, data_dir: PathBuf, data_local_dir: PathBuf, preference_dir: PathBuf, @@ -441,6 +442,16 @@ impl ProjectDirs { pub fn config_dir(&self) -> &Path { self.config_dir.as_path() } + /// Returns the path to the project's local config directory. + /// + /// |Platform | Value | Example | + /// | ------- | ----------------------------------------------------------------------- | -------------------------------------------------------------- | + /// | Linux | `$XDG_CONFIG_HOME`/`_project_path_` or `$HOME`/.config/`_project_path_` | /home/alice/.config/barapp | + /// | macOS | `$HOME`/Library/Application Support/`_project_path_` | /Users/Alice/Library/Application Support/com.Foo-Corp.Bar-App | + /// | Windows | `{FOLDERID_LocalAppData}`\\`_project_path_`\\config | C:\Users\Alice\AppData\Local\Foo Corp\Bar App\config | + pub fn config_local_dir(&self) -> &Path { + self.config_local_dir.as_path() + } /// Returns the path to the project's data directory. /// /// |Platform | Value | Example | diff --git a/src/lin.rs b/src/lin.rs index d8693da..c22f399 100644 --- a/src/lin.rs +++ b/src/lin.rs @@ -63,6 +63,7 @@ pub fn project_dirs_from_path(project_path: PathBuf) -> Option { if let Some(home_dir) = dirs_sys::home_dir() { let cache_dir = env::var_os("XDG_CACHE_HOME") .and_then(dirs_sys::is_absolute_path).unwrap_or_else(|| home_dir.join(".cache")).join(&project_path); let config_dir = env::var_os("XDG_CONFIG_HOME").and_then(dirs_sys::is_absolute_path).unwrap_or_else(|| home_dir.join(".config")).join(&project_path); + let config_local_dir = config_dir.clone(); let data_dir = env::var_os("XDG_DATA_HOME") .and_then(dirs_sys::is_absolute_path).unwrap_or_else(|| home_dir.join(".local/share")).join(&project_path); let data_local_dir = data_dir.clone(); let preference_dir = config_dir.clone(); @@ -73,6 +74,7 @@ pub fn project_dirs_from_path(project_path: PathBuf) -> Option { project_path: project_path, cache_dir: cache_dir, config_dir: config_dir, + config_local_dir, data_dir: data_dir, data_local_dir: data_local_dir, preference_dir: preference_dir, diff --git a/src/mac.rs b/src/mac.rs index 23fdd0a..8f94c41 100644 --- a/src/mac.rs +++ b/src/mac.rs @@ -64,6 +64,7 @@ pub fn project_dirs_from_path(project_path: PathBuf) -> Option { if let Some(home_dir) = dirs_sys::home_dir() { let cache_dir = home_dir.join("Library/Caches").join(&project_path); let config_dir = home_dir.join("Library/Application Support").join(&project_path); + let config_local_dir = config_dir.clone(); let data_dir = home_dir.join("Library/Application Support").join(&project_path); let data_local_dir = data_dir.clone(); let preference_dir = home_dir.join("Library/Preferences").join(&project_path); @@ -72,6 +73,7 @@ pub fn project_dirs_from_path(project_path: PathBuf) -> Option { project_path: project_path, cache_dir: cache_dir, config_dir: config_dir, + config_local_dir, data_dir: data_dir, data_local_dir: data_local_dir, preference_dir: preference_dir, diff --git a/src/win.rs b/src/win.rs index 05b0b88..f1a34ee 100644 --- a/src/win.rs +++ b/src/win.rs @@ -71,6 +71,7 @@ pub fn project_dirs_from_path(project_path: PathBuf) -> Option { let cache_dir = app_data_local.join("cache"); let data_local_dir = app_data_local.join("data"); let config_dir = app_data_roaming.join("config"); + let config_local_dir = app_data_local.join("config"); let data_dir = app_data_roaming.join("data"); let preference_dir = config_dir.clone(); @@ -78,6 +79,7 @@ pub fn project_dirs_from_path(project_path: PathBuf) -> Option { project_path: project_path, cache_dir: cache_dir, config_dir: config_dir, + config_local_dir, data_dir: data_dir, data_local_dir: data_local_dir, preference_dir: preference_dir,