carch_cli/
lib.rs

1use carch_core::error::{CarchError, Result};
2use carch_core::extract_scripts;
3use carch_core::ui::render::run_ui_with_options;
4use carch_core::ui::state::UiOptions;
5use log::{error, info};
6use tempfile::TempDir;
7
8pub mod args;
9pub mod commands;
10
11use crate::args::Settings;
12
13pub fn run_tui(settings: Settings) -> Result<()> {
14    if settings.log_mode {
15        info!("Starting TUI application");
16    }
17
18    let temp_dir = TempDir::new().map_err(|e| CarchError::TempDir(e.to_string()))?;
19    let scripts_path = temp_dir.path();
20    extract_scripts(scripts_path)?;
21
22    if settings.log_mode {
23        info!("Using scripts directory: {}", scripts_path.display());
24    }
25
26    let modules_dir = scripts_path.join("modules");
27    if !modules_dir.exists() || !modules_dir.is_dir() {
28        let error_msg = format!("Modules directory not found at {}", modules_dir.display());
29        error!("{error_msg}");
30        return Err(CarchError::ModulesDirNotFound(error_msg));
31    }
32
33    let ui_options = UiOptions {
34        log_mode:     settings.log_mode,
35        theme:        settings.theme,
36        theme_locked: settings.theme_locked,
37        is_root:      std::env::var("USER").unwrap_or_default() == "root",
38    };
39
40    if settings.log_mode {
41        info!("TUI initialized with settings: log_mode={}", settings.log_mode);
42    }
43
44    let result = run_ui_with_options(&modules_dir, ui_options);
45
46    if settings.log_mode {
47        info!("Carch application exiting normally");
48    }
49
50    result
51}