# Config relating to the Lazygit UI
gui:
  # The number of lines you scroll by when scrolling the main window
  scrollHeight: 2
  # If true, allow scrolling past the bottom of the content in the main window
  scrollPastBottom: true
  # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#scroll-off-margin
  scrollOffMargin: 2
  # One of: 'margin' (default) | 'jump'
  scrollOffBehavior: margin
  # If true, capture mouse events.
  # When mouse events are captured, it's a little harder to select text: e.g. requiring you to hold the option key when on macOS.
  mouseEvents: true
  # If true, do not show a warning when discarding changes in the staging view.
  skipDiscardChangeWarning: false
  # If true, do not show warning when applying/popping the stash
  skipStashWarning: false
  # If true, do not show a warning when attempting to commit without any staged files; instead stage all unstaged files.
  skipNoStagedFilesWarning: false
  # If true, do not show a warning when rewording a commit via an external editor
  skipRewordInEditorWarning: false
  # Fraction of the total screen width to use for the left side section. You may want to pick a small number (e.g. 0.2) if you're using a narrow screen, so that you can see more of the main section.
  # Number from 0 to 1.0.
  sidePanelWidth: 0.3333
  # If true, increase the height of the focused side window; creating an accordion effect.
  expandFocusedSidePanel: false
  # The weight of the expanded side panel, relative to the other panels. 2 means
  # twice as tall as the other panels. Only relevant if `expandFocusedSidePanel` is true.
  expandedSidePanelWeight: 2
  # Sometimes the main window is split in two (e.g. when the selected file has both staged and unstaged changes). This setting controls how the two sections are split.
  # Options are:
  # - 'horizontal': split the window horizontally
  # - 'vertical': split the window vertically
  # - 'flexible': (default) split the window horizontally if the window is wide enough, otherwise split vertically
  mainPanelSplitMode: flexible
  # How the window is split when in half screen mode (i.e. after hitting '+' once).
  # Possible values:
  # - 'left': split the window horizontally (side panel on the left, main view on the right)
  # - 'top': split the window vertically (side panel on top, main view below)
  enlargedSideViewLocation: left
  # One of 'auto' (default) | 'en' | 'zh-CN' | 'zh-TW' | 'pl' | 'nl' | 'ja' | 'ko' | 'ru'
  language: auto
  # Format used when displaying time e.g. commit time.
  # Uses Go's time format syntax: https://pkg.go.dev/time#Time.Format
  timeFormat: 02 Jan 06
  # Format used when displaying time if the time is less than 24 hours ago.
  # Uses Go's time format syntax: https://pkg.go.dev/time#Time.Format
  shortTimeFormat: 3:04PM
  # Config relating to colors and styles.
  # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#color-attributes
  theme:
    # Border color of focused window
    activeBorderColor:
      - "#8caaee"
      - bold
    # Border color of non-focused windows
    inactiveBorderColor:
      - "#a5adce"
      # Border color of focused window when searching in that window
    searchingActiveBorderColor:
      - "#e5c890"
    # Color of keybindings help text in the bottom line
    optionsTextColor:
      - "#8caaee"
    # Background color of selected line.
    # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#highlighting-the-selected-line
    selectedLineBgColor:
      - "#414559"
    # Foreground color of copied commit
    cherryPickedCommitFgColor:
      - "#8caaee"
    # Background color of copied commit
    cherryPickedCommitBgColor:
      - "#51576d"
    # Color for file with unstaged changes
    unstagedChangesColor:
      - "#e78284"
    # Default text color
    defaultFgColor:
      - "#c6d0f5"
  authorColors:
    "Fabio Scotto di Santolo": "#babbf1"
  branchColors:
    develop: yellow
    feature: blue
    fix: red
    hotfix: red
  # Config relating to the commit length indicator
  commitLength:
    # If true, show an indicator of commit message length
    show: true
  # If true, show the '5 of 20' footer at the bottom of list views
  showListFooter: true
  # If true, display the files in the file views as a tree. If false, display the files as a flat list.
  # This can be toggled from within Lazygit with the '~' key, but that will not change the default.
  showFileTree: true
  # If true, show a random tip in the command log when Lazygit starts
  showRandomTip: true
  # If true, show the command log
  showCommandLog: true
  # If true, show the bottom line that contains keybinding info and useful buttons. If false, this line will be hidden except to display a loader for an in-progress action.
  showBottomLine: true
  # If true, show jump-to-window keybindings in window titles.
  showPanelJumps: true
  # Deprecated: use nerdFontsVersion instead
  showIcons: false
  # Nerd fonts version to use.
  # One of: '2' | '3' | empty string (default)
  # If empty, do not show icons.
  nerdFontsVersion: "3"
  # If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty.
  showFileIcons: true
  # Length of author name in (non-expanded) commits view. 2 means show initials only.
  commitAuthorShortLength: 2
  # Length of author name in expanded commits view. 2 means show initials only.
  commitAuthorLongLength: 17
  # Length of commit hash in commits view. 0 shows '*' if NF icons aren't on.
  commitHashLength: 8
  # If true, show commit hashes alongside branch names in the branches view.
  showBranchCommitHash: false
  # Whether to show the divergence from the base branch in the branches view.
  # One of: 'none' | 'onlyArrow'  | 'arrowAndNumber'
  showDivergenceFromBaseBranch: none
  # Height of the command log view
  commandLogSize: 8
  # Whether to split the main window when viewing file changes.
  # One of: 'auto' | 'always'
  # If 'auto', only split the main window when a file has both staged and unstaged changes
  splitDiff: auto
  # Default size for focused window. Window size can be changed from within Lazygit with '+' and '_' (but this won't change the default).
  # One of: 'normal' (default) | 'half' | 'full'
  screenMode: normal
  # Window border style.
  # One of 'rounded' (default) | 'single' | 'double' | 'hidden'
  border: rounded
  # If true, show a seriously epic explosion animation when nuking the working tree.
  animateExplosion: true
  # Whether to stack UI components on top of each other.
  # One of 'auto' (default) | 'always' | 'never'
  portraitMode: auto
  # How things are filtered when typing '/'.
  # One of 'substring' (default) | 'fuzzy'
  filterMode: substring
  # Config relating to the spinner.
  spinner:
    # The frames of the spinner animation.
    frames:
      - "|"
      - /
      - "-"
      - \
    # The "speed" of the spinner in milliseconds.
    rate: 50
  # Status panel view.
  # One of 'dashboard' (default) | 'allBranchesLog'
  statusPanelView: dashboard
