1use std::sync::LazyLock;
2
3use config::{Config, Environment, File};
4use serde::Deserialize;
5
6#[derive(Debug)]
7pub struct GeneralConfig {
8 pub width: u16,
9 pub gitignore: bool,
10 pub centering: Centering,
11 pub help_menu: bool,
12}
13
14#[derive(Debug, Deserialize)]
15#[serde(rename_all = "lowercase")]
16pub enum Centering {
17 Left,
18 Center,
19 Right,
20}
21
22pub static GENERAL_CONFIG: LazyLock<GeneralConfig> = LazyLock::new(|| {
23 let config_dir = dirs::home_dir().unwrap();
24 let config_file = config_dir.join(".config").join("mdt").join("config.toml");
25 let settings = Config::builder()
26 .add_source(File::with_name(config_file.to_str().unwrap()).required(false))
27 .add_source(Environment::with_prefix("MDT").separator("_"))
28 .build()
29 .unwrap_or_default();
30
31 let width = settings.get::<u16>("width").unwrap_or(100);
32 GeneralConfig {
33 width: if width == 0 { u16::MAX } else { width },
35 gitignore: settings.get::<bool>("gitignore").unwrap_or(false),
36 centering: settings
37 .get::<Centering>("alignment")
38 .unwrap_or(Centering::Left),
39 help_menu: settings.get::<bool>("help_menu").unwrap_or(true),
40 }
41});