Skip to content

Diff & Repo Watcher

A two-pane repo watcher across every managed repository: public and private dotfiles, the notes vault, Omarchy repos (when enabled), and schedule-gated activity repos from dot-git.yml. The Changed pane lists repos with uncommitted changes or non-zero ahead/behind counts against their upstream; Other lists the rest.

Terminal window
dot git-diff # interactive TUI (alias: dot diff)
dot git-diff --raw # text summary of repos with changes
dot git-diff --bar-json # JSON for status bars and shell modules
dot git-diff --list-changed # changed repos as name|path rows
dot git-diff --list-all # all tracked repos as name|path rows
dot git-diff --no-fetch # skip upstream fetches; use local refs only
dot git-diff --tab other # open with the Other pane focused

The TUI polls every ten seconds and loads Waybar cache on startup for a fast first paint. dot git-log reuses the same tracked repo list.

PaneContents
ChangedRepos with dirty worktrees or ahead/behind upstream
OtherTracked repos with a clean worktree and no ahead/behind drift

The status bar shows when the last poll ran, how many repos changed, and how many have a stale .git/index.lock file. Repos with a lock file show a lock icon in the list.

KeyAction
↑ / ↓Navigate the active pane
TabSwitch between Changed and Other
EnterOpen lazygit in the selected repo (suspends the TUI)
eOpen the repo in your default editor
EOpen the repo in your visual editor
oOpen an interactive OpenCode session
OOpen an OpenCode plan session
tOpen a terminal in the repo directory
wOpen the repo on GitHub in the browser
xRemove a stale .git/index.lock from the selected repo
rRefresh immediately
Esc / BackspaceReturn to the main menu

Repo pulls and fetches are not available from this view; use dot update or work inside the repo directly.

Status scans run git --no-optional-locks status so background polling does not refresh the index or compete with an in-flight rebase, merge, or other index-writing operation. That keeps bar modules and the TUI from creating or waiting on .git/index.lock during normal reads.

When a crashed git process leaves a stale lock behind, the repo appears with a lock indicator. Press x on the selected repo to remove the lock file and trigger a refresh. Only remove a lock when no git command is actively running in that repository.

When a repo has an upstream configured, dot git-diff fetches the tracking branch before computing ahead/behind counts. Fetches are TTL-cached (default five minutes, controlled by DOT_FETCH_TTL_SECONDS). Pass --no-fetch to skip network fetches and rely on local tracking refs.

A status bar module polls dot git-diff --bar-json through its own short-lived cache; left click opens the TUI and right click refreshes the cache. See Bar Integrations for the shared JSON contract.

Which repos appear and whether Omarchy repos are included is controlled by the private dot-git.yml config and DOT_INCLUDE_OMARCHY_DIFF_REPOS. See Private Git Config and Environment Variables.