a simple rust terminal ui (tui) for setting up alternative plc rotation keys driven by: secure enclave hardware (not synced) or software-based keys (synced to icloud)
plc secure-enclave touchid icloud atproto
at main 41 lines 1.1 kB view raw
1mod app; 2mod atproto; 3mod didkey; 4mod directory; 5mod enclave; 6mod event; 7mod plc; 8mod sign; 9mod ui; 10 11use app::App; 12use ratatui::crossterm::{ 13 execute, 14 terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode}, 15}; 16use std::io; 17 18#[tokio::main] 19async fn main() -> anyhow::Result<()> { 20 // Install panic hook that restores terminal before printing panic 21 let original_hook = std::panic::take_hook(); 22 std::panic::set_hook(Box::new(move |panic_info| { 23 let _ = disable_raw_mode(); 24 let _ = execute!(io::stdout(), LeaveAlternateScreen); 25 original_hook(panic_info); 26 })); 27 28 enable_raw_mode()?; 29 let mut stdout = io::stdout(); 30 execute!(stdout, EnterAlternateScreen)?; 31 let backend = ratatui::backend::CrosstermBackend::new(stdout); 32 let mut terminal = ratatui::Terminal::new(backend)?; 33 34 let result = App::new().run(&mut terminal).await; 35 36 disable_raw_mode()?; 37 execute!(terminal.backend_mut(), LeaveAlternateScreen)?; 38 terminal.show_cursor()?; 39 40 result 41}