# Config relating to git
git:
  # See https://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md
  paging:
    # Value of the --color arg in the git diff command. Some pagers want this to be set to 'always' and some want it set to 'never'
    colorArg: always
    # e.g.
    # diff-so-fancy
    # delta --dark --paging=never
    # ydiff -p cat -s --wrap --width={{columnWidth}}
    pager: "delta --paging=never"
    # If true, Lazygit will use whatever pager is specified in `$GIT_PAGER`, `$PAGER`, or your *git config*. If the pager ends with something like ` | less` we will strip that part out, because less doesn't play nice with our rendering approach. If the custom pager uses less under the hood, that will also break rendering (hence the `--paging=never` flag for the `delta` pager).
    useConfig: false
    # e.g. 'difft --color=always'
    externalDiffCommand: ""
  # Config relating to committing
  commit:
    # If true, pass '--signoff' flag when committing
    signOff: false
    # Automatic WYSIWYG wrapping of the commit message as you type
    autoWrapCommitMessage: true
    # If autoWrapCommitMessage is true, the width to wrap to
    autoWrapWidth: 72
  # Config relating to merging
  merging:
    # If true, run merges in a subprocess so that if a commit message is required, Lazygit will not hang
    # Only applicable to unix users.
    manualCommit: false
    # Extra args passed to `git merge`, e.g. --no-ff
    args: "--no-ff"
    # The commit message to use for a squash merge commit. Can contain "{{selectedRef}}" and "{{currentBranch}}" placeholders.
    squashMergeMessage: Squash merge {{selectedRef}} into {{currentBranch}}
  # list of branches that are considered 'main' branches, used when displaying commits
  mainBranches:
    - master
    - main
  # Prefix to use when skipping hooks. E.g. if set to 'WIP', then pre-commit hooks will be skipped when the commit message starts with 'WIP'
  skipHookPrefix: WIP
  # If true, periodically fetch from remote
  autoFetch: true
  # If true, periodically refresh files and submodules
  autoRefresh: true
  # If true, pass the --all arg to git fetch
  fetchAll: true
  # Command used when displaying the current branch git log in the main window
  branchLogCmd: git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --
  # If true, do not spawn a separate process when using GPG
  overrideGpg: false
  # If true, do not allow force pushes
  disableForcePushing: false
  # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix
  commitPrefix:
    - # pattern to match on. E.g. for 'feature/AB-123' to match on the AB-123 use "^\\w+\\/(\\w+-\\w+).*"
      pattern: ""
      # Replace directive. E.g. for 'feature/AB-123' to start the commit message with 'AB-123 ' use "[$1] "
      replace: ""
  # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-branch-name-prefix
  branchPrefix: ""
  # If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀
  # (This should really be under 'gui', not 'git')
  parseEmoji: true
  # Config for showing the log in the commits view
  log:
    # One of: 'date-order' | 'author-date-order' | 'topo-order' | 'default'
    # 'topo-order' makes it easier to read the git log graph, but commits may not
    # appear chronologically. See https://git-scm.com/docs/
    #
    # Deprecated: Configure this with `Log menu -> Commit sort order` (<c-l> in the commits window by default).
    order: topo-order
    # This determines whether the git graph is rendered in the commits panel
    # One of 'always' | 'never' | 'when-maximised'
    #
    # Deprecated: Configure this with `Log menu -> Show git graph` (<c-l> in the commits window by default).
    showGraph: always
    # displays the whole git graph by default in the commits view (equivalent to passing the `--all` argument to `git log`)
    showWholeGraph: false
  # When copying commit hashes to the clipboard, truncate them to this
  # length. Set to 40 to disable truncation.
  truncateCopiedCommitHashesTo: 12
  allBranchesLogCmds:
    - git log --graph --all --color=always --abbrev-commit --decorate --date=relative  --pretty=medium
