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 repo#Learn 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.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.
#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.