diff --git a/crates/bili_sync/src/config/args.rs b/crates/bili_sync/src/config/args.rs index def629f..78c4c60 100644 --- a/crates/bili_sync/src/config/args.rs +++ b/crates/bili_sync/src/config/args.rs @@ -1,4 +1,5 @@ use std::borrow::Cow; +use std::path::PathBuf; use std::sync::LazyLock; use clap::Parser; @@ -16,6 +17,9 @@ pub struct Args { #[arg(short, long, env = "DISABLE_CREDENTIAL_REFRESH")] pub disable_credential_refresh: bool, + + #[arg(short, long, env = "BILI_SYNC_CONFIG_DIR")] + pub config_dir: Option, } mod built_info { diff --git a/crates/bili_sync/src/config/current.rs b/crates/bili_sync/src/config/current.rs index f26e08f..1824934 100644 --- a/crates/bili_sync/src/config/current.rs +++ b/crates/bili_sync/src/config/current.rs @@ -8,6 +8,7 @@ use serde::{Deserialize, Serialize}; use validator::Validate; use crate::bilibili::{Credential, DanmakuOption, FilterOption}; +use crate::config::args::ARGS; use crate::config::default::{ default_auth_token, default_bind_address, default_collection_path, default_favorite_path, default_submission_path, default_time_format, @@ -16,8 +17,12 @@ use crate::config::item::{ConcurrentLimit, NFOTimeType, SkipOption, Trigger}; use crate::notifier::Notifier; use crate::utils::model::{load_db_config, save_db_config}; -pub static CONFIG_DIR: LazyLock = - LazyLock::new(|| dirs::config_dir().expect("No config path found").join("bili-sync")); +pub static CONFIG_DIR: LazyLock = LazyLock::new(|| { + ARGS.config_dir + .clone() + .or_else(|| dirs::config_dir().map(|dir| dir.join("bili-sync"))) + .expect("No config path found") +}); #[derive(Serialize, Deserialize, Validate, Clone)] pub struct Config {