2020-02-27 19:57:15 +02:00
# User Config
2018-08-18 05:54:39 +02:00
2020-02-05 16:40:48 +02:00
Default path for the config file:
2021-04-11 13:42:41 +02:00
- Linux: `~/.config/lazygit/config.yml`
- MacOS: `~/Library/Application Support/lazygit/config.yml`
- Windows: `%APPDATA%\lazygit\config.yml`
2021-04-11 02:25:37 +02:00
For old installations (slightly embarrassing: I didn't realise at the time that you didn't need to supply a vendor name to the path so I just used my name):
2021-04-11 13:42:41 +02:00
- Linux: `~/.config/jesseduffield/lazygit/config.yml`
- MacOS: `~/Library/Application Support/jesseduffield/lazygit/config.yml`
- Windows: `%APPDATA%\jesseduffield\lazygit\config.yml`
2019-12-05 04:35:29 +02:00
2020-02-27 19:57:15 +02:00
## Default
2018-08-18 05:54:39 +02:00
2019-07-23 13:30:05 +02:00
```yaml
2021-04-11 13:42:41 +02:00
gui:
# stuff relating to the UI
scrollHeight: 2 # how many lines you scroll by
scrollPastBottom: true # enable scrolling past the bottom
sidePanelWidth: 0.3333 # number from 0 to 1
expandFocusedSidePanel: false
mainPanelSplitMode: 'flexible' # one of 'horizontal' | 'flexible' | 'vertical'
2021-08-27 09:00:53 +02:00
language: 'auto' # one of 'auto' | 'en' | 'zh' | 'pl' | 'nl'
2021-04-11 13:42:41 +02:00
theme:
lightTheme: false # For terminals with a light background
activeBorderColor:
- white
- bold
inactiveBorderColor:
- green
optionsTextColor:
- blue
selectedLineBgColor:
- default
selectedRangeBgColor:
- blue
2021-09-29 13:53:31 +02:00
cherryPickedCommitBgColor:
- blue
cherryPickedCommitFgColor:
- cyan
2021-04-11 13:42:41 +02:00
commitLength:
show: true
mouseEvents: true
skipUnstageLineWarning: false
2022-01-24 10:05:12 +02:00
skipStashWarning: false
2021-12-13 15:28:14 +02:00
showFileTree: true # for rendering changes files in a tree format
2021-06-14 10:17:08 +02:00
showListFooter: true # for seeing the '5 of 20' message in list panels
2021-04-12 13:41:12 +02:00
showRandomTip: true
2021-04-11 14:03:55 +02:00
showCommandLog: true
2021-04-11 15:38:59 +02:00
commandLogSize: 8
2021-04-11 13:42:41 +02:00
git:
paging:
colorArg: always
useConfig: false
2021-11-14 15:31:15 +02:00
commit:
signOff: false
2021-04-11 13:42:41 +02:00
merging:
# only applicable to unix users
manualCommit: false
# extra args passed to `git merge` , e.g. --no-ff
args: ''
2021-11-02 11:05:23 +02:00
log:
2021-11-02 12:16:00 +02:00
# one of date-order, author-date-order, topo-order.
2021-11-02 11:05:23 +02:00
# topo-order makes it easier to read the git log graph, but commits may not
# appear chronologically. See https://git-scm.com/docs/git-log#_commit_ordering
order: 'topo-order'
# one of always, never, when-maximised
# this determines whether the git graph is rendered in the commits panel
showGraph: 'when-maximised'
2021-04-11 13:42:41 +02:00
skipHookPrefix: WIP
autoFetch: true
branchLogCmd: 'git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --'
allBranchesLogCmd: 'git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium'
overrideGpg: false # prevents lazygit from spawning a separate process when using GPG
disableForcePushing: false
2021-07-16 21:13:01 +02:00
parseEmoji: false
2021-08-11 00:08:53 +02:00
diffContextSize: 3 # how many lines of context are shown around a change in diffs
2021-06-01 08:23:33 +02:00
os:
2021-08-04 11:43:34 +02:00
editCommand: '' # see 'Configuring File Editing' section
editCommandTemplate: '{{editor}} {{filename}}'
2021-06-05 02:04:35 +02:00
openCommand: ''
2021-04-11 13:42:41 +02:00
refresher:
refreshInterval: 10 # file/submodule refresh interval in seconds
fetchInterval: 60 # re-fetch interval in seconds
update:
method: prompt # can be: prompt | background | never
days: 14 # how often an update is checked for
reporting: 'undetermined' # one of: 'on' | 'off' | 'undetermined'
confirmOnQuit: false
# determines whether hitting 'esc' will quit the application when there is nothing to cancel/close
quitOnTopLevelReturn: false
disableStartupPopups: false
notARepository: 'prompt' # one of: 'prompt' | 'create' | 'skip'
keybinding:
universal:
quit: 'q'
quit-alt1: '< c-c > ' # alternative/alias of quit
return: '< esc > ' # return to previous menu, will quit if there's nowhere to return
quitWithoutChangingDirectory: 'Q'
togglePanel: '< tab > ' # goto the next panel
prevItem: '< up > ' # go one line up
nextItem: '< down > ' # go one line down
prevItem-alt: 'k' # go one line up
nextItem-alt: 'j' # go one line down
prevPage: ',' # go to next page in list
nextPage: '.' # go to previous page in list
gotoTop: '< ' # go to top of list
gotoBottom: '>' # go to bottom of list
2021-11-02 11:35:53 +02:00
scrollLeft: 'H' # scroll left within list view
scrollRight: 'L' # scroll right within list view
2021-04-11 13:42:41 +02:00
prevBlock: '< left > ' # goto the previous block / panel
nextBlock: '< right > ' # goto the next block / panel
prevBlock-alt: 'h' # goto the previous block / panel
nextBlock-alt: 'l' # goto the next block / panel
2021-11-02 11:05:23 +02:00
jumpToBlock: ['1', '2', '3', '4', '5'] # goto the Nth block / panel
2021-04-11 13:42:41 +02:00
nextMatch: 'n'
prevMatch: 'N'
optionMenu: 'x' # show help menu
optionMenu-alt1: '?' # show help menu
select: '< space > '
goInto: '< enter > '
2021-05-27 16:22:33 +02:00
openRecentRepos: '< c-r > '
2021-04-11 13:42:41 +02:00
confirm: '< enter > '
confirm-alt1: 'y'
remove: 'd'
new: 'n'
edit: 'e'
openFile: 'o'
2021-04-12 19:48:06 +02:00
scrollUpMain: '< pgup > ' # main panel scroll up
scrollDownMain: '< pgdown > ' # main panel scroll down
scrollUpMain-alt1: 'K' # main panel scroll up
scrollDownMain-alt1: 'J' # main panel scroll down
scrollUpMain-alt2: '< c-u > ' # main panel scroll up
scrollDownMain-alt2: '< c-d > ' # main panel scroll down
2021-04-11 13:42:41 +02:00
executeCustomCommand: ':'
createRebaseOptionsMenu: 'm'
pushFiles: 'P'
pullFiles: 'p'
refresh: 'R'
createPatchOptionsMenu: '< c-p > '
nextTab: ']'
prevTab: '['
nextScreenMode: '+'
prevScreenMode: '_'
undo: 'z'
redo: '< c-z > '
filteringMenu: '< c-s > '
diffingMenu: 'W'
diffingMenu-alt: '< c-e > ' # deprecated
copyToClipboard: '< c-o > '
submitEditorText: '< enter > '
2021-07-29 14:15:26 +02:00
appendNewline: '< a-enter > '
extrasMenu: '@'
toggleWhitespaceInDiffView: '< c-w > '
2021-09-11 20:42:23 +02:00
increaseContextInDiffView: '}'
2021-09-11 19:35:17 +02:00
decreaseContextInDiffView: '{'
2021-04-11 13:42:41 +02:00
status:
checkForUpdate: 'u'
recentRepos: '< enter > '
files:
commitChanges: 'c'
commitChangesWithoutHook: 'w' # commit changes without pre-commit hook
amendLastCommit: 'A'
commitChangesWithEditor: 'C'
ignoreFile: 'i'
refreshFiles: 'r'
stashAllChanges: 's'
viewStashOptions: 'S'
toggleStagedAll: 'a' # stage/unstage all
viewResetOptions: 'D'
fetch: 'f'
toggleTreeView: '`'
branches:
createPullRequest: 'o'
2021-04-21 15:05:57 +02:00
viewPullRequestOptions: 'O'
2021-04-11 13:42:41 +02:00
checkoutBranchByName: 'c'
forceCheckoutBranch: 'F'
rebaseBranch: 'r'
mergeIntoCurrentBranch: 'M'
viewGitFlowOptions: 'i'
fastForward: 'f' # fast-forward this branch from its upstream
pushTag: 'P'
setUpstream: 'u' # set as upstream of checked-out branch
fetchRemote: 'f'
commits:
squashDown: 's'
renameCommit: 'r'
renameCommitWithEditor: 'R'
viewResetOptions: 'g'
markCommitAsFixup: 'f'
createFixupCommit: 'F' # create fixup commit for this commit
squashAboveCommits: 'S'
moveDownCommit: '< c-j > ' # move commit down one
moveUpCommit: '< c-k > ' # move commit up one
amendToCommit: 'A'
pickCommit: 'p' # pick commit (when mid-rebase)
revertCommit: 't'
cherryPickCopy: 'c'
cherryPickCopyRange: 'C'
pasteCommits: 'v'
tagCommit: 'T'
checkoutCommit: '< space > '
resetCherryPick: '< c-R > '
copyCommitMessageToClipboard: '< c-y > '
2021-11-02 12:16:00 +02:00
openLogMenu: '< c-l > '
2022-01-19 09:32:27 +02:00
viewBisectOptions: 'b'
2021-04-11 13:42:41 +02:00
stash:
popStash: 'g'
commitFiles:
checkoutCommitFile: 'c'
main:
toggleDragSelect: 'v'
toggleDragSelect-alt: 'V'
toggleSelectHunk: 'a'
pickBothHunks: 'b'
submodules:
init: 'i'
update: 'u'
bulkMenu: 'b'
2018-08-18 05:54:39 +02:00
```
2020-02-27 19:57:15 +02:00
## Platform Defaults
2018-09-01 06:35:46 +02:00
2020-02-27 19:57:15 +02:00
### Windows
2018-09-01 06:35:46 +02:00
2019-07-23 13:30:05 +02:00
```yaml
2021-04-11 13:42:41 +02:00
os:
2021-10-09 09:32:36 +02:00
openCommand: 'start "" {{filename}}'
2018-09-01 06:35:46 +02:00
```
2020-02-27 19:57:15 +02:00
### Linux
2018-09-01 06:35:46 +02:00
2019-07-23 13:30:05 +02:00
```yaml
2021-04-11 13:42:41 +02:00
os:
2021-10-09 09:32:36 +02:00
openCommand: 'xdg-open {{filename}} >/dev/null'
2018-09-01 06:35:46 +02:00
```
2020-02-27 19:57:15 +02:00
### OSX
2018-09-01 06:35:46 +02:00
2019-07-23 13:30:05 +02:00
```yaml
2021-04-11 13:42:41 +02:00
os:
openCommand: 'open {{filename}}'
2018-09-01 06:35:46 +02:00
```
2021-06-01 18:33:16 +02:00
### Configuring File Editing
2021-06-05 02:04:35 +02:00
Lazygit will edit a file with the first set editor in the following:
2021-06-01 08:23:33 +02:00
1. config.yaml
2021-06-05 02:04:35 +02:00
2021-06-01 08:23:33 +02:00
```yaml
os:
2021-08-04 11:43:34 +02:00
editCommand: 'vim' # as an example
2021-06-01 08:23:33 +02:00
```
2021-06-05 02:04:35 +02:00
2. \$(git config core.editor)
3. \$GIT_EDITOR
4. \$VISUAL
5. \$EDITOR
6. \$(which vi)
2021-06-01 08:23:33 +02:00
2021-06-01 18:33:16 +02:00
Lazygit will log an error if none of these options are set.
2021-06-01 08:23:33 +02:00
2021-08-20 18:01:34 +02:00
You can specify a line number you are currently at when in the line-by-line mode.
2021-08-20 15:39:08 +02:00
```yaml
os:
editCommand: 'vim'
editCommandTemplate: '{{editor}} +{{line}} {{filename}}'
```
or
```yaml
os:
editCommand: 'code'
editCommandTemplate: '{{editor}} --goto {{filename}}:{{line}}'
```
2021-08-23 01:33:05 +02:00
`{{editor}}` in `editCommandTemplate` is replaced with the value of `editCommand` .
2021-08-20 15:39:08 +02:00
2021-10-16 03:07:24 +02:00
### Overriding default config file location
2021-07-27 22:03:37 +02:00
2021-10-16 03:07:24 +02:00
To override the default config directory, use `$CONFIG_DIR="~/.config/lazygit"` . This directory contains the config file in addition to some other files lazygit uses to keep track of state across sessions.
To override the individual config file used, use the `--use-config-file` arg or the `LG_CONFIG_FILE` env var.
If you want to merge a specific config file into a more general config file, perhaps for the sake of setting some theme-specific options, you can supply a list of comma-separated config file paths, like so:
```sh
lazygit --use-config-file=~/.base_lg_conf,~/.light_theme_lg_conf
or
LG_CONFIG_FILE="~/.base_lg_conf,~/.light_theme_lg_conf" lazygit
```
2021-07-27 22:03:37 +02:00
2020-02-27 19:57:15 +02:00
### Recommended Config Values
2018-09-01 06:35:46 +02:00
for users of VSCode
2019-07-23 13:30:05 +02:00
```yaml
2021-04-11 13:42:41 +02:00
os:
openCommand: 'code -rg {{filename}}'
2018-09-01 06:35:46 +02:00
```
2020-02-27 19:57:15 +02:00
## Color Attributes
2018-08-18 05:54:39 +02:00
For color attributes you can choose an array of attributes (with max one color attribute)
The available attributes are:
2021-07-25 12:18:10 +02:00
**Colors**
2018-08-18 05:54:39 +02:00
- black
- red
- green
- yellow
- blue
- magenta
- cyan
- white
2021-07-27 15:00:37 +02:00
- '#ff00ff'
2021-07-25 12:18:10 +02:00
**Modifiers**
2018-08-18 05:54:39 +02:00
- bold
2021-07-25 12:18:10 +02:00
- default
2018-08-18 05:54:39 +02:00
- reverse # useful for high-contrast
- underline
2018-08-21 05:42:17 +02:00
2020-02-27 19:57:15 +02:00
## Light terminal theme
2019-10-18 09:52:32 +02:00
If you have issues with a light terminal theme where you can't read / see the text add these settings
```yaml
2021-04-11 13:42:41 +02:00
gui:
theme:
lightTheme: true
activeBorderColor:
- black
- bold
inactiveBorderColor:
- black
selectedLineBgColor:
- default
2020-05-13 13:10:00 +02:00
```
## Struggling to see selected line
2021-04-01 11:44:27 +02:00
If you struggle to see the selected line I recommend using the reverse attribute on selected lines like so:
2020-05-13 13:10:00 +02:00
```yaml
2021-04-11 13:42:41 +02:00
gui:
theme:
selectedLineBgColor:
- reverse
selectedRangeBgColor:
- reverse
2019-10-18 09:52:32 +02:00
```
2021-04-01 11:52:56 +02:00
The following has also worked for a couple of people:
2021-04-11 13:42:41 +02:00
2021-04-01 11:52:56 +02:00
```yaml
gui:
theme:
activeBorderColor:
- white
- bold
inactiveBorderColor:
- white
selectedLineBgColor:
- reverse
- blue
```
2021-04-01 11:44:27 +02:00
Alternatively you may have bold fonts disabled in your terminal, in which case enabling bold fonts should solve the problem.
If you're still having trouble please raise an issue.
2021-12-07 12:10:29 +02:00
## Custom Author Color
2021-12-11 05:24:38 +02:00
Lazygit will assign a random color for every commit author in the commits pane by default.
2021-12-07 12:10:29 +02:00
You can customize the color in case you're not happy with the randomly assigned one:
```yaml
gui:
authorColors:
2021-12-11 05:24:38 +02:00
'John Smith': '#ff0000' # use red for John Smith
2021-12-07 12:10:29 +02:00
```
2021-12-11 05:24:38 +02:00
You can use wildcard to set a unified color in case your are lazy to customize the color for every author or you just want a single color for all/other authors:
2022-01-19 09:32:27 +02:00
2021-12-07 12:10:29 +02:00
```yaml
gui:
authorColors:
# use red for John Smith
2021-12-11 05:24:38 +02:00
'John Smith': '#ff0000'
2021-12-07 12:10:29 +02:00
# use blue for other authors
'*': '#0000ff'
```
2020-02-27 19:57:15 +02:00
## Example Coloring
2018-08-21 05:42:17 +02:00
2020-09-27 02:31:16 +02:00
![border example ](../../assets/colored-border-example.png )
2019-12-05 04:18:28 +02:00
2020-02-27 19:57:15 +02:00
## Keybindings
2020-04-03 08:38:46 +02:00
For all possible keybinding options, check [Custom_Keybindings.md ](https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Custom_Keybindings.md )
2019-12-05 04:46:00 +02:00
2020-02-27 19:57:15 +02:00
### Example Keybindings For Colemak Users
2019-12-05 04:46:00 +02:00
2019-12-05 04:18:28 +02:00
```yaml
2021-04-11 13:42:41 +02:00
keybinding:
universal:
prevItem-alt: 'u'
nextItem-alt: 'e'
prevBlock-alt: 'n'
nextBlock-alt: 'i'
nextMatch: '='
prevMatch: '-'
new: 'k'
edit: 'o'
openFile: 'O'
scrollUpMain-alt1: 'U'
scrollDownMain-alt1: 'E'
scrollUpMain-alt2: '< c-u > '
scrollDownMain-alt2: '< c-e > '
undo: 'l'
redo: '< c-r > '
diffingMenu: 'M'
filteringMenu: '< c-f > '
files:
ignoreFile: 'I'
commits:
moveDownCommit: '< c-e > '
moveUpCommit: '< c-u > '
branches:
viewGitFlowOptions: 'I'
setUpstream: 'U'
2019-12-05 04:18:28 +02:00
```
2019-12-05 04:46:00 +02:00
2020-02-27 19:57:15 +02:00
## Custom pull request URLs
Some git provider setups (e.g. on-premises GitLab) can have distinct URLs for git-related calls and
the web interface/API itself. To work with those, Lazygit needs to know where it needs to create
the pull request. You can do so on your `config.yml` file using the following syntax:
```yaml
services:
2021-04-11 13:42:41 +02:00
'< gitDomain > ': '< provider > :< webDomain > '
2020-02-27 19:57:15 +02:00
```
Where:
- `gitDomain` stands for the domain used by git itself (i.e. the one present on clone URLs), e.g. `git.work.com`
- `provider` is one of `github` , `bitbucket` or `gitlab`
- `webDomain` is the URL where your git service exposes a web interface and APIs, e.g. `gitservice.work.com`
2020-04-15 17:27:42 +02:00
## Predefined commit message prefix
2021-04-11 13:42:41 +02:00
2020-04-15 17:27:42 +02:00
In situations where certain naming pattern is used for branches and commits, pattern can be used to populate
commit message with prefix that is parsed from the branch name.
Example:
2021-04-11 13:42:41 +02:00
- Branch name: feature/AB-123
- Commit message: [AB-123] Adding feature
2020-04-15 17:27:42 +02:00
```yaml
2021-04-11 13:42:41 +02:00
git:
commitPrefixes:
my_project: # This is repository folder name
pattern: "^\\w+\\/(\\w+-\\w+).*"
replace: '[$1] '
2020-04-15 17:27:42 +02:00
```
2020-09-27 03:59:25 +02:00
## Custom git log command
You can override the `git log` command that's used to render the log of the selected branch like so:
```
git:
branchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium --oneline {{branchName}} --"
```
Result:
![](https://i.imgur.com/Nibq35B.png)
2020-11-25 04:56:58 +02:00
## Launching not in a repository behaviour
By default, when launching lazygit from a directory that is not a repository,
you will be prompted to choose if you would like to initialize a repo. You can
override this behaviour in the config with one of the following:
```yaml
# for default prompting behaviour
notARepository: 'prompt'
```
```yaml
# to skip and initialize a new repo
notARepository: 'create'
```
```yaml
# to skip without creating a new repo
notARepository: 'skip'
```