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}