summaryrefslogtreecommitdiffstats
path: root/src/main.rs
blob: a2a01be0a801e85adc9c777a0ccb07f7e59f08e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
mod commands;
mod config;
mod context;
mod error;
mod fs;
mod history;
mod io;
mod run;
mod sort;
mod tab;
mod ui;
mod util;

use lazy_static::lazy_static;
use std::path::PathBuf;
use structopt::StructOpt;

use config::{
    ConfigStructure, JoshutoCommandMapping, JoshutoConfig, JoshutoMimetype, JoshutoPreview,
    JoshutoTheme,
};
use run::run;

const PROGRAM_NAME: &str = "joshuto";
const CONFIG_FILE: &str = "joshuto.toml";
const MIMETYPE_FILE: &str = "mimetype.toml";
const KEYMAP_FILE: &str = "keymap.toml";
const THEME_FILE: &str = "theme.toml";
const PREVIEW_FILE: &str = "preview.toml";

lazy_static! {
    // dynamically builds the config hierarchy
    static ref CONFIG_HIERARCHY: Vec<PathBuf> = {
        let mut temp = vec![];
        match xdg::BaseDirectories::with_prefix(PROGRAM_NAME) {
            Ok(dirs) => temp.push(dirs.get_config_home()),
            Err(e) => eprintln!("{}", e),
        };
        // adds the default config files to the config hierarchy if running through cargo
        if cfg!(debug_assertions) {
            temp.push(PathBuf::from("./config"));
        }
        temp
    };
    static ref THEME_T: JoshutoTheme = JoshutoTheme::get_config();
    static ref MIMETYPE_T: JoshutoMimetype = JoshutoMimetype::get_config();
    static ref PREVIEW_T: JoshutoPreview = JoshutoPreview::get_config();

    static ref HOME_DIR: Option<PathBuf> = dirs::home_dir();
    static ref USERNAME: String = whoami::username();
    static ref HOSTNAME: String = whoami::hostname();
}

#[derive(StructOpt, Debug)]
pub struct Args {
    #[structopt(short = "d", long = "debug")]
    debug: bool,
}

fn main() {
    let args = Args::from_args();

    let config = JoshutoConfig::get_config();
    let keymap = JoshutoCommandMapping::get_config();

    if args.debug {
        eprintln!("keymaps: {:#?}", keymap);
        eprintln!("config: {:#?}", config);
        eprintln!("theme config: {:#?}", *THEME_T);
        eprintln!("mimetype config: {:#?}", *MIMETYPE_T);
    }

    run(config, keymap);
}