From 539855cdb92c44dc0f755e6ea6debcf13a77f049 Mon Sep 17 00:00:00 2001 From: Christian Duerr Date: Sun, 20 Sep 2020 09:58:39 +0000 Subject: [PATCH] Fix CLI arguments without config file Since we only applied the CLI arguments as overrides to the configuration file after the file was loaded, all CLI arguments that are stored on the config would be dropped without a configuration file in place. This also makes sure that all configuration file config overrides are still loaded if the configuration file could not be loaded for any reason, since there's no reason why we'd just drop everything in that case. --- alacritty/src/config/mod.rs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/alacritty/src/config/mod.rs b/alacritty/src/config/mod.rs index 56a12c7c..d268d921 100644 --- a/alacritty/src/config/mod.rs +++ b/alacritty/src/config/mod.rs @@ -97,18 +97,20 @@ impl From for Error { /// Load the configuration file. pub fn load(options: &Options) -> Config { - // Get config path. - let config_path = match options.config_path().or_else(installed_config) { - Some(path) => path, - None => { - info!(target: LOG_TARGET_CONFIG, "No config file found; using default"); - return Config::default(); - }, - }; - - // Load config, falling back to the default on error. let config_options = options.config_options().clone(); - let mut config = load_from(&config_path, config_options).unwrap_or_default(); + let config_path = options.config_path().or_else(installed_config); + + if config_path.is_none() { + info!(target: LOG_TARGET_CONFIG, "No config file found; using default"); + } + + // Load the config using the following fallback behavior: + // - Config path + CLI overrides + // - CLI overrides + // - Default + let mut config = config_path + .and_then(|config_path| load_from(&config_path, config_options.clone()).ok()) + .unwrap_or_else(|| Config::deserialize(config_options).unwrap_or_default()); // Override config with CLI options. options.override_config(&mut config);