Skip to content

The dot Command

dot is the single binary that manages these dotfiles. It is compiled from dot/ in the repo (Bun + Effect v4 + OpenTUI) to a single executable, stowed to ~/.local/bin/dot.

It has two faces:

  • A TUI dashboard: run dot with no arguments to open the interactive menu, with git diff/log views, GitHub workflow runs, the notification inbox, and Omarchy menus.
  • A native CLI: core maintenance actions are also subcommands (dot update, dot git-diff --raw, dot doctor, …), suitable for scripts and status bars.
CommandWhat it does
dot dashboardOpen the dot dashboard.
dot initOne-time first-use setup for a fresh machine.
dot updateSelf-update and relaunch, pull, reconcile packages/config, stow, and rebuild.
dot stowStow refresh only (no git pull).
dot doctorRun dotfiles system health checks.
dot firewallReconcile managed ufw firewall rules.
dot git-diffDiff / repo watcher view across managed repos.
context gitBranch context for the current repo (agent context), provided by context.
context stackTech-stack context for a directory (agent context), provided by context.
dot git-commitGuarded commit gateway for scoped, styled commits.
dot omarchyOpen the Omarchy desktop controls menu.

See the full Command Reference for every subcommand and flag.

Long-running Effect-managed CLI workflows use the same progress wrapper: an interactive spinner, elapsed duration logging, and a timeout that interrupts the running child process group. This covers the main first-use setup phases (dot init), updates, doctor checks, skill update checks/applies/diffs, stow/install/clean, private package publishing, and other bounded maintenance commands.

dot update keeps each phase bounded so a slow remote, stuck hook, or helper process cannot leave the update sitting silently. Individual repository pulls are retried once and skipped after repeated failure or timeout. A repository scan, pull phase, stow phase, or rebuild timeout stops the update with failure instead of continuing with a partial result.

dot init uses the spinner and timeout wrapper for each required setup phase. Its private-overlay pull or clone is a synchronous preflight before that bounded workflow and before the already-initialised check. If a required init phase times out, init stops instead of writing the complete marker. dot doctor keeps its live “running checks” spinner and also times out individual checks, reporting timed-out checks as warnings.

Post-hooks and the final resume refresh are bounded but non-fatal. If either helper does not return, the step is stopped and the completed update is not turned into a failure.

dot dashboard opens a full-screen dashboard. It combines tracked repo state, GitHub notifications, workflow runs, and optional bounded source commands for Twitch, environment, todo, and calendar cards. Cards are intentionally readable and always present; Enter opens an existing deeper TUI view, or suspends dot while another TUI runs, when a card has one.

Cards are grouped into four sections:

SectionCardsSource
OverviewEvents in the next hour (when configured), Updates, Live ChannelsPrivate calendar/twitch sources; in-process repo diff state
GitGit Diff, Git NotificationsIn-process DotDiff, notification inbox, and workflow-run services
TodosMy Tasks, Work TasksPrivate todo_* sources
EnvironmentTemperature, CO2, VOCPrivate temperature/co2/voc sources

The summary header at the top highlights attention signals (dirty worktrees, behind core repos, important notifications, workflow failures, environment warnings).

KeyAction
Arrow keys / TabMove between cards
EnterOpen the linked view or run the card action
rRefresh all dashboard sources
Esc / BackspaceReturn to the main menu
CardEnter behaviour
UpdatesRuns dot update when core repos are behind (exits the dashboard)
Git DiffOpens the dot git-diff TUI
Git NotificationsOpens the dot git-notifications TUI (includes workflow failure counts)
Live ChannelsRuns twitch-menu channels (suspends the dashboard)
Todo cardsRuns the configured Home Assistant todo TUI (suspends)
Environment cardsRuns open_command from dot-dashboard.yml when set (silent)

Optional source cards read from dot-dashboard.yml in the private overlay. Each source runs a one-shot --bar-json command on refresh (eight-second timeout, 60-second auto-refresh). Without that file, git and update cards still work from in-process services. See Private Dashboard Config for the schema and supported source IDs.

Command and flag metadata lives in dot/src/cli/spec.ts. Help rendering, shell completions, and the generated Command Reference all read from that one registry. When a command changes, regenerate the reference page and shell completions from spec.ts.