14 KiB
Lazygit
Lazygit with CherryBlossom colors, delta diffs, a full keybinding map, and custom commands wired to gh and helper scripts.
Lazygit is a terminal UI for git. The config sets CherryBlossom colors, renders diffs with delta, turns on background fetching and a whole-graph log, and adds custom commands that call gh.
| Source | dot_config/lazygit/config.yml, dot_config/lazygit/ii-theme.yml |
| Target | ~/.config/lazygit/config.yml, ~/.config/lazygit/ii-theme.yml |
| Packages | lazygit (pacman) |
| Ignored | .config/lazygit/.omc/** (agent tooling state) |
Launching
| Entry point | Behavior |
|---|---|
gg |
Alias for lazygit (all shells) |
| Ctrl+g | fish and zsh keybinding |
| Ctrl+Shift+g | Kitty: lazygit as an overlay on the current window. The tmux-host kitty config opens it in a 90% tmux display-popup instead. |
tmux-resurrect lists lazygit among the processes it restores.
GUI
Colors come from the CherryBlossom palette, shared with Ghostty, tmux, and omp:
| Theme key | Color |
|---|---|
activeBorderColor |
#cf716f |
inactiveBorderColor |
#a6958f |
searchingActiveBorderColor |
#c17e4a |
optionsTextColor |
#a6958f |
selectedLineBgColor |
#453130 |
cherryPickedCommitBgColor |
#453130 |
cherryPickedCommitFgColor |
#ad6756 |
unstagedChangesColor |
#ae825f |
defaultFgColor |
#dcc1b7 |
authorColors."*" |
#dcc1b7 (every author the same color) |
| Option | Value |
|---|---|
border |
rounded |
scrollHeight / scrollPastBottom |
2 / true |
scrollOffMargin / scrollOffBehavior |
2 / margin |
mouseEvents |
true |
skipDiscardChangeWarning |
true |
skipStashWarning |
true |
skipNoStagedFilesWarning |
false |
skipRewordInEditorWarning |
false |
sidePanelWidth |
0.4 |
expandFocusedSidePanel / expandedSidePanelWeight |
true / 2 |
mainPanelSplitMode |
horizontal |
enlargedSideViewLocation |
left |
language |
auto |
timeFormat / shortTimeFormat |
02 Jan 06 / 3:04PM |
commitLength.show |
true |
showListFooter |
true |
showFileTree |
true |
showRandomTip |
false |
showCommandLog / commandLogSize |
true / 4 |
showBottomLine |
false (keybinding hint line hidden) |
showPanelJumps |
false |
showIcons, nerdFontsVersion, showFileIcons |
true, "3", true |
commitAuthorShortLength / commitAuthorLongLength |
2 (initials) / 17 |
commitHashLength |
8 |
showBranchCommitHash |
true |
showDivergenceFromBaseBranch |
arrowAndNumber |
splitDiff |
auto |
screenMode |
normal |
animateExplosion |
true |
portraitMode |
auto |
filterMode |
fuzzy |
spinner.frames / spinner.rate |
ASCII bar (|, /, -, \) / 50 ms |
statusPanelView |
allBranchesLog |
Git
| Option | Value |
|---|---|
diffRenderers |
delta --dark --paging=never with colorArg: always. delta also reads the [delta] section of ~/.gitconfig; see Git. |
commit.signOff |
false |
commit.autoWrapCommitMessage / autoWrapWidth |
true / 72 |
merging.manualCommit / args |
false / empty |
merging.squashMergeMessage |
Squash merge {{selectedRef}} into {{currentBranch}} |
mainBranches |
develop |
skipHookPrefix |
WIP (a message starting with WIP skips pre-commit hooks) |
autoFetch / autoRefresh / fetchAll |
true / true / true |
branchLogCmd |
git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} -- |
allBranchesLogCmds |
git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium |
overrideGpg |
false |
disableForcePushing |
false |
commitPrefix / branchPrefix |
empty |
parseEmoji |
true |
log.order / showGraph / showWholeGraph |
topo-order / always / true |
truncateCopiedCommitHashesTo |
8 |
Refresh, updates, and OS
| Option | Value |
|---|---|
update.method / days |
background / 14 |
refresher.refreshInterval |
10 s |
refresher.fetchInterval |
60 s |
confirmOnQuit |
false |
quitOnTopLevelReturn |
true (Esc at top level quits) |
disableStartupPopups |
true |
notARepository |
skip (opens the most recent repo) |
promptToReturnFromSubprocess |
false |
os.edit, editAtLine, editAtLineAndWait, openDirInEditor, editPreset, open |
empty (lazygit defaults, which follow $EDITOR = nvim) |
os.openLink |
bash -C running ~/.local/share/omarchy/bin/omarchy-launch-webapp {{link}} (absolute path in the file) |
os.copyToClipboardCmd / readFromClipboardCmd |
wl-copy / wl-paste |
Note
The link opener and the
wl-copy/wl-pasteclipboard commands are Wayland/Omarchy-specific. On aserverrole machine they are unavailable, so opening links and clipboard actions fail there.
Custom commands
| Key | Context | Command | Output |
|---|---|---|---|
| Ctrl+i | global | gitv {{.Repository.Owner}}/{{.Repository.Name}} |
terminal |
| Ctrl+w | global | gwm |
terminal |
| Ctrl+a | global | wrkflw |
terminal |
| Ctrl+p | global | github prs |
terminal |
| F | files | gh repo sync && gh clean-branches --force ("Sync repo and clean branches, update DuckDB cache") |
log |
| A | files | gh commit ("Smart commit with AI") |
terminal |
| C | files | gh commit ("Smart commit with AI") |
terminal |
| a | files | git add the file if it has unstaged changes, else git reset it ("Toggle file staged") |
|
| L | files | livediff |
terminal |
| Ctrl+d | files | gh dash |
terminal |
| Ctrl+o | files | gh browse |
|
| o | localBranches | gh pr create --fill -w ("start ai pull request") |
|
| C | localBranches | gh repo sync && gh clean-branches --force |
log |
| O | commits | hub browse -- "commit/{{.SelectedLocalCommit.Hash}}" |
|
| n | worktrees | Prompts for a branch name, then wt switch --create <branch> --no-cd ("New branch + worktree in ~/Work") |
terminal |
| w | localBranches | wt switch <selected branch> --no-cd ("Worktree for branch in ~/Work") |
terminal |
Worktrees go to ~/Work/<repo>-<branch>, from worktrunk's worktree-path (dot_config/worktrunk/private_config.toml). Clones stay under ghq's ~/Code. lazygit's own worktree flow always names the directory after the branch alone, so the two worktree keys above replace the built-in ones and hand off to wt. worktree.defaultPath: ~/Work makes the built-in menus that remain, such as detached worktrees from commits and tags, offer ~/Work as the parent directory. ghostty-tmux puts ~/.cargo/bin on the tmux server's PATH so wt resolves in the prefix g popup.
gh commit, gh clean-branches, and gh dash are managed gh extensions (see GitHub CLI). gitv, gwm, wrkflw, github, livediff, and hub are not installed by this repo.
Warning
Several custom keys share a key with a built-in binding in the same context: C and a in files (
commitChangesWithEditor,toggleStagedAll), Ctrl+w, Ctrl+p, Ctrl+d, Ctrl+o against universal bindings, and O in commits. Ctrl+i is the same keycode as Tab in most terminals.
Keybindings
The file writes out the full keybinding map. Most values match lazygit's defaults; they are listed so the file is the single reference.
Universal
| Action | Key |
|---|---|
quit / quit-alt1 |
q / Ctrl+q |
return |
Esc |
quitWithoutChangingDirectory |
Q |
togglePanel |
Tab |
prevItem / nextItem |
Up / Down |
prevItem-alt / nextItem-alt |
k / j |
prevPage / nextPage |
, / . |
scrollLeft / scrollRight |
H / L |
gotoTop / gotoBottom |
< / > |
toggleRangeSelect |
v |
rangeSelectDown / rangeSelectUp |
Shift+Down / Shift+Up |
prevBlock / nextBlock |
Left / Right |
prevBlock-alt / nextBlock-alt |
h / l |
nextBlock-alt2 / prevBlock-alt2 |
Tab / Shift+Tab |
jumpToBlock |
1–5 |
nextMatch / prevMatch |
n / N |
startSearch |
/ |
optionMenu |
? |
select |
Space |
goInto / confirm |
Enter |
confirmInEditor |
Alt+Enter |
remove |
d |
new |
n |
edit |
e |
openFile |
o |
scrollUpMain / scrollDownMain |
PgUp / PgDn |
scrollUpMain-alt1 / scrollDownMain-alt1 |
K / J |
scrollUpMain-alt2 / scrollDownMain-alt2 |
Ctrl+u / Ctrl+d |
createRebaseOptionsMenu |
m |
pushFiles / pullFiles |
P / p |
refresh |
R |
createPatchOptionsMenu |
Ctrl+p |
nextTab / prevTab |
] / [ |
nextScreenMode / prevScreenMode |
+ / _ |
undo / redo |
z / Ctrl+z |
filteringMenu |
Ctrl+s |
diffingMenu / diffingMenu-alt |
W / Ctrl+e |
copyToClipboard |
Ctrl+o |
openRecentRepos |
Ctrl+r |
submitEditorText |
Enter |
extrasMenu |
@ |
toggleWhitespaceInDiffView |
Ctrl+w |
increaseContextInDiffView / decreaseContextInDiffView |
} / { |
increaseRenameSimilarityThreshold / decrease... |
) / ( |
openDiffTool |
Ctrl+t (runs the nvim codediff difftool) |
newWorktree |
w |
Status
| Action | Key |
|---|---|
checkForUpdate |
u |
recentRepos |
Enter |
allBranchesLogGraph |
a |
Files
| Action | Key |
|---|---|
commitChanges |
c |
commitChangesWithoutHook |
w |
amendLastCommit |
E |
commitChangesWithEditor |
C |
findBaseCommitForFixup |
Ctrl+f |
confirmDiscard |
x |
ignoreFile |
i |
refreshFiles |
r |
stashAllChanges / viewStashOptions |
s / S |
toggleStagedAll |
a |
viewResetOptions |
D |
fetch |
f |
toggleTreeView |
` |
openMergeOptions |
M |
openStatusFilter |
Ctrl+b |
copyFileInfoToClipboard |
y |
Branches
| Action | Key |
|---|---|
createPullRequest |
1 |
viewPullRequestOptions |
O |
copyPullRequestURL |
Ctrl+y |
checkoutBranchByName |
c |
forceCheckoutBranch |
F |
rebaseBranch |
r |
renameBranch |
R |
mergeIntoCurrentBranch |
M |
viewGitFlowOptions |
i |
fastForward / fetchRemote |
f |
createTag / pushTag |
T / P |
setUpstream |
u |
sortOrder |
s |
Commits
| Action | Key |
|---|---|
squashDown |
s |
renameCommit / renameCommitWithEditor |
r / R |
viewResetOptions |
g |
markCommitAsFixup / createFixupCommit |
f / F |
squashAboveCommits |
S |
moveDownCommit / moveUpCommit |
Ctrl+j / Ctrl+k |
resetCommitAuthor |
a |
pickCommit |
p |
revertCommit |
t |
cherryPickCopy / pasteCommits |
C / V |
markCommitAsBaseForRebase |
B |
tagCommit |
T |
checkoutCommit |
Space |
resetCherryPick |
Ctrl+c |
copyCommitAttributeToClipboard |
y |
openLogMenu |
Ctrl+l |
openInBrowser |
o |
viewBisectOptions |
b |
startInteractiveRebase |
i |
Other panels
| Panel | Action | Key |
|---|---|---|
| amendAttribute | resetAuthor / setAuthor / addCoAuthor |
a / A / c |
| stash | popStash / renameStash |
g / r |
| commitFiles | checkoutCommitFile |
c |
| main | toggleSelectHunk / pickBothHunks / editSelectHunk |
a / b / E |
| submodules | init / update / bulkMenu |
i / u / b |
| commitMessage | commitMenu |
Ctrl+o |
ii-theme.yml
ii-theme.yml is generated by the ii wallpaper theming system and holds only a gui.theme block: white active border (bold), grey #8F9192 inactive border, #1F1F1F selection and cherry-pick backgrounds, #FFF17B marked base commit, #FF9BAD unstaged changes, #DFE3E3 default text.
Nothing in the repo loads it, so config.yml's cyberdream colors are what lazygit uses. To apply it, pass both files: LG_CONFIG_FILE="$HOME/.config/lazygit/config.yml,$HOME/.config/lazygit/ii-theme.yml" lazygit.