1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2024-12-04 10:34:55 +02:00
lazygit/docs/Config.md

550 lines
16 KiB
Markdown
Raw Normal View History

# User Config
2018-08-18 05:54:39 +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`
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`
2023-03-07 21:54:47 +02:00
- MacOS: `~/Library/Application\ Support/jesseduffield/lazygit/config.yml`
2021-04-11 13:42:41 +02:00
- Windows: `%APPDATA%\jesseduffield\lazygit\config.yml`
2019-12-05 04:35:29 +02:00
If you want to change the config directory:
- MacOS: `export XDG_CONFIG_HOME="$HOME/.config"`
## Default
2018-08-18 05:54:39 +02:00
```yaml
2021-04-11 13:42:41 +02:00
gui:
# stuff relating to the UI
windowSize: 'normal' # one of 'normal' | 'half' | 'full' default is 'normal'
2021-04-11 13:42:41 +02:00
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'
2023-05-19 14:45:51 +02:00
language: 'auto' # one of 'auto' | 'en' | 'zh' | 'pl' | 'nl' | 'ja' | 'ko' | 'ru'
timeFormat: '02 Jan 06' # https://pkg.go.dev/time#Time.Format
shortTimeFormat: '3:04PM'
2021-04-11 13:42:41 +02:00
theme:
activeBorderColor:
2022-04-15 01:37:04 +02:00
- green
2021-04-11 13:42:41 +02:00
- bold
inactiveBorderColor:
2022-04-15 01:37:04 +02:00
- white
searchingActiveBorderColor:
- cyan
- bold
2021-04-11 13:42:41 +02:00
optionsTextColor:
- blue
selectedLineBgColor:
2022-04-15 01:37:04 +02:00
- blue # set to `default` to have no background colour
2021-04-11 13:42:41 +02:00
selectedRangeBgColor:
- blue
cherryPickedCommitBgColor:
- cyan
2022-04-15 01:37:04 +02:00
cherryPickedCommitFgColor:
- blue
2022-01-29 01:15:55 +02:00
unstagedChangesColor:
- red
defaultFgColor:
2022-11-26 04:39:00 +02:00
- default
2021-04-11 13:42:41 +02:00
commitLength:
show: true
mouseEvents: true
skipDiscardChangeWarning: false
2022-01-24 10:05:12 +02:00
skipStashWarning: false
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
2022-11-07 07:35:36 +02:00
showBranchCommitHash: false # show commit hashes alongside branch names
experimentalShowBranchHeads: false # visualize branch heads with (*) in commits list
2022-04-18 01:41:40 +02:00
showBottomLine: true # for hiding the bottom information line (unless it has important information to tell you)
2021-04-11 14:03:55 +02:00
showCommandLog: true
2023-06-15 13:39:11 +02:00
showIcons: false # deprecated: use nerdFontsVersion instead
nerdFontsVersion: "" # nerd fonts version to use ("2" or "3"); empty means don't show nerd font icons
2021-04-11 15:38:59 +02:00
commandLogSize: 8
splitDiff: 'auto' # one of 'auto' | 'always'
skipRewordInEditorWarning: false # for skipping the confirmation before launching the reword editor
border: 'single' # one of 'single' | 'double' | 'rounded' | 'hidden'
2021-04-11 13:42:41 +02:00
git:
paging:
colorArg: always
useConfig: false
commit:
signOff: false
verbose: default # one of 'default' | 'always' | 'never'
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:
# one of date-order, author-date-order, topo-order or default.
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'
2022-05-30 09:34:30 +02:00
# displays the whole git graph by default in the commits panel (equivalent to passing the `--all` argument to `git log`)
showWholeGraph: false
2021-04-11 13:42:41 +02:00
skipHookPrefix: WIP
2023-05-21 02:45:45 +02:00
# The main branches. We colour commits green if they belong to one of these branches,
# so that you can easily see which commits are unique to your branch (coloured in yellow)
mainBranches: [master, main]
2021-04-11 13:42:41 +02:00
autoFetch: true
autoRefresh: true
fetchAll: true # Pass --all flag when running git fetch. Set to false to fetch only origin (or the current branch's upstream remote if there is one)
2021-04-11 13:42:41 +02:00
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
diffContextSize: 3 # how many lines of context are shown around a change in diffs
2021-06-01 08:23:33 +02:00
os:
2023-03-28 17:55:00 +02:00
editPreset: '' # see 'Configuring File Editing' section
edit: ''
editAtLine: ''
editAtLineAndWait: ''
open: ''
openLink: ''
2021-04-11 13:42:41 +02:00
refresher:
refreshInterval: 10 # File/submodule refresh interval in seconds. Auto-refresh can be disabled via option 'git.autoRefresh'.
fetchInterval: 60 # Re-fetch interval in seconds. Auto-fetch can be disabled via option 'git.autoFetch'.
2021-04-11 13:42:41 +02:00
update:
method: prompt # can be: prompt | background | never
days: 14 # how often an update is checked for
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' | 'quit'
promptToReturnFromSubprocess: true # display confirmation when subprocess terminates
2021-04-11 13:42:41 +02:00
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: null # show help menu
2021-04-11 13:42:41 +02:00
optionMenu-alt1: '?' # show help menu
select: '<space>'
goInto: '<enter>'
openRecentRepos: '<c-r>'
2021-04-11 13:42:41 +02:00
confirm: '<enter>'
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>'
extrasMenu: '@'
toggleWhitespaceInDiffView: '<c-w>'
increaseContextInDiffView: '}'
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: '`'
openMergeTool: 'M'
openStatusFilter: '<c-b>'
2021-04-11 13:42:41 +02:00
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'
renameBranch: 'R'
2021-04-11 13:42:41 +02:00
mergeIntoCurrentBranch: 'M'
viewGitFlowOptions: 'i'
fastForward: 'f' # fast-forward this branch from its upstream
2023-02-08 15:40:18 +02:00
createTag: 'T'
2021-04-11 13:42:41 +02:00
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'
2022-10-14 15:19:53 +02:00
renameStash: 'r'
2021-04-11 13:42:41 +02:00
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
```
## Platform Defaults
### Windows
```yaml
2021-04-11 13:42:41 +02:00
os:
2023-05-03 05:48:04 +02:00
open: 'start "" {{filename}}'
```
### Linux
```yaml
2021-04-11 13:42:41 +02:00
os:
2023-05-03 05:48:04 +02:00
open: 'xdg-open {{filename}} >/dev/null'
```
### OSX
```yaml
2021-04-11 13:42:41 +02:00
os:
2023-05-03 05:48:04 +02:00
open: 'open {{filename}}'
```
### Configuring File Editing
2021-06-05 02:04:35 +02:00
2023-03-28 17:55:00 +02:00
There are two commands for opening files, `o` for "open" and `e` for "edit". `o`
acts as if the file was double-clicked in the Finder/Explorer, so it also works
for non-text files, whereas `e` opens the file in an editor. `e` can also jump
to the right line in the file if you invoke it from the staging panel, for
example.
2021-06-05 02:04:35 +02:00
2023-03-28 17:55:00 +02:00
To tell lazygit which editor to use for the `e` command, the easiest way to do
that is to provide an editPreset config, e.g.
2021-06-05 02:04:35 +02:00
2021-06-01 08:23:33 +02:00
```yaml
os:
2023-03-28 17:55:00 +02:00
editPreset: 'vscode'
2021-06-01 08:23:33 +02:00
```
2021-06-05 02:04:35 +02:00
Supported presets are `vim`, `nvim`, `emacs`, `nano`, `vscode`, `sublime`, `bbedit`,
2023-05-24 22:59:04 +02:00
`kakoune`, `helix`, and `xcode`. In many cases lazygit will be able to guess the right preset
from your $(git config core.editor), or an environment variable such as $VISUAL or $EDITOR.
2021-06-01 08:23:33 +02:00
2023-03-28 17:55:00 +02:00
If for some reason you are not happy with the default commands from a preset, or
there simply is no preset for your editor, you can customize the commands by
setting the `edit`, `editAtLine`, and `editAtLineAndWait` options, e.g.:
```yaml
os:
2023-03-28 17:55:00 +02:00
edit: 'myeditor {{filename}}'
editAtLine: 'myeditor --line={{line}} {{filename}}'
editAtLineAndWait: 'myeditor --block --line={{line}} {{filename}}'
editInTerminal: true
```
2023-03-28 17:55:00 +02:00
The `editInTerminal` option is used to decide whether lazygit needs to suspend
itself to the background before calling the editor.
2023-03-28 17:55:00 +02:00
Contributions of new editor presets are welcome; see the `getPreset` function in
[`editor_presets.go`](https://github.com/jesseduffield/lazygit/blob/master/pkg/config/editor_presets.go).
2021-10-16 03:07:24 +02:00
### Overriding default config file location
2021-07-27 22:03:37 +02:00
To override the default config directory, use `CONFIG_DIR="$HOME/.config/lazygit"`. This directory contains the config file in addition to some other files lazygit uses to keep track of state across sessions.
2021-10-16 03:07:24 +02:00
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="$HOME/.base_lg_conf,$HOME/.light_theme_lg_conf"
2021-10-16 03:07:24 +02:00
or
LG_CONFIG_FILE="$HOME/.base_lg_conf,$HOME/.light_theme_lg_conf" lazygit
2021-10-16 03:07:24 +02:00
```
2021-07-27 22:03:37 +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
- '#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
2023-05-21 02:45:45 +02:00
- strikethrough
2018-08-21 05:42:17 +02:00
2022-04-18 03:08:40 +02:00
## Highlighting the selected line
If you don't like the default behaviour of highlighting the selected line with a blue background, you can use the `selectedLineBgColor` and `selectedRangeBgColor` keys to customise the behaviour. If you just want to embolden the selected line (this was the original default), you can do the following:
```yaml
gui:
theme:
selectedLineBgColor:
- default
selectedRangeBgColor:
- default
```
You can also use the reverse attribute like so:
```yaml
gui:
theme:
selectedLineBgColor:
- reverse
selectedRangeBgColor:
- reverse
```
## 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.
You can customize the color in case you're not happy with the randomly assigned one:
```yaml
gui:
authorColors:
'John Smith': 'red' # use red for John Smith
'Alan Smithee': '#00ff00' # use green for Alan Smithee
```
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
```yaml
gui:
authorColors:
# use red for John Smith
'John Smith': 'red'
# use blue for other authors
'*': '#0000ff'
```
## Custom Branch Color
You can customize the color of branches based on the branch prefix:
```yaml
gui:
branchColors:
'docs': '#11aaff' # use a light blue for branches beginning with 'docs/'
```
## 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)
## Display Nerd Fonts Icons
If you are using [Nerd Fonts](https://www.nerdfonts.com), you can display icons.
```yaml
gui:
2023-06-15 13:39:11 +02:00
nerdFontsVersion: "3"
```
2023-06-15 13:39:11 +02:00
Supported versions are "2" and "3". The deprecated config `showIcons` sets the
version to "2" for backwards compatibility.
## 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)
2022-10-15 15:17:00 +02:00
You can disable certain key bindings by specifying `null`.
```yaml
keybinding:
universal:
edit: null # disable 'edit file'
```
### Example Keybindings For Colemak Users
```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'
```
## 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>'
```
Where:
- `gitDomain` stands for the domain used by git itself (i.e. the one present on clone URLs), e.g. `git.work.com`
2023-04-18 18:16:09 +02:00
- `provider` is one of `github`, `bitbucket`, `bitbucketServer`, `azuredevops`, `gitlab` or `gitea`
- `webDomain` is the URL where your git service exposes a web interface and APIs, e.g. `gitservice.work.com`
## Predefined commit message prefix
2021-04-11 13:42:41 +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
```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-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)
## 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'
```
```yaml
# to exit immediately if run outside of the Git repository
notARepository: 'quit'
```