Version control
lazygit: the fast visual layer over the Git you already know.
lazygit is a keyboard-driven terminal UI for Git: stage lines, read history, and review every change an agent left behind, with each keystroke mapping to a Git command you could type yourself. Groundwork ships working defaults and wires lazygit into tmux so any repository is one keystroke away.
git diff.lg open in the current repoLearn Git first, then get fast
The Git page teaches the commands and introduces lazygit as a picture of them — start there if staging and branches are still new, because the TUI only makes sense as a view of a model you already hold. This page is about the layer Groundwork adds on top: managed defaults, editor integration, and the tmux wiring that makes lazygit the review surface for all your repositories, not just the one you happen to be standing in.
The managed defaults
Groundwork manages ~/.config/lazygit/config.yml (and exports XDG_CONFIG_HOME=$HOME/.config in the login shell so lazygit actually reads it there on macOS, instead of ~/Library/Application Support). What's in it, and why:
os.editPreset: nvim | Commit messages, rebases, and "edit this file" land in Neovim |
gui.showBottomLine: true | The shortcut hint line stays visible — discoverable keys beat memorized ones |
gui.showPanelJumps: true | Panel jump numbers stay visible in panel titles |
gui.sidePanels | Pins the five documented panels and their Files / Worktrees / Submodules, Branches / Remotes / Tags, and Commits / Reflog tabs |
gui.switchTabsWithPanelJumpKeys: true | Press an already-focused panel number again to advance to its next tab |
gui.skipSwitchWorktreeOnCheckoutWarning: false | Keeps the warning when a branch is already checked out in another worktree |
gui.animateExplosion: false | No animation, anywhere: motion adds nothing to reviewing a diff |
gui.language: auto | Follows your system language instead of pinning English |
| O custom command | "Open repository in Neovim" from any panel — inspect in lazygit, edit in the editor, same window |
It's a fully managed file: change it with chezmoi edit --apply ~/.config/lazygit/config.yml so your change survives the next apply, and see Customizing for the pattern.
Move through panels and tabs
Groundwork keeps LazyGit's native navigation grammar. Items move vertically, panels move horizontally, and tabs cycle with brackets; no custom mapping steals those keys from LazyGit's built-in help.
| j / k | Next / previous item in the current list |
| h / l | Previous / next panel |
| [ / ] | Previous / next tab in the current panel |
| 1…5 | Jump to Status, Files, Branches, Commits, or Stash; press the active panel's number again to cycle its tabs |
| H / L | Scroll the main content left / right |
| ? | Open the context-sensitive keybinding help |
Panel 2 contains Files, Worktrees, and Submodules. Press 2 to focus it, then press 2 repeatedly to cycle Files → Worktrees → Submodules. Use ] and [ for explicit next / previous tab movement.
| n | Create a linked worktree |
| Space | Switch LazyGit to the selected worktree |
| o | Open the selected worktree in Neovim |
| d | Remove the selected worktree directory and its Git worktree metadata; inspect its changes before confirming |
| / | Filter the worktree list |
Reviewing an agent's work
lazygit's review loop is the human half of the agent workflow: the agent proposes, you inspect and own the commit. The moves that matter, all visible under ?:
| Space | Stage or unstage the selected file — or the selected line/hunk inside a diff. Staging touches the index only; it never edits file contents |
| Enter | Drill into a file's diff; drill into a commit to see what it changed |
| d on an unstaged change | Discard it — lazygit asks first, and it only ever touches the change you selected |
| c | Commit what's staged (message opens in Neovim) |
| z / Z | Undo / redo, built on the reflog — exploration is safe |
For the multi-repo version of this loop — every dirty repository as its own lazygit window — see Repository navigation and tmux repo windows.
Accessible by construction
Everything is keyboard-driven with the current keys always on screen; state in Groundwork's surrounding tooling is words and symbols rather than color alone; and the one animation lazygit ships is turned off. If you prefer a mouse-first view some days, GitUp reads the same repository — tools here are choices, not tests.