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
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}