This repository has been archived on 2026-10-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
submarine/docs
simonfrankenandClaude Sonnet 5.5 4c1be3f9ab Show the pin, tip and checkout as a spine in the detail pane
Replace the Pinned/Checkout/Tip rows and the list of commits between pin
and tip with one line of history, newest on top: a node per commit with
its roles (pin, tip, you, staged, HEAD) and the number of commits between
two nodes. A staged pin shows the committed pin as its own node and notes
when it moves back. All three on one commit read "in sync".

Add Status.Drift, Committed and CommittedDrift and Status.Spine(); drop
Status.Between and Repo.FetchedAt. The fetch age moves from the header to
the detail pane (right-aligned in the name's line). The header summary is
right-aligned, ordered by importance and cut with an ellipsis if too narrow.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 16:34:14 +02:00
..

submarine — documentation

submarine is a terminal UI for git repositories with many (recursively nested) submodules. It shows the submodules, as a collapsible tree (plus the state of the superproject itself in the header), and describes each pin as a branch plus distance (origin/main ↓1) instead of a bare commit hash.

Documents

Document Contents
requirements.md What the tool must do: functional and non-functional requirements
state-model.md How a submodule's state is determined, summarized into issues, and how pins are resolved to refs
ux-guide.md Layout, attention hierarchy, colors, wording, navigation and key bindings
architecture.md Package layout, the provider boundary, async loading, testing
actions.md the write actions restore and switch branch (done) and stage pin (draft)
decisions.md Decision log with rationale (ADR style)

Install

curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | sh

Installs submarine and the alias sub (linux/macOS, amd64/arm64) to ~/.local/bin. Update with submarine update. Maintainers publish with GITEA_TOKEN=… make release (see architecture).

Status

Prototype. The UI is complete for browsing. It reads real repositories through a git provider (internal/submodule/git): submarine [dir]. It fetches only when asked (f) and follows changes made in other shells. submarine --mock shows the built-in mock data (internal/submodule/mock). ! shows only submodules with problems. x restores the selection and b switches its branch (actions.md); stage pin is drafted there.

Next steps, roughly in order:

  1. Stage pin, see actions.md. (Restore and switch branch are done.)
  2. (done) "Problems only" (!) view, reusing the tree's filter.