diff --git a/Cargo-minimal.lock b/Cargo-minimal.lock index 2bcb11c83..d6127d66d 100644 --- a/Cargo-minimal.lock +++ b/Cargo-minimal.lock @@ -744,6 +744,27 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "dlv-list" version = "0.3.0" @@ -1529,6 +1550,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ordered-multimap" version = "0.4.3" @@ -1648,6 +1675,7 @@ dependencies = [ "bitcoincore-rpc", "clap", "config", + "dirs", "env_logger", "http-body-util", "hyper", @@ -2005,6 +2033,17 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + [[package]] name = "regex" version = "1.9.6" diff --git a/Cargo-recent.lock b/Cargo-recent.lock index 2bcb11c83..d6127d66d 100644 --- a/Cargo-recent.lock +++ b/Cargo-recent.lock @@ -744,6 +744,27 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "dlv-list" version = "0.3.0" @@ -1529,6 +1550,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ordered-multimap" version = "0.4.3" @@ -1648,6 +1675,7 @@ dependencies = [ "bitcoincore-rpc", "clap", "config", + "dirs", "env_logger", "http-body-util", "hyper", @@ -2005,6 +2033,17 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + [[package]] name = "regex" version = "1.9.6" diff --git a/payjoin-cli/Cargo.toml b/payjoin-cli/Cargo.toml index 9392fffad..dceac6e09 100644 --- a/payjoin-cli/Cargo.toml +++ b/payjoin-cli/Cargo.toml @@ -46,6 +46,7 @@ sled = "0.34" tokio = { version = "1.38.1", features = ["full"] } tokio-rustls = { version = "0.25", features = ["ring"], default-features = false, optional = true } url = { version = "2.3.1", features = ["serde"] } +dirs = "5.0.1" [dev-dependencies] nix = "0.26.4" diff --git a/payjoin-cli/src/app/config.rs b/payjoin-cli/src/app/config.rs index 95e94ecad..d9c1c8ebf 100644 --- a/payjoin-cli/src/app/config.rs +++ b/payjoin-cli/src/app/config.rs @@ -11,6 +11,8 @@ use url::Url; use crate::cli::{Cli, Commands}; use crate::db; +const CONFIG_DIR: &str = "payjoin-cli"; + type Builder = config::builder::ConfigBuilder; #[derive(Debug, Clone, Deserialize)] @@ -129,8 +131,13 @@ impl Config { } config = handle_subcommands(config, cli)?; - config = config.add_source(File::new("config.toml", FileFormat::Toml).required(false)); + if let Some(config_dir) = dirs::config_dir() { + let global_config_path = config_dir.join(CONFIG_DIR).join("config.toml"); + config = config.add_source(File::from(global_config_path).required(false)); + } + + config = config.add_source(File::new("config.toml", FileFormat::Toml).required(false)); let built_config = config.build()?; let mut config = Config {