# Periodic update checks
update:
  # One of: 'prompt' (default) | 'background' | 'never'
  method: prompt
  # Period in days between update checks
  days: 14
# Background refreshes
refresher:
  # File/submodule refresh interval in seconds.
  # Auto-refresh can be disabled via option 'git.autoRefresh'.
  refreshInterval: 10
  # Re-fetch interval in seconds.
  # Auto-fetch can be disabled via option 'git.autoFetch'.
  fetchInterval: 60
# If true, show a confirmation popup before quitting Lazygit
confirmOnQuit: false
# If true, exit Lazygit when the user presses escape in a context where there is nothing to cancel/close
quitOnTopLevelReturn: false
# Config relating to things outside of Lazygit like how files are opened, copying to clipboard, etc
os:
  # Command for editing a file. Should contain "{{filename}}".
  edit: ""
  # Command for editing a file at a given line number. Should contain
  # "{{filename}}", and may optionally contain "{{line}}".
  editAtLine: ""
  # Same as EditAtLine, except that the command needs to wait until the
  # window is closed.
  editAtLineAndWait: ""
  # For opening a directory in an editor
  openDirInEditor: ""
  # A built-in preset that sets all of the above settings. Supported presets
  # are defined in the getPreset function in editor_presets.go.
  editPreset: ""
  # Command for opening a file, as if the file is double-clicked. Should
  # contain "{{filename}}", but doesn't support "{{line}}".
  open: ""
  # Command for opening a link. Should contain "{{link}}".
  openLink: ""
  # EditCommand is the command for editing a file.
  # Deprecated: use Edit instead. Note that semantics are different:
  # EditCommand is just the command itself, whereas Edit contains a
  # "{{filename}}" variable.
  editCommand: ""
  # EditCommandTemplate is the command template for editing a file
  # Deprecated: use EditAtLine instead.
  editCommandTemplate: ""
  # OpenCommand is the command for opening a file
  # Deprecated: use Open instead.
  openCommand: ""
  # OpenLinkCommand is the command for opening a link
  # Deprecated: use OpenLink instead.
  openLinkCommand: ""
  # CopyToClipboardCmd is the command for copying to clipboard.
  # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard
  copyToClipboardCmd: ""
  # ReadFromClipboardCmd is the command for reading the clipboard.
  # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard
  readFromClipboardCmd: ""
