742efa545ad834dde059f12657cff16d11e815b6
lazymail
A TUI for the git mailing list.
Status
Early scaffold: a Lazygit-style TUI over in-memory mock data, with a real on-disk file picker for patch attachments.
- Browse — three panes: threads, messages, preview.
- Participants — filter threads and messages by participant (
f), or narrow to the selected thread's author with one key (F). - Preview — shows the message body with any inline diff hidden; press
pto open the patch in a wide overlay. - Live — threads and messages auto-refresh on a 2s tick while live (
t). - Sender — a separate screen for composing and sending a patch series
(
s), with a yazi-like file picker rooted at$HOME. - Help —
?separates global keybinds from context-local ones.
The real backend will fetch each list's public-inbox archive (e.g.
lore.kernel.org/git) or shell out to
b4/lei. Sending is not implemented yet.
Layout
Browse:
┌ lazymail · git.vger.kernel.org ● LIVE · ⌕ [email protected] 8 threads ┐
├─ Threads (25%) ────┬─ Messages (35%) ──────────┬─ Preview ─────────────────────┤
│ ▍[PATCH v4 0/5]... │ ▍[PATCH v4 0/5] cover ... │ From: Victoria Dye <vdye@...> │
│ author · date │ From ... · to git@... │ Date: ... │
│ [PATCH v2 0/2]... │ [PATCH v4 1/5] ... │ Subject: [PATCH v4 0/5] ... │
│ ... │ ... │ body (diff hidden) │
│ │ │ patch hidden · press p │
├────────────────────┴───────────────────────────┴───────────────────────────────┤
│ 1-3 focus · Tab cycle · j/k move · / filter · f participants · p patch ... │
└─────────────────────────────────────────────────────────────────────────────────┘
Sender (the right column is the file picker, active while the Patches field is
focused):
┌ lazymail · sender · git.vger.kernel.org ───────────────────────────────────────┐
├─ Compose ──────────────────────────────────┬─ ~/patches/v4 ─────────────────────┤
│ ▸ To: [email protected] │ ../ │
│ Cc: (none) │ ▍0001-refs-reftable.patch 3.2 KB │
│ Subject: [PATCH 0/2] ... │ 0002-tests.patch 1.1 KB │
│ Body: │ README.md │
│ Cover letter stub. │ │
├────────────────────────────────────────────┴────────────────────────────────────┤
│ tab field · ←/→ cursor · j/k picker · enter attach · . hidden · ^S send ... │
└─────────────────────────────────────────────────────────────────────────────────┘
Run
cargo run
Keys:
- Browse:
1/2/3orTab/h/lfocus panes ·j/kor arrows move ·enterdrill into the next pane (threads → messages → preview) ·PgUp/PgDnscroll the preview ·/text filter ·fparticipant filter ·Ffilter by the selected thread's author ·cclear participant filter ·popen the patch overlay (Preview focused) ·ttoggle live refresh ·rrefresh ·Lmailing lists ·ssender ·?help ·qquit. - Participants: type to search ·
j/kmove ·enterapply ·escclose. - Patch overlay:
j/kscroll ·esc/p/enterclose. - Lists:
j/kmove ·enterswitch list ·escclose. - Sender:
Tabcycle fields · arrows/Home/Endmove the cursor ·Backspace/Deleteedit · in thePatchesfieldj/kmove the picker,l/Right/enteropen a directory or attach a file,h/Left/Backspacego up,.toggle hidden files,J/Kmove the attached-patch selection,aadd a stub patch,dremove ·Ctrl+Ssend (stub) ·escback. - Help:
?shows global bindings first, then the bindings local to the current screen, mode, and focused pane.
Languages
Rust
100%