diff --git a/src/search.rs b/src/search.rs index b93d608773..203102a105 100644 --- a/src/search.rs +++ b/src/search.rs @@ -21,6 +21,14 @@ impl Search { if let Some(home_dir) = dirs::home_dir() { paths.push((home_dir.join(".config").join("just"), DEFAULT_JUSTFILE_NAME)); + if let Some(xdg_config_home) = std::env::var_os("XDG_CONFIG_HOME") { + paths.push( + PathBuf::from(xdg_config_home) + .join("just") + .join(DEFAULT_JUSTFILE_NAME) + ); + }; + for justfile_name in JUSTFILE_NAMES { paths.push((home_dir.clone(), justfile_name)); } @@ -399,4 +407,34 @@ mod tests { assert_eq!(have, Path::new(want)); } } + #[test] + fn global_justfile_path_from_xdg_env(){ + let old_value = std::env::var_os("XDG_CONFIG_HOME"); + + std::env::set_var("XDG_CONFIG_HOME", "/test/config"); + + let paths = Search::global_justfile_paths(); + assert!(paths.contains(&PathBuf::from("/test/config/just/justfile"))); + + if let Some(old) = old_value { + std::env::set_var("XDG_CONFIG_HOME", old); + } else { + std::env::remove_var("XDG_CONFIG_HOME"); + } + } + #[test] + fn global_justfile_path_when_xdg_env_not_set(){ + let old_value = std::env::var_os("XDG_CONFIG_HOME"); + + std::env::set_var("XDG_CONFIG_HOME", ""); + + let paths = Search::global_justfile_paths(); + assert!(!paths.contains(&PathBuf::from("/test/config/just/justfile"))); + + if let Some(old) = old_value { + std::env::set_var("XDG_CONFIG_HOME", old); + } else { + std::env::remove_var("XDG_CONFIG_HOME"); + } + } }