rm_config/
lib.rs

1pub mod categories;
2pub mod keymap;
3pub mod main_config;
4
5use std::{path::PathBuf, sync::LazyLock};
6
7use anyhow::Result;
8use categories::CategoriesConfig;
9use intuitils::config::IntuiConfig;
10use keymap::KeymapConfig;
11use main_config::MainConfig;
12
13pub static CONFIG: LazyLock<Config> = LazyLock::new(|| {
14    Config::init().unwrap_or_else(|e| {
15        eprintln!("{:?}", e);
16        std::process::exit(1);
17    })
18});
19
20pub struct Config {
21    pub general: main_config::General,
22    pub connection: main_config::Connection,
23    pub torrents_tab: main_config::TorrentsTab,
24    pub search_tab: main_config::SearchTab,
25    pub icons: main_config::Icons,
26    pub keybindings: KeymapConfig,
27    pub categories: CategoriesConfig,
28    pub directories: Directories,
29}
30
31pub struct Directories {
32    pub main_path: &'static PathBuf,
33    pub keymap_path: &'static PathBuf,
34    pub categories_path: &'static PathBuf,
35}
36
37impl Config {
38    fn init() -> Result<Self> {
39        let main_config = MainConfig::init()?;
40        let keybindings = KeymapConfig::init()?;
41        let categories = CategoriesConfig::init()?;
42
43        let directories = Directories {
44            main_path: MainConfig::path(),
45            keymap_path: KeymapConfig::path(),
46            categories_path: CategoriesConfig::path(),
47        };
48
49        Ok(Self {
50            general: main_config.general,
51            connection: main_config.connection,
52            torrents_tab: main_config.torrents_tab,
53            search_tab: main_config.search_tab,
54            icons: main_config.icons,
55            keybindings,
56            categories,
57            directories,
58        })
59    }
60}