mod app; mod atproto; mod didkey; mod directory; mod enclave; mod event; mod plc; mod sign; mod ui; use app::App; use ratatui::crossterm::{ execute, terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode}, }; use std::io; #[tokio::main] async fn main() -> anyhow::Result<()> { // Install panic hook that restores terminal before printing panic let original_hook = std::panic::take_hook(); std::panic::set_hook(Box::new(move |panic_info| { let _ = disable_raw_mode(); let _ = execute!(io::stdout(), LeaveAlternateScreen); original_hook(panic_info); })); enable_raw_mode()?; let mut stdout = io::stdout(); execute!(stdout, EnterAlternateScreen)?; let backend = ratatui::backend::CrosstermBackend::new(stdout); let mut terminal = ratatui::Terminal::new(backend)?; let result = App::new().run(&mut terminal).await; disable_raw_mode()?; execute!(terminal.backend_mut(), LeaveAlternateScreen)?; terminal.show_cursor()?; result }