init: Rust/Ratatui TUI project scaffold with nix flake

This commit is contained in:
Alexander
2026-05-08 12:31:19 +02:00
commit e68342c93a
7 changed files with 962 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
use std::io;
use color_eyre::Result;
use crossterm::{
event::{self, Event, KeyCode, KeyEventKind},
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
ExecutableCommand,
};
use ratatui::{prelude::*, widgets::*};
fn main() -> Result<()> {
color_eyre::install()?;
enable_raw_mode()?;
io::stdout().execute(EnterAlternateScreen)?;
let mut terminal = Terminal::new(CrosstermBackend::new(io::stdout()))?;
let result = run(&mut terminal);
disable_raw_mode()?;
io::stdout().execute(LeaveAlternateScreen)?;
result
}
fn run(terminal: &mut Terminal<CrosstermBackend<io::Stdout>>) -> Result<()> {
loop {
terminal.draw(ui)?;
if let Event::Key(key) = event::read()? {
if key.kind != KeyEventKind::Press {
continue;
}
match key.code {
KeyCode::Char('q') => return Ok(()),
_ => {}
}
}
}
}
fn ui(frame: &mut Frame) {
let area = frame.area();
let block = Block::bordered()
.title(" ui-agregator ")
.title_alignment(Alignment::Center)
.border_type(BorderType::Rounded);
let text = Paragraph::new("press q to quit")
.alignment(Alignment::Center)
.block(block);
frame.render_widget(text, area);
}