diff --git a/README.md b/README.md index 2615359..552bbf9 100644 --- a/README.md +++ b/README.md @@ -49,17 +49,12 @@ $ ./aliveline ## Configuration Aliveline tries to find config at: -- `$ALIVELINE_CONFIG` -- `$XDG_CONFIG_HOME/aliveline/config.toml` -- `$XDG_CONFIG_HOME/.aliveline` -- `$HOME/.config/aliveline/config.toml` -- `$HOME/.config/.aliveline` -- `$HOME/.aliveline/config.toml` -- `$HOME/.aliveline` +- `$XDG_CONFIG_DIR/aliveline/config.toml` - `./config.toml` (relative to working directory) If config isn't found, Aliveline uses default values defined in [config.toml](https://2ndbeam.ru/git/2ndbeam/aliveline/src/branch/master/config.toml). Keep in mind that default paths are relative, and in this case logs will be written to and read from current working directory. ## Contribution -You can contribute to Aliveline by creating an issue/PR on [Codeberg mirror](https://codeberg.org/2ndbeam/aliveline) +~~You can contribute to Aliveline by creating issue on this repository, then we'll discuss it.~~ +I guess, it is not an option right now, since account creation is disabled on my Forgejo instance, but you may contact me via email: 2ndbeam@disroot.org diff --git a/src/config.rs b/src/config.rs index 22ce814..17eba1d 100644 --- a/src/config.rs +++ b/src/config.rs @@ -20,16 +20,14 @@ impl Default for Colors { } #[derive(Serialize, Deserialize, Clone, PartialEq, Eq, Debug)] +#[serde(default)] pub struct Config { /// directory, where config is located #[serde(skip)] pub conf_path: PathBuf, pub log_path: PathBuf, - #[serde(default)] pub colors: Colors, - #[serde(default)] pub event_colors: Vec, - #[serde(default)] pub text_colors: Vec, } @@ -92,13 +90,13 @@ impl Config { } } - pub fn load(path: PathBuf) -> Option { + pub fn load(path: PathBuf) -> Self { if let Ok(toml_string) = std::fs::read_to_string(path.clone()) { if let Ok(mut conf) = toml::from_str::(&toml_string) { conf.conf_path = path.parent().unwrap().into(); - return Some(conf); + return conf; } } - None + Config::new(path) } } diff --git a/src/lib.rs b/src/lib.rs index df9b81e..7eb4df8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,47 +4,16 @@ use std::{hash::{DefaultHasher, Hash, Hasher}, path::PathBuf}; pub mod config; pub mod log; -fn try_config_path(var: &'static str, path: &[&'static str]) -> Option { - match std::env::var(var) { - Ok(path_start) => { - let mut pathbuf = PathBuf::from(path_start); - for entry in path.iter() { - pathbuf.push(entry); - } - Config::load(pathbuf) - }, - Err(_) => None, - } -} - -/// This function tries to load config from several places (in order): -/// - $ALIVELINE_CONFIG -/// - $XDG_CONFIG_HOME/aliveline/config.toml -/// - $XDG_CONFIG_HOME/.aliveline -/// - $HOME/.config/aliveline/config.toml -/// - $HOME/.config/.aliveline -/// - $HOME/.aliveline -/// as a last resort it defaults to current working directory (./config.toml) pub fn load_config() -> Config { - let places = [ - ("ALIVELINE_CONFIG", vec![]), - ("XDG_CONFIG_HOME", vec!["aliveline", "config.toml"]), - ("XDG_CONFIG_HOME", vec![".aliveline"]), - ("HOME", vec![".config", "aliveline", "config.toml"]), - ("HOME", vec![".config", ".aliveline"]), - ("HOME", vec![".aliveline", "config.toml"]), - ("HOME", vec![".aliveline"]), - ]; - for (place_var, place) in places { - if let Some(conf) = try_config_path(place_var, place.as_slice()) { - println!("Found config at ${place_var} / {place:?}"); - return conf; - } - println!("Config not found at ${place_var} / {place:?}"); + if let Ok(path_str) = std::env::var("XDG_CONFIG_HOME") { + let mut path = PathBuf::from(path_str); + path.push("aliveline"); + path.push("config.toml"); + return Config::load(path); } - println!("Using last resort config path ./config.toml"); Config::new(PathBuf::from("./config.toml")) } + /// Get random-like color id in range 0..16 by computing string hash pub fn color_id_from_name(name: String) -> i32 { let mut s = DefaultHasher::new(); diff --git a/src/main.rs b/src/main.rs index d96caa4..19f0011 100644 --- a/src/main.rs +++ b/src/main.rs @@ -250,7 +250,12 @@ fn main() -> Result<(), Box> { None => None, } }; - ui.set_previous_event_name(prev_event_name.unwrap_or_default().to_shared_string()); + if let Some(name) = prev_event_name { + println!("{name}"); + ui.set_previous_event_name(name.to_shared_string()); + } else { + ui.set_previous_event_name(SharedString::new()); + } } });