# If true, don't display introductory popups upon opening Lazygit.
disableStartupPopups: true
# What to do when opening Lazygit outside of a git repo.
# - 'prompt': (default) ask whether to initialize a new repo or open in the most recent repo
# - 'create': initialize a new repo
# - 'skip': open most recent repo
# - 'quit': exit Lazygit
notARepository: prompt
# If true, display a confirmation when subprocess terminates. This allows you to view the output of the subprocess before returning to Lazygit.
promptToReturnFromSubprocess: true
# Keybindings
keybinding:
  universal:
    quit: q
    quit-alt1: <c-c>
    return: <esc>
    quitWithoutChangingDirectory: Q
    togglePanel: <tab>
    prevItem: <up>
    nextItem: <down>
    prevItem-alt: k
    nextItem-alt: j
    prevPage: ","
    nextPage: .
    scrollLeft: H
    scrollRight: L
    gotoTop: <
    gotoBottom: ">"
    toggleRangeSelect: v
    rangeSelectDown: <s-down>
    rangeSelectUp: <s-up>
    prevBlock: <left>
    nextBlock: <right>
    prevBlock-alt: h
    nextBlock-alt: l
    nextBlock-alt2: <tab>
    prevBlock-alt2: <backtab>
    jumpToBlock:
      - "1"
      - "2"
      - "3"
      - "4"
      - "5"
    nextMatch: "n"
    prevMatch: "N"
    startSearch: /
    optionMenu: <disabled>
    optionMenu-alt1: "?"
    select: <space>
    goInto: <enter>
    confirm: <enter>
    confirmInEditor: <a-enter>
    remove: d
    new: "n"
    edit: e
    openFile: o
    scrollUpMain: <pgup>
    scrollDownMain: <pgdown>
    scrollUpMain-alt1: K
    scrollDownMain-alt1: J
    scrollUpMain-alt2: <c-u>
    scrollDownMain-alt2: <c-d>
    executeShellCommand: ":"
    createRebaseOptionsMenu: m
    # 'Files' appended for legacy reasons
    pushFiles: P
    # 'Files' appended for legacy reasons
    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>
    copyToClipboard: <c-o>
    openRecentRepos: <c-r>
    submitEditorText: <enter>
    extrasMenu: "@"
    toggleWhitespaceInDiffView: <c-w>
    increaseContextInDiffView: "}"
    decreaseContextInDiffView: "{"
    increaseRenameSimilarityThreshold: )
    decreaseRenameSimilarityThreshold: (
    openDiffTool: <c-t>
  status:
    checkForUpdate: u
    recentRepos: <enter>
    allBranchesLogGraph: a
  files:
    commitChanges: c
    commitChangesWithoutHook: w
    amendLastCommit: A
    commitChangesWithEditor: C
    findBaseCommitForFixup: <c-f>
    confirmDiscard: x
    ignoreFile: i
    refreshFiles: r
    stashAllChanges: s
    viewStashOptions: S
    toggleStagedAll: a
    viewResetOptions: D
    fetch: f
    toggleTreeView: "`"
    openMergeTool: M
    openStatusFilter: <c-b>
    copyFileInfoToClipboard: "y"
  branches:
    createPullRequest: o
    viewPullRequestOptions: O
    copyPullRequestURL: <c-y>
    checkoutBranchByName: c
    forceCheckoutBranch: F
    rebaseBranch: r
    renameBranch: R
    mergeIntoCurrentBranch: M
    viewGitFlowOptions: i
    fastForward: f
    createTag: T
    pushTag: P
    setUpstream: u
    fetchRemote: f
    sortOrder: s
  worktrees:
    viewWorktreeOptions: w
  commits:
    squashDown: s
    renameCommit: r
    renameCommitWithEditor: R
    viewResetOptions: g
    markCommitAsFixup: f
    createFixupCommit: F
    squashAboveCommits: S
    moveDownCommit: <c-j>
    moveUpCommit: <c-k>
    amendToCommit: A
    resetCommitAuthor: a
    pickCommit: p
    revertCommit: t
    cherryPickCopy: C
    pasteCommits: V
    markCommitAsBaseForRebase: B
    tagCommit: T
    checkoutCommit: <space>
    resetCherryPick: <c-R>
    copyCommitAttributeToClipboard: "y"
    openLogMenu: <c-l>
    openInBrowser: o
    viewBisectOptions: b
    startInteractiveRebase: i
  amendAttribute:
    resetAuthor: a
    setAuthor: A
    addCoAuthor: c
  stash:
    popStash: g
    renameStash: r
  commitFiles:
    checkoutCommitFile: c
  main:
    toggleSelectHunk: a
    pickBothHunks: b
    editSelectHunk: E
  submodules:
    init: i
    update: u
    bulkMenu: b
  commitMessage:
    commitMenu: <c-o>
