Status: v1 feature-complete — builds, tests pass, all planned keybindings wired. Not yet exercised in a real terminal session by a human.
- Repo initialized with MIT license and
.gitignore - Go module set up (
lshwtui),godirective relaxed to 1.24 lshw.Nodemodel with schema-tolerant field accessors (internal/lshw/node.go)lshw.Parse— decodeslshw -jsoninto a parent-linked tree, handling both single-object and array top-level shapes (internal/lshw/parse.go)- Capture/snapshot sources: live capture, root re-run via sudo/doas/pkexec,
snapshot save/load (
internal/lshw/source.go) internal/theme— per-class Nerd Font glyphs with ASCII fallbacks, adaptive colour palette, pane and status stylesinternal/ui/tree.go— expand/collapse state, flattened rows, indent guidesinternal/ui/search.go— incremental search across every field includingconfigurationandcapabilities, matches in tree orderinternal/ui/detail.go— detail lines as pure data, byte/Hz humanisationinternal/ui/clipboard.go— wl-copy/xclip/xsel/pbcopy with an OSC 52 fallbackinternal/ui/model.go,update.go,view.go,help.go— the Bubble Tea appmain.go— CLI with-f/--file,--no-glyphs,--versionMakefile— build, run, test, vet, fmt, check, install, snapshot, clean- Tests:
internal/lshw(parsing, accessors, snapshot round-trip) andinternal/ui(model driven by a redacted real capture intestdata/)
- Nothing. Awaiting a real terminal run and feedback.
- Verify glyph rendering and colours in a live terminal with a Nerd Font
- A remote has not been created yet; nothing is pushed
- Possible follow-ups, explicitly out of v1 scope: diffing two snapshots, filtering the tree to matches only, exporting a device as YAML/text report
| Date | Decision | Rationale |
|---|---|---|
| 2026-09-05 | Go + Bubble Tea over gocui or Textual | Single static binary, no runtime dependency, active ecosystem (lipgloss) for styling a two-pane layout |
| 2026-09-05 | Two-pane tree + detail layout | Mirrors lazygit's model: keep the navigable structure and the selected item's detail both on screen at once, instead of paging through one flat view |
| 2026-09-05 | Unprivileged by default, in-app root re-run (R) |
lshw only sees the full tree as root; forcing sudo on every launch is unnecessary friction when a user just wants a quick look |
| 2026-09-05 | v1 scope: search + snapshot + raw JSON + yank | Smallest feature set that makes the tool usable standalone (find a device, capture/share a report, inspect exact fields, get data out) without scope creep into e.g. diffing two snapshots |