Skip to main content

md_tui/util/
general.rs

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 = 0 means "use full terminal width"
34        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});