2026-09-12 21:15:42 -04:00
2026-09-12 21:15:42 -04:00
2026-09-12 19:54:53 -04:00
2026-09-12 21:15:42 -04:00
2026-09-12 21:15:42 -04:00
2026-09-12 19:54:53 -04:00
2026-09-12 21:15:42 -04:00
2026-09-12 21:15:42 -04:00

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 p to 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/3 or Tab/h/l focus panes · j/k or arrows move · enter drill into the next pane (threads → messages → preview) · PgUp/PgDn scroll the preview · / text filter · f participant filter · F filter by the selected thread's author · c clear participant filter · p open the patch overlay (Preview focused) · t toggle live refresh · r refresh · L mailing lists · s sender · ? help · q quit.
  • Participants: type to search · j/k move · enter apply · esc close.
  • Patch overlay: j/k scroll · esc/p/enter close.
  • Lists: j/k move · enter switch list · esc close.
  • Sender: Tab cycle fields · arrows/Home/End move the cursor · Backspace/Delete edit · in the Patches field j/k move the picker, l/Right/enter open a directory or attach a file, h/Left/Backspace go up, . toggle hidden files, J/K move the attached-patch selection, a add a stub patch, d remove · Ctrl+S send (stub) · esc back.
  • Help: ? shows global bindings first, then the bindings local to the current screen, mode, and focused pane.
S
Description
A TUI for the git mailing list.
Readme MIT
93 KiB
Languages
Rust 100%