From 9906b59a1f04e5d6d2b89cf5315785f130b775d3 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Tue, 1 Aug 2023 13:54:35 +1000
Subject: [PATCH 01/27] feat(schema): add config.json

---
 schemas/config.json | 352 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 352 insertions(+)
 create mode 100644 schemas/config.json

diff --git a/schemas/config.json b/schemas/config.json
new file mode 100644
index 00000000000..03b0cbc396b
--- /dev/null
+++ b/schemas/config.json
@@ -0,0 +1,352 @@
+{
+  "$schema": "http://json-schema.org/draft-07/schema#",
+  "definitions": {
+    "color": {
+      "type": "string",
+      "oneOf": [
+        {
+          "examples": [
+            "default",
+            "black",
+            "red",
+            "green",
+            "yellow",
+            "blue",
+            "magenta",
+            "cyan",
+            "white"
+          ]
+        },
+        {
+          "pattern": "^#[0-9a-fA-F]{6}$",
+          "examples": [
+            "#ff00ff"
+          ]
+        }
+      ]
+    }
+  },
+  "title": "settings",
+  "description": "Settings of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+  "type": "object",
+  "properties": {
+    "gui": {
+      "title": "gui",
+      "description": "Settings of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "object",
+      "properties": {
+        "windowSize": {
+          "title": "window size",
+          "description": "A window size of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "enum": [
+            "normal",
+            "half",
+            "full"
+          ],
+          "default": "normal"
+        },
+        "scrollHeight": {
+          "title": "scroll height",
+          "description": "A scroll height of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "integer",
+          "minimum": 1,
+          "default": 2
+        },
+        "scrollPastBottom": {
+          "title": "scroll past bottom",
+          "description": "Whether to allow scrolling past bottom of the current window\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "sidePanelWidth": {
+          "title": "side panel width",
+          "description": "A width of the current side panel\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "number",
+          "minimum": 0,
+          "maximum": 1,
+          "default": 0.3333
+        },
+        "expandFocusedSidePanel": {
+          "title": "expand focused side panel",
+          "description": "Whether to expand focused side panel of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": false
+        },
+        "mainPanelSplitMode": {
+          "title": "main panel split mode",
+          "description": "A split mode of the current main panel\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "enum": [
+            "horizontal",
+            "flexible",
+            "vertical"
+          ],
+          "default": "flexible"
+        },
+        "language": {
+          "title": "language",
+          "description": "A language of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "enum": [
+            "auto",
+            "en",
+            "zh",
+            "pl",
+            "nl",
+            "ja",
+            "ko",
+            "ru"
+          ],
+          "default": "auto"
+        },
+        "timeFormat": {
+          "title": "time format",
+          "description": "A time format of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "02 Jan 06"
+        },
+        "shortTimeFormat": {
+          "title": "short time format",
+          "description": "A short time format of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "3:04PM"
+        },
+        "theme": {
+          "title": "theme",
+          "description": "Settings of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "activeBorderColor": {
+              "title": "active border color",
+              "description": "Active border colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "An active border color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "inactiveBorderColor": {
+              "title": "inactive border color",
+              "description": "Inactive border colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "An inactive border color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "searchingActiveBorderColor": {
+              "title": "searching active border color",
+              "description": "Searching active border colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "A searching active border color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "optionsTextColor": {
+              "title": "options text color",
+              "description": "Option text colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "An option text color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "selectedLineBgColor": {
+              "title": "selected line bg color",
+              "description": "Selected line background colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "A selected line background color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "selectedRangeBgColor": {
+              "title": "selected range bg color",
+              "description": "Selected range background colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "A selected range background color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "cherryPickedCommitBgColor": {
+              "title": "cherry picked commit bg color",
+              "description": "Cherry picked commit background colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "A cherry picked commit background color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "cherryPickedCommitFgColor": {
+              "title": "cherry picked commit fg color",
+              "description": "Cherry picked commit foreground colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "A cherry picked commit foreground color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "unstagedChangesColor": {
+              "title": "unstaged changes color",
+              "description": "Unstaged changes colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "An unstaged changes color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            },
+            "defaultFgColor": {
+              "title": "default fg color",
+              "description": "Default foreground colors of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "uniqueItems": true,
+              "minItems": 1,
+              "items": {
+                "description": "A default foreground color of the current theme\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+                "$ref": "#/definitions/color"
+              }
+            }
+          },
+          "additionalProperties": false
+        },
+        "commitLength": {
+          "title": "commit length",
+          "description": "Settings of the current commit length\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "show": {
+              "title": "show",
+              "description": "Whether to show the current commit length\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "boolean",
+              "default": true
+            }
+          },
+          "additionalProperties": false
+        },
+        "mouseEvents": {
+          "title": "mouse events",
+          "description": "Whether to enable mouse events of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "skipDiscardChangeWarning": {
+          "title": "skip discard change warning",
+          "description": "Whether to disable change warning of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": false
+        },
+        "skipStashWarning": {
+          "title": "skip stash warning",
+          "description": "Whether to disable stash warning of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": false
+        },
+        "showFileTree": {
+          "title": "show file tree",
+          "description": "Whether to render render files of the current UI in a tree format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "showListFooter": {
+          "title": "show list footer",
+          "description": "Whether to show list footer of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "showRandomTip": {
+          "title": "show random tip",
+          "description": "Whether to show a random tip of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "showBranchCommitHash": {
+          "title": "show branch commit hash",
+          "description": "Whether to show a branch commit hash of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": false
+        },
+        "showBottomLine": {
+          "title": "show bottom line",
+          "description": "Whether to show a bottom line of the current UI unless there is an important information\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "showCommandLog": {
+          "title": "show command log",
+          "description": "Whether to show command log of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "nerdFontsVersion": {
+          "title": "nerd fonts version",
+          "description": "A nerd font version of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "enum": [
+            "2",
+            "3",
+            ""
+          ],
+          "default": ""
+        },
+        "commandLogSize": {
+          "title": "command log size",
+          "description": "A command log size of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "integer",
+          "minimum": 0,
+          "default": 8
+        },
+        "splitDiff": {
+          "title": "split diff",
+          "description": "Whether to skip diff of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "enum": [
+            "auto",
+            "always"
+          ],
+          "default": "auto"
+        },
+        "skipRewordInEditorWarning": {
+          "title": "skip reword in editor warning",
+          "description": "Whether to skip a confirmation before launching a reword editor\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": false
+        },
+        "border": {
+          "title": "border",
+          "description": "A border style of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "enum": [
+            "single",
+            "double",
+            "rounded",
+            "hidden"
+          ],
+          "default": "single"
+        }
+      },
+      "additionalProperties": false
+    }
+  },
+  "additionalProperties": false
+}
\ No newline at end of file

From bd095a790e025c5aa4245f424c8813e2597ef2e8 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Tue, 1 Aug 2023 16:10:24 +1000
Subject: [PATCH 02/27] feat(schema): support 'git' key

---
 schemas/config.json | 196 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 196 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 03b0cbc396b..3023cf4debc 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -346,6 +346,202 @@
         }
       },
       "additionalProperties": false
+    },
+    "git": {
+      "title": "git",
+      "description": "Git settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "object",
+      "properties": {
+        "paging": {
+          "title": "paging",
+          "description": "Pager settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md",
+          "type": "object",
+          "properties": {
+            "colorArg": {
+              "title": "color argument",
+              "description": "A pager color argument\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md",
+              "type": "string",
+              "enum": [
+                "always",
+                "never"
+              ],
+              "default": "always"
+            },
+            "useConfig": {
+              "title": "use config",
+              "description": "Whether to use a config\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md",
+              "type": "boolean",
+              "default": false
+            },
+            "pager": {
+              "title": "pager",
+              "description": "A pager\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md",
+              "type": "string",
+              "minLength": 1,
+              "examples": [
+                "delta --dark --paging=never",
+                "diff-so-fancy",
+                "ydiff -p cat -s --wrap --width={{columnWidth}}"
+              ]
+            }
+          },
+          "additionalProperties": false
+        },
+        "commit": {
+          "title": "commit",
+          "description": "Commit settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "signOff": {
+              "title": "sign off",
+              "description": "Whether to sign commits off\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "boolean",
+              "default": false
+            }
+          },
+          "additionalProperties": false
+        },
+        "merging": {
+          "title": "merging",
+          "description": "Merging settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "manualCommit": {
+              "title": "manual commit",
+              "description": "Whether to use manual commits\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "boolean",
+              "default": false
+            },
+            "args": {
+              "title": "arguments",
+              "description": "Additional CLI arguments for 'git merge'\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "",
+              "examples": [
+                "--no-ff"
+              ]
+            }
+          },
+          "additionalProperties": false
+        },
+        "log": {
+          "title": "log",
+          "description": "Log settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "order": {
+              "title": "order",
+              "description": "A commit order\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "enum": [
+                "date-order",
+                "author-date-order",
+                "topo-order",
+                "default"
+              ],
+              "default": "topo-order"
+            },
+            "showGraph": {
+              "title": "show graph",
+              "description": "Whether to show a graph\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "enum": [
+                "always",
+                "never",
+                "when-maximised"
+              ],
+              "default": "when-maximised"
+            },
+            "showWholeGraph": {
+              "title": "show whole graph",
+              "description": "Whether to show the whole graph\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "boolean",
+              "default": false
+            }
+          },
+          "additionalProperties": false
+        },
+        "skipHookPrefix": {
+          "title": "skip hook prefix",
+          "description": "A prefix to skip\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "WIP"
+        },
+        "mainBranches": {
+          "title": "main branches",
+          "description": "Main branches\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "array",
+          "uniqueItems": true,
+          "items": {
+            "description": "A main branch\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+            "type": "string",
+            "minLength": 1,
+            "examples": [
+              "main",
+              "master"
+            ]
+          },
+          "default": [
+            "main",
+            "master"
+          ]
+        },
+        "autoFetch": {
+          "title": "auto fetch",
+          "description": "Whether to automatically fetch\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "autoRefresh": {
+          "title": "auto refresh",
+          "description": "Whether to automatically refresh\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "fetchAll": {
+          "title": "fetch all",
+          "description": "Whether to fetch everything\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
+        "branchLogCmd": {
+          "title": "branch log cmd",
+          "description": "A log command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --"
+        },
+        "allBranchesLogCmd": {
+          "title": "all branches log cmd",
+          "description": "A log command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium"
+        },
+        "overrideGpg": {
+          "title": "override gpg",
+          "description": "Whether not to spawn a separate process while using GPG\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": false
+        },
+        "disableForcePushing": {
+          "title": "disable force pushing",
+          "description": "Whether to disable force pushing\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": false
+        },
+        "parseEmoji": {
+          "title": "parse emoji",
+          "description": "Whether to parse emoji\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": false
+        },
+        "diffContextSize": {
+          "title": "diff context size",
+          "description": "how many lines of context are shown around a change in diffs\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "integer",
+          "default": 3
+        }
+      },
+      "additionalProperties": false
     }
   },
   "additionalProperties": false

From 975d1e81c0f30bebb39819d215fc87c760fcbbd2 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Tue, 1 Aug 2023 16:12:21 +1000
Subject: [PATCH 03/27] feat(schema): simplify descriptions

---
 schemas/config.json | 44 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index 3023cf4debc..24757980060 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -26,18 +26,18 @@
       ]
     }
   },
-  "title": "settings",
-  "description": "Settings of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+  "title": "ui settings",
+  "description": "Global UI settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
   "type": "object",
   "properties": {
     "gui": {
       "title": "gui",
-      "description": "Settings of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "description": "Settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
       "type": "object",
       "properties": {
         "windowSize": {
           "title": "window size",
-          "description": "A window size of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A window size\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "string",
           "enum": [
             "normal",
@@ -48,7 +48,7 @@
         },
         "scrollHeight": {
           "title": "scroll height",
-          "description": "A scroll height of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A scroll height\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "integer",
           "minimum": 1,
           "default": 2
@@ -69,7 +69,7 @@
         },
         "expandFocusedSidePanel": {
           "title": "expand focused side panel",
-          "description": "Whether to expand focused side panel of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to expand focused side panel\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": false
         },
@@ -86,7 +86,7 @@
         },
         "language": {
           "title": "language",
-          "description": "A language of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A language\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "string",
           "enum": [
             "auto",
@@ -102,13 +102,13 @@
         },
         "timeFormat": {
           "title": "time format",
-          "description": "A time format of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A time format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "string",
           "default": "02 Jan 06"
         },
         "shortTimeFormat": {
           "title": "short time format",
-          "description": "A short time format of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A short time format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "string",
           "default": "3:04PM"
         },
@@ -246,61 +246,61 @@
         },
         "mouseEvents": {
           "title": "mouse events",
-          "description": "Whether to enable mouse events of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to enable mouse events\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": true
         },
         "skipDiscardChangeWarning": {
           "title": "skip discard change warning",
-          "description": "Whether to disable change warning of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to disable change warning\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": false
         },
         "skipStashWarning": {
           "title": "skip stash warning",
-          "description": "Whether to disable stash warning of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to disable stash warning\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": false
         },
         "showFileTree": {
           "title": "show file tree",
-          "description": "Whether to render render files of the current UI in a tree format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to render render files in a tree format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": true
         },
         "showListFooter": {
           "title": "show list footer",
-          "description": "Whether to show list footer of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to show list footer\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": true
         },
         "showRandomTip": {
           "title": "show random tip",
-          "description": "Whether to show a random tip of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to show a random tip\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": true
         },
         "showBranchCommitHash": {
           "title": "show branch commit hash",
-          "description": "Whether to show a branch commit hash of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to show a branch commit hash\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": false
         },
         "showBottomLine": {
           "title": "show bottom line",
-          "description": "Whether to show a bottom line of the current UI unless there is an important information\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to show a bottom line unless there is an important information\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": true
         },
         "showCommandLog": {
           "title": "show command log",
-          "description": "Whether to show command log of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to show command log\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": true
         },
         "nerdFontsVersion": {
           "title": "nerd fonts version",
-          "description": "A nerd font version of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A nerd font version\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "string",
           "enum": [
             "2",
@@ -311,14 +311,14 @@
         },
         "commandLogSize": {
           "title": "command log size",
-          "description": "A command log size of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A command log size\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "integer",
           "minimum": 0,
           "default": 8
         },
         "splitDiff": {
           "title": "split diff",
-          "description": "Whether to skip diff of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to skip diff\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "string",
           "enum": [
             "auto",
@@ -334,7 +334,7 @@
         },
         "border": {
           "title": "border",
-          "description": "A border style of the current UI\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A border style\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "string",
           "enum": [
             "single",

From 44f445d04d3ced808c9c90580f1c01d92ef0a29c Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Thu, 3 Aug 2023 15:37:59 +1000
Subject: [PATCH 04/27] fix(schema): colors

---
 schemas/config.json | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index 24757980060..b1a28eb6739 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -6,7 +6,6 @@
       "oneOf": [
         {
           "examples": [
-            "default",
             "black",
             "red",
             "green",
@@ -14,7 +13,12 @@
             "blue",
             "magenta",
             "cyan",
-            "white"
+            "white",
+            "bold",
+            "default",
+            "reverse",
+            "underline",
+            "strikethrough"
           ]
         },
         {

From 21903eec5ce0408f20f4280925ec5136410fe9ba Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Thu, 3 Aug 2023 15:41:52 +1000
Subject: [PATCH 05/27] fix(schema): descriptions

---
 schemas/config.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/schemas/config.json b/schemas/config.json
index b1a28eb6739..38423d9e408 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -31,7 +31,7 @@
     }
   },
   "title": "ui settings",
-  "description": "Global UI settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+  "description": "UI settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
   "type": "object",
   "properties": {
     "gui": {

From 694ba92e1541c15b28a5f11008fadb36dd27e967 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Thu, 3 Aug 2023 17:59:47 +1000
Subject: [PATCH 06/27] feat(schema): support os settings

---
 schemas/config.json | 96 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 96 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 38423d9e408..c8316be658c 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -546,6 +546,102 @@
         }
       },
       "additionalProperties": false
+    },
+    "os": {
+      "title": "os",
+      "description": "OS settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "object",
+      "properties": {
+        "copyToClipboardCmd": {
+          "title": "copy to clipboard cmd",
+          "description": "A copy to clipboard command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "",
+          "examples": [
+            "printf \"\\033]52;c;$(printf {{text}} | base64)\\a\" > /dev/tty"
+          ]
+        },
+        "editPreset": {
+          "title": "edit preset",
+          "description": "An edit preset\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "enum": [
+            "vim",
+            "nvim",
+            "emacs",
+            "nano",
+            "vscode",
+            "sublime",
+            "bbedit",
+            "kakoune",
+            "helix",
+            "xcode"
+          ],
+          "default": ""
+        },
+        "edit": {
+          "title": "edit",
+          "description": "An editor command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "",
+          "examples": [
+            "vim",
+            "nvim",
+            "emacs",
+            "nano",
+            "vscode",
+            "sublime",
+            "bbedit",
+            "kakoune",
+            "helix",
+            "xcode"
+          ]
+        },
+        "editAtLine": {
+          "title": "edit at line",
+          "description": "An editor command to open at specific line\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "",
+          "examples": [
+            "vim +{{line}} {{filename}}",
+            "nvim +{{line}} {{filename}}",
+            "emacs +{{line}} {{filename}}",
+            "nano +{{line}} {{filename}}",
+            "vscode -g {{filename}}:{{line}}",
+            "vscode --goto {{filename}}:{{line}}",
+            "sublime {{filename}}:{{line}}"
+          ]
+        },
+        "editAtLineAndWait": {
+          "title": "edit at line and wait",
+          "description": "An editor command to open at specific line and wait\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": "",
+          "examples": [
+            "vim +{{line}} {{filename}}",
+            "nvim +{{line}} {{filename}}",
+            "emacs +{{line}} {{filename}}",
+            "nano +{{line}} {{filename}}",
+            "vscode -g {{filename}}:{{line}} -w",
+            "vscode --goto {{filename}}:{{line}} --wait",
+            "sublime {{filename}}:{{line}} -w",
+            "sublime {{filename}}:{{line}} --wait"
+          ]
+        },
+        "open": {
+          "title": "open",
+          "description": "An editor command for non-text files\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": ""
+        },
+        "openLink": {
+          "title": "open link",
+          "description": "An open link\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "default": ""
+        }
+      },
+      "additionalProperties": false
     }
   },
   "additionalProperties": false

From 3bab5b5a056270db805f2559fa8abef7d2efb65e Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Thu, 3 Aug 2023 18:10:28 +1000
Subject: [PATCH 07/27] feat(schema): support refresher settings

---
 schemas/config.json | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index c8316be658c..7048780b8d9 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -642,6 +642,28 @@
         }
       },
       "additionalProperties": false
+    },
+    "refresher": {
+      "title": "refresher",
+      "description": "Refresh settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "object",
+      "properties": {
+        "refreshInterval": {
+          "title": "refresh interval",
+          "description": "A file/submodule refresh interval in seconds\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "integer",
+          "minimum": 0,
+          "default": 10
+        },
+        "fetchInterval": {
+          "title": "fetch interval",
+          "description": "A re-fetch interval in seconds\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "integer",
+          "minimum": 0,
+          "default": 60
+        }
+      },
+      "additionalProperties": false
     }
   },
   "additionalProperties": false

From ea384cddbaab8314e9b1f23011df9fc661774d73 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Thu, 3 Aug 2023 18:11:48 +1000
Subject: [PATCH 08/27] feat(schema): use better links for os settings

---
 schemas/config.json | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index 7048780b8d9..a80a14121a4 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -549,12 +549,12 @@
     },
     "os": {
       "title": "os",
-      "description": "OS settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "description": "OS settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing",
       "type": "object",
       "properties": {
         "copyToClipboardCmd": {
           "title": "copy to clipboard cmd",
-          "description": "A copy to clipboard command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "A copy to clipboard command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing",
           "type": "string",
           "default": "",
           "examples": [
@@ -563,7 +563,7 @@
         },
         "editPreset": {
           "title": "edit preset",
-          "description": "An edit preset\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "An edit preset\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing",
           "type": "string",
           "enum": [
             "vim",
@@ -581,7 +581,7 @@
         },
         "edit": {
           "title": "edit",
-          "description": "An editor command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "An editor command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing",
           "type": "string",
           "default": "",
           "examples": [
@@ -599,7 +599,7 @@
         },
         "editAtLine": {
           "title": "edit at line",
-          "description": "An editor command to open at specific line\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "An editor command to open at specific line\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing",
           "type": "string",
           "default": "",
           "examples": [
@@ -614,7 +614,7 @@
         },
         "editAtLineAndWait": {
           "title": "edit at line and wait",
-          "description": "An editor command to open at specific line and wait\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "An editor command to open at specific line and wait\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing",
           "type": "string",
           "default": "",
           "examples": [
@@ -630,7 +630,7 @@
         },
         "open": {
           "title": "open",
-          "description": "An editor command for non-text files\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "An editor command for non-text files\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing",
           "type": "string",
           "default": ""
         },

From 92ea0e074d176f7b38eb93a01a72763f1558ddcd Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sat, 5 Aug 2023 20:51:13 +1000
Subject: [PATCH 09/27] feat(schema): support update settings

---
 schemas/config.json | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index a80a14121a4..b8b7d799e0c 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -664,6 +664,32 @@
         }
       },
       "additionalProperties": false
+    },
+    "update": {
+      "title": "update",
+      "description": "Update settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "object",
+      "properties": {
+        "method": {
+          "title": "method",
+          "description": "A method\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "string",
+          "enum": [
+            "prompt",
+            "background",
+            "never"
+          ],
+          "default": "prompt"
+        },
+        "days": {
+          "title": "days",
+          "description": "A day count\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "integer",
+          "minimum": 0,
+          "default": 14
+        }
+      },
+      "additionalProperties": false
     }
   },
   "additionalProperties": false

From f4043cbb7306ee459d47823ded444337155bf552 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sat, 5 Aug 2023 21:00:37 +1000
Subject: [PATCH 10/27] feat(schema): support remaining top-level keys

---
 schemas/config.json | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index b8b7d799e0c..372864b5f69 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -690,6 +690,42 @@
         }
       },
       "additionalProperties": false
+    },
+    "confirmOnQuit": {
+      "title": "confirm on quit",
+      "description": "Whether to confirm on on quit\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "boolean",
+      "default": false
+    },
+    "quitOnTopLevelReturn": {
+      "title": "quit on top level return",
+      "description": "Whether to quit on 'esc' press when when there is nothing to cancel/close\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "boolean",
+      "default": false
+    },
+    "disableStartupPopups": {
+      "title": "disable startup popups",
+      "description": "Whether to disable startup popups\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "boolean",
+      "default": false
+    },
+    "notARepository": {
+      "title": "not a repository",
+      "description": "An action for non-repositories\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "string",
+      "enum": [
+        "prompt",
+        "create",
+        "skip",
+        "quit"
+      ],
+      "default": "prompt"
+    },
+    "promptToReturnFromSubprocess": {
+      "title": "prompt to return from subprocess",
+      "description": "Whether to show confirmation on subprocess termination\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "boolean",
+      "default": true
     }
   },
   "additionalProperties": false

From bc619cfed87cd6884c55c5169d2ea8a325c711a2 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sat, 5 Aug 2023 22:06:33 +1000
Subject: [PATCH 11/27] feat(schema): support keybindings

---
 schemas/config.json | 800 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 800 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 372864b5f69..c4d449c0f39 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -726,6 +726,806 @@
       "description": "Whether to show confirmation on subprocess termination\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
       "type": "boolean",
       "default": true
+    },
+    "keybinding": {
+      "title": "keybinding",
+      "description": "Keybinding settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "type": "object",
+      "properties": {
+        "universal": {
+          "title": "universal",
+          "description": "Universal keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "quit": {
+              "title": "quit",
+              "description": "A quit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "q"
+            },
+            "quit-alt1": {
+              "title": "quit-alt1",
+              "description": "A quit-alt1 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-c>"
+            },
+            "return": {
+              "title": "return",
+              "description": "A return keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<esc>"
+            },
+            "quitWithoutChangingDirectory": {
+              "title": "quit without changing directory",
+              "description": "A quit without changing directory keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "Q"
+            },
+            "togglePanel": {
+              "title": "toggle panel",
+              "description": "A toggle panel keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<tab>"
+            },
+            "prevItem": {
+              "title": "prev item",
+              "description": "A previous item keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<up>"
+            },
+            "nextItem": {
+              "title": "next item",
+              "description": "A next item keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<down>"
+            },
+            "prevItem-alt": {
+              "title": "prev item-alt",
+              "description": "A previous item-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "k"
+            },
+            "nextItem-alt": {
+              "title": "next item-alt",
+              "description": "A next item-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "j"
+            },
+            "prevPage": {
+              "title": "prev page",
+              "description": "A previous page keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": ","
+            },
+            "nextPage": {
+              "title": "next page",
+              "description": "A next page keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "."
+            },
+            "gotoTop": {
+              "title": "goto top",
+              "description": "A goto top keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<"
+            },
+            "gotoBottom": {
+              "title": "goto bottom",
+              "description": "A goto bottom keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": ">"
+            },
+            "scrollLeft": {
+              "title": "scroll left",
+              "description": "A scroll left keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "H"
+            },
+            "scrollRight": {
+              "title": "scroll right",
+              "description": "A scroll right keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "L"
+            },
+            "prevBlock": {
+              "title": "prev block",
+              "description": "A previous block keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<left>"
+            },
+            "nextBlock": {
+              "title": "next block",
+              "description": "A next block keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<right>"
+            },
+            "prevBlock-alt": {
+              "title": "prev block-alt",
+              "description": "A previous block-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "h"
+            },
+            "nextBlock-alt": {
+              "title": "next block-alt",
+              "description": "A next block-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "l"
+            },
+            "jumpToBlock": {
+              "title": "jump to block",
+              "description": "A jump to block keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "array",
+              "default": [
+                "1",
+                "2",
+                "3",
+                "4",
+                "5"
+              ]
+            },
+            "nextMatch": {
+              "title": "next match",
+              "description": "A next match keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "n"
+            },
+            "prevMatch": {
+              "title": "prev match",
+              "description": "A previous match keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "N"
+            },
+            "optionMenu": {
+              "title": "option menu",
+              "description": "An option menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "null",
+              "default": null
+            },
+            "optionMenu-alt1": {
+              "title": "option menu-alt1",
+              "description": "An option menu-alt1 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "?"
+            },
+            "select": {
+              "title": "select",
+              "description": "A select keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<space>"
+            },
+            "goInto": {
+              "title": "go into",
+              "description": "A go into keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<enter>"
+            },
+            "openRecentRepos": {
+              "title": "open recent repos",
+              "description": "An open recent repos keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-r>"
+            },
+            "confirm": {
+              "title": "confirm",
+              "description": "A confirm keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<enter>"
+            },
+            "remove": {
+              "title": "remove",
+              "description": "A remove keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "d"
+            },
+            "new": {
+              "title": "new",
+              "description": "A new keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "n"
+            },
+            "edit": {
+              "title": "edit",
+              "description": "A edit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "e"
+            },
+            "openFile": {
+              "title": "open file",
+              "description": "An open file keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "o"
+            },
+            "scrollUpMain": {
+              "title": "scroll up main",
+              "description": "A scroll up main keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<pgup>"
+            },
+            "scrollDownMain": {
+              "title": "scroll down main",
+              "description": "A scroll down main keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<pgdown>"
+            },
+            "scrollUpMain-alt1": {
+              "title": "scroll up main-alt1",
+              "description": "A scroll up main-alt1 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "K"
+            },
+            "scrollDownMain-alt1": {
+              "title": "scroll down main-alt1",
+              "description": "A scroll down main-alt1 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "J"
+            },
+            "scrollUpMain-alt2": {
+              "title": "scroll up main-alt2",
+              "description": "A scroll up main-alt2 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-u>"
+            },
+            "scrollDownMain-alt2": {
+              "title": "scroll down main-alt2",
+              "description": "A scroll down main-alt2 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-d>"
+            },
+            "executeCustomCommand": {
+              "title": "execute custom command",
+              "description": "A execute custom command keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": ":"
+            },
+            "createRebaseOptionsMenu": {
+              "title": "create rebase options menu",
+              "description": "A create rebase options menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "m"
+            },
+            "pushFiles": {
+              "title": "push files",
+              "description": "A push files keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "P"
+            },
+            "pullFiles": {
+              "title": "pull files",
+              "description": "A pull files keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "p"
+            },
+            "refresh": {
+              "title": "refresh",
+              "description": "A refresh keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "R"
+            },
+            "createPatchOptionsMenu": {
+              "title": "create patch options menu",
+              "description": "A create patch options menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-p>"
+            },
+            "nextTab": {
+              "title": "next tab",
+              "description": "A next tab keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "]"
+            },
+            "prevTab": {
+              "title": "prev tab",
+              "description": "A previous tab keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "["
+            },
+            "nextScreenMode": {
+              "title": "next screen mode",
+              "description": "A next screen mode keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "+"
+            },
+            "prevScreenMode": {
+              "title": "prev screen mode",
+              "description": "A previous screen mode keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "_"
+            },
+            "undo": {
+              "title": "undo",
+              "description": "An undo keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "z"
+            },
+            "redo": {
+              "title": "redo",
+              "description": "A redo keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-z>"
+            },
+            "filteringMenu": {
+              "title": "filtering menu",
+              "description": "A filtering menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-s>"
+            },
+            "diffingMenu": {
+              "title": "diffing menu",
+              "description": "A diffing menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "W"
+            },
+            "diffingMenu-alt": {
+              "title": "diffing menu-alt",
+              "description": "A diffing menu-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-e>"
+            },
+            "copyToClipboard": {
+              "title": "copy to clipboard",
+              "description": "A copy to clipboard keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-o>"
+            },
+            "submitEditorText": {
+              "title": "submit editor text",
+              "description": "A submit editor text keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<enter>"
+            },
+            "extrasMenu": {
+              "title": "extras menu",
+              "description": "A extras menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "@"
+            },
+            "toggleWhitespaceInDiffView": {
+              "title": "toggle whitespace in diff view",
+              "description": "A toggle whitespace in diff view keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-w>"
+            },
+            "increaseContextInDiffView": {
+              "title": "increase context in diff view",
+              "description": "A increase context in diff view keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "}"
+            },
+            "decreaseContextInDiffView": {
+              "title": "decrease context in diff view",
+              "description": "A decrease context in diff view keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "{"
+            }
+          },
+          "additionalProperties": false
+        },
+        "status": {
+          "title": "status",
+          "description": "Status keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "checkForUpdate": {
+              "title": "check for update",
+              "description": "A check for update keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "u"
+            },
+            "recentRepos": {
+              "title": "recent repos",
+              "description": "A recent repos keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<enter>"
+            }
+          },
+          "additionalProperties": false
+        },
+        "files": {
+          "title": "files",
+          "description": "File keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "commitChanges": {
+              "title": "commit changes",
+              "description": "A commit changes keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "c"
+            },
+            "commitChangesWithoutHook": {
+              "title": "commit changes without hook",
+              "description": "A commit changes without hook keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "w"
+            },
+            "amendLastCommit": {
+              "title": "amend last commit",
+              "description": "A amend last commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "A"
+            },
+            "commitChangesWithEditor": {
+              "title": "commit changes with editor",
+              "description": "A commit changes with editor keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "C"
+            },
+            "ignoreFile": {
+              "title": "ignore file",
+              "description": "A ignore file keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "i"
+            },
+            "refreshFiles": {
+              "title": "refresh files",
+              "description": "A refresh files keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "r"
+            },
+            "stashAllChanges": {
+              "title": "stash all changes",
+              "description": "A stash all changes keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "s"
+            },
+            "viewStashOptions": {
+              "title": "view stash options",
+              "description": "A view stash options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "S"
+            },
+            "toggleStagedAll": {
+              "title": "toggle staged all",
+              "description": "A toggle staged all keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "a"
+            },
+            "viewResetOptions": {
+              "title": "view reset options",
+              "description": "A view reset options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "D"
+            },
+            "fetch": {
+              "title": "fetch",
+              "description": "A fetch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "f"
+            },
+            "toggleTreeView": {
+              "title": "toggle tree view",
+              "description": "A toggle tree view keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "`"
+            },
+            "openMergeTool": {
+              "title": "open merge tool",
+              "description": "A open merge tool keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "M"
+            },
+            "openStatusFilter": {
+              "title": "open status filter",
+              "description": "A open status filter keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-b>"
+            }
+          },
+          "additionalProperties": false
+        },
+        "branches": {
+          "title": "branches",
+          "description": "Branch keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "createPullRequest": {
+              "title": "create pull request",
+              "description": "A create pull request keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "o"
+            },
+            "viewPullRequestOptions": {
+              "title": "view pull request options",
+              "description": "A view pull request options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "O"
+            },
+            "checkoutBranchByName": {
+              "title": "checkout branch by name",
+              "description": "A checkout branch by name keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "c"
+            },
+            "forceCheckoutBranch": {
+              "title": "force checkout branch",
+              "description": "A force checkout branch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "F"
+            },
+            "rebaseBranch": {
+              "title": "rebase branch",
+              "description": "A rebase branch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "r"
+            },
+            "renameBranch": {
+              "title": "rename branch",
+              "description": "A rename branch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "R"
+            },
+            "mergeIntoCurrentBranch": {
+              "title": "merge into current branch",
+              "description": "A merge into current branch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "M"
+            },
+            "viewGitFlowOptions": {
+              "title": "view git flow options",
+              "description": "A view git flow options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "i"
+            },
+            "fastForward": {
+              "title": "fast forward",
+              "description": "A fast forward keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "f"
+            },
+            "createTag": {
+              "title": "create tag",
+              "description": "A create tag keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "T"
+            },
+            "pushTag": {
+              "title": "push tag",
+              "description": "A push tag keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "P"
+            },
+            "setUpstream": {
+              "title": "set upstream",
+              "description": "A set upstream keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "u"
+            },
+            "fetchRemote": {
+              "title": "fetch remote",
+              "description": "A fetch remote keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "f"
+            }
+          },
+          "additionalProperties": false
+        },
+        "commits": {
+          "title": "commits",
+          "description": "Commit keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "squashDown": {
+              "title": "squash down",
+              "description": "A squash down keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "s"
+            },
+            "renameCommit": {
+              "title": "rename commit",
+              "description": "A rename commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "r"
+            },
+            "renameCommitWithEditor": {
+              "title": "rename commit with editor",
+              "description": "A rename commit with editor keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "R"
+            },
+            "viewResetOptions": {
+              "title": "view reset options",
+              "description": "A view reset options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "g"
+            },
+            "markCommitAsFixup": {
+              "title": "mark commit as fixup",
+              "description": "A mark commit as fixup keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "f"
+            },
+            "createFixupCommit": {
+              "title": "create fixup commit",
+              "description": "A create fixup commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "F"
+            },
+            "squashAboveCommits": {
+              "title": "squash above commits",
+              "description": "A squash above commits keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "S"
+            },
+            "moveDownCommit": {
+              "title": "move down commit",
+              "description": "A move down commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-j>"
+            },
+            "moveUpCommit": {
+              "title": "move up commit",
+              "description": "A move up commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-k>"
+            },
+            "amendToCommit": {
+              "title": "amend to commit",
+              "description": "A amend to commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "A"
+            },
+            "pickCommit": {
+              "title": "pick commit",
+              "description": "A pick commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "p"
+            },
+            "revertCommit": {
+              "title": "revert commit",
+              "description": "A revert commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "t"
+            },
+            "cherryPickCopy": {
+              "title": "cherry pick copy",
+              "description": "A cherry pick copy keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "c"
+            },
+            "cherryPickCopyRange": {
+              "title": "cherry pick copy range",
+              "description": "A cherry pick copy range keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "C"
+            },
+            "pasteCommits": {
+              "title": "paste commits",
+              "description": "A paste commits keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "v"
+            },
+            "tagCommit": {
+              "title": "tag commit",
+              "description": "A tag commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "T"
+            },
+            "checkoutCommit": {
+              "title": "checkout commit",
+              "description": "A checkout commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<space>"
+            },
+            "resetCherryPick": {
+              "title": "reset cherry pick",
+              "description": "A reset cherry pick keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-R>"
+            },
+            "copyCommitMessageToClipboard": {
+              "title": "copy commit message to clipboard",
+              "description": "A copy commit message to clipboard keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-y>"
+            },
+            "openLogMenu": {
+              "title": "open log menu",
+              "description": "A open log menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "<c-l>"
+            },
+            "viewBisectOptions": {
+              "title": "view bisect options",
+              "description": "A view bisect options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "b"
+            }
+          },
+          "additionalProperties": false
+        },
+        "stash": {
+          "title": "stash",
+          "description": "Stash keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "popStash": {
+              "title": "pop stash",
+              "description": "A pop stash keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "g"
+            },
+            "renameStash": {
+              "title": "rename stash",
+              "description": "A rename stash keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "r"
+            }
+          },
+          "additionalProperties": false
+        },
+        "commitFiles": {
+          "title": "commit files",
+          "description": "Commit file keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "checkoutCommitFile": {
+              "title": "checkout commit file",
+              "description": "A checkout commit file keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "c"
+            }
+          },
+          "additionalProperties": false
+        },
+        "main": {
+          "title": "main",
+          "description": "Main keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "toggleDragSelect": {
+              "title": "toggle drag select",
+              "description": "A toggle drag select keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "v"
+            },
+            "toggleDragSelect-alt": {
+              "title": "toggle drag select-alt",
+              "description": "A toggle drag select-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "V"
+            },
+            "toggleSelectHunk": {
+              "title": "toggle select hunk",
+              "description": "A toggle select hunk keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "a"
+            },
+            "pickBothHunks": {
+              "title": "pick both hunks",
+              "description": "A pick both hunks keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "b"
+            }
+          },
+          "additionalProperties": false
+        },
+        "submodules": {
+          "title": "submodules",
+          "description": "Submodules keybindings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "object",
+          "properties": {
+            "init": {
+              "title": "init",
+              "description": "An init keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "i"
+            },
+            "update": {
+              "title": "update",
+              "description": "An update keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "u"
+            },
+            "bulkMenu": {
+              "title": "bulk menu",
+              "description": "A bulk menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+              "type": "string",
+              "default": "b"
+            }
+          },
+          "additionalProperties": false
+        }
+      },
+      "additionalProperties": false
     }
   },
   "additionalProperties": false

From ae87be3e6b73c329d17a5728658e3ce7b3ca30f7 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sat, 5 Aug 2023 22:17:06 +1000
Subject: [PATCH 12/27] fix(schema): color definition

---
 schemas/config.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/schemas/config.json b/schemas/config.json
index c4d449c0f39..98bf4b3b9a0 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -5,7 +5,7 @@
       "type": "string",
       "oneOf": [
         {
-          "examples": [
+          "enum": [
             "black",
             "red",
             "green",

From 76c20fc7320940486cc388c292e84cb760d4f4a2 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sat, 5 Aug 2023 22:18:59 +1000
Subject: [PATCH 13/27] feat(schema): support settings for custom colors

---
 schemas/config.json | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 98bf4b3b9a0..e5f43b10619 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -347,6 +347,39 @@
             "hidden"
           ],
           "default": "single"
+        },
+        "authorColors": {
+          "title": "author colors",
+          "description": "Author colors",
+          "type": "object",
+          "properties": {
+            "*": {
+              "title": "author color",
+              "description": "An author color",
+              "$ref": "#/definitions/color"
+            }
+          },
+          "patternProperties": {
+            ".": {
+              "title": "author color",
+              "description": "An author color",
+              "$ref": "#/definitions/color"
+            }
+          },
+          "additionalProperties": false
+        },
+        "branchColors": {
+          "title": "branch colors",
+          "description": "Branch colors",
+          "type": "object",
+          "patternProperties": {
+            ".": {
+              "title": "branch color",
+              "description": "A branch color",
+              "$ref": "#/definitions/color"
+            }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false

From 56db49e2cb7ea832f8bb7f5be1837d3327169dc3 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sat, 5 Aug 2023 22:23:26 +1000
Subject: [PATCH 14/27] fix(schema): permit disabling keybindings

---
 schemas/config.json | 245 +++++++++++++++++++++++---------------------
 1 file changed, 128 insertions(+), 117 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index e5f43b10619..430173d122e 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -28,6 +28,17 @@
           ]
         }
       ]
+    },
+    "keybinding": {
+      "type": [
+        "string",
+        "null"
+      ],
+      "examples": [
+        "<enter>",
+        "<c-b>",
+        "g"
+      ]
     }
   },
   "title": "ui settings",
@@ -773,115 +784,115 @@
             "quit": {
               "title": "quit",
               "description": "A quit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "q"
             },
             "quit-alt1": {
               "title": "quit-alt1",
               "description": "A quit-alt1 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-c>"
             },
             "return": {
               "title": "return",
               "description": "A return keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<esc>"
             },
             "quitWithoutChangingDirectory": {
               "title": "quit without changing directory",
               "description": "A quit without changing directory keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "Q"
             },
             "togglePanel": {
               "title": "toggle panel",
               "description": "A toggle panel keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<tab>"
             },
             "prevItem": {
               "title": "prev item",
               "description": "A previous item keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<up>"
             },
             "nextItem": {
               "title": "next item",
               "description": "A next item keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<down>"
             },
             "prevItem-alt": {
               "title": "prev item-alt",
               "description": "A previous item-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "k"
             },
             "nextItem-alt": {
               "title": "next item-alt",
               "description": "A next item-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "j"
             },
             "prevPage": {
               "title": "prev page",
               "description": "A previous page keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": ","
             },
             "nextPage": {
               "title": "next page",
               "description": "A next page keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "."
             },
             "gotoTop": {
               "title": "goto top",
               "description": "A goto top keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<"
             },
             "gotoBottom": {
               "title": "goto bottom",
               "description": "A goto bottom keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": ">"
             },
             "scrollLeft": {
               "title": "scroll left",
               "description": "A scroll left keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "H"
             },
             "scrollRight": {
               "title": "scroll right",
               "description": "A scroll right keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "L"
             },
             "prevBlock": {
               "title": "prev block",
               "description": "A previous block keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<left>"
             },
             "nextBlock": {
               "title": "next block",
               "description": "A next block keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<right>"
             },
             "prevBlock-alt": {
               "title": "prev block-alt",
               "description": "A previous block-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "h"
             },
             "nextBlock-alt": {
               "title": "next block-alt",
               "description": "A next block-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "l"
             },
             "jumpToBlock": {
@@ -899,13 +910,13 @@
             "nextMatch": {
               "title": "next match",
               "description": "A next match keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "n"
             },
             "prevMatch": {
               "title": "prev match",
               "description": "A previous match keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "N"
             },
             "optionMenu": {
@@ -917,217 +928,217 @@
             "optionMenu-alt1": {
               "title": "option menu-alt1",
               "description": "An option menu-alt1 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "?"
             },
             "select": {
               "title": "select",
               "description": "A select keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<space>"
             },
             "goInto": {
               "title": "go into",
               "description": "A go into keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<enter>"
             },
             "openRecentRepos": {
               "title": "open recent repos",
               "description": "An open recent repos keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-r>"
             },
             "confirm": {
               "title": "confirm",
               "description": "A confirm keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<enter>"
             },
             "remove": {
               "title": "remove",
               "description": "A remove keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "d"
             },
             "new": {
               "title": "new",
               "description": "A new keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "n"
             },
             "edit": {
               "title": "edit",
               "description": "A edit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "e"
             },
             "openFile": {
               "title": "open file",
               "description": "An open file keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "o"
             },
             "scrollUpMain": {
               "title": "scroll up main",
               "description": "A scroll up main keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<pgup>"
             },
             "scrollDownMain": {
               "title": "scroll down main",
               "description": "A scroll down main keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<pgdown>"
             },
             "scrollUpMain-alt1": {
               "title": "scroll up main-alt1",
               "description": "A scroll up main-alt1 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "K"
             },
             "scrollDownMain-alt1": {
               "title": "scroll down main-alt1",
               "description": "A scroll down main-alt1 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "J"
             },
             "scrollUpMain-alt2": {
               "title": "scroll up main-alt2",
               "description": "A scroll up main-alt2 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-u>"
             },
             "scrollDownMain-alt2": {
               "title": "scroll down main-alt2",
               "description": "A scroll down main-alt2 keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-d>"
             },
             "executeCustomCommand": {
               "title": "execute custom command",
               "description": "A execute custom command keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": ":"
             },
             "createRebaseOptionsMenu": {
               "title": "create rebase options menu",
               "description": "A create rebase options menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "m"
             },
             "pushFiles": {
               "title": "push files",
               "description": "A push files keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "P"
             },
             "pullFiles": {
               "title": "pull files",
               "description": "A pull files keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "p"
             },
             "refresh": {
               "title": "refresh",
               "description": "A refresh keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "R"
             },
             "createPatchOptionsMenu": {
               "title": "create patch options menu",
               "description": "A create patch options menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-p>"
             },
             "nextTab": {
               "title": "next tab",
               "description": "A next tab keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "]"
             },
             "prevTab": {
               "title": "prev tab",
               "description": "A previous tab keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "["
             },
             "nextScreenMode": {
               "title": "next screen mode",
               "description": "A next screen mode keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "+"
             },
             "prevScreenMode": {
               "title": "prev screen mode",
               "description": "A previous screen mode keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "_"
             },
             "undo": {
               "title": "undo",
               "description": "An undo keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "z"
             },
             "redo": {
               "title": "redo",
               "description": "A redo keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-z>"
             },
             "filteringMenu": {
               "title": "filtering menu",
               "description": "A filtering menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-s>"
             },
             "diffingMenu": {
               "title": "diffing menu",
               "description": "A diffing menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "W"
             },
             "diffingMenu-alt": {
               "title": "diffing menu-alt",
               "description": "A diffing menu-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-e>"
             },
             "copyToClipboard": {
               "title": "copy to clipboard",
               "description": "A copy to clipboard keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-o>"
             },
             "submitEditorText": {
               "title": "submit editor text",
               "description": "A submit editor text keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<enter>"
             },
             "extrasMenu": {
               "title": "extras menu",
               "description": "A extras menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "@"
             },
             "toggleWhitespaceInDiffView": {
               "title": "toggle whitespace in diff view",
               "description": "A toggle whitespace in diff view keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-w>"
             },
             "increaseContextInDiffView": {
               "title": "increase context in diff view",
               "description": "A increase context in diff view keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "}"
             },
             "decreaseContextInDiffView": {
               "title": "decrease context in diff view",
               "description": "A decrease context in diff view keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "{"
             }
           },
@@ -1141,13 +1152,13 @@
             "checkForUpdate": {
               "title": "check for update",
               "description": "A check for update keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "u"
             },
             "recentRepos": {
               "title": "recent repos",
               "description": "A recent repos keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<enter>"
             }
           },
@@ -1161,85 +1172,85 @@
             "commitChanges": {
               "title": "commit changes",
               "description": "A commit changes keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "c"
             },
             "commitChangesWithoutHook": {
               "title": "commit changes without hook",
               "description": "A commit changes without hook keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "w"
             },
             "amendLastCommit": {
               "title": "amend last commit",
               "description": "A amend last commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "A"
             },
             "commitChangesWithEditor": {
               "title": "commit changes with editor",
               "description": "A commit changes with editor keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "C"
             },
             "ignoreFile": {
               "title": "ignore file",
               "description": "A ignore file keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "i"
             },
             "refreshFiles": {
               "title": "refresh files",
               "description": "A refresh files keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "r"
             },
             "stashAllChanges": {
               "title": "stash all changes",
               "description": "A stash all changes keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "s"
             },
             "viewStashOptions": {
               "title": "view stash options",
               "description": "A view stash options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "S"
             },
             "toggleStagedAll": {
               "title": "toggle staged all",
               "description": "A toggle staged all keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "a"
             },
             "viewResetOptions": {
               "title": "view reset options",
               "description": "A view reset options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "D"
             },
             "fetch": {
               "title": "fetch",
               "description": "A fetch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "f"
             },
             "toggleTreeView": {
               "title": "toggle tree view",
               "description": "A toggle tree view keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "`"
             },
             "openMergeTool": {
               "title": "open merge tool",
               "description": "A open merge tool keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "M"
             },
             "openStatusFilter": {
               "title": "open status filter",
               "description": "A open status filter keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-b>"
             }
           },
@@ -1253,79 +1264,79 @@
             "createPullRequest": {
               "title": "create pull request",
               "description": "A create pull request keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "o"
             },
             "viewPullRequestOptions": {
               "title": "view pull request options",
               "description": "A view pull request options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "O"
             },
             "checkoutBranchByName": {
               "title": "checkout branch by name",
               "description": "A checkout branch by name keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "c"
             },
             "forceCheckoutBranch": {
               "title": "force checkout branch",
               "description": "A force checkout branch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "F"
             },
             "rebaseBranch": {
               "title": "rebase branch",
               "description": "A rebase branch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "r"
             },
             "renameBranch": {
               "title": "rename branch",
               "description": "A rename branch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "R"
             },
             "mergeIntoCurrentBranch": {
               "title": "merge into current branch",
               "description": "A merge into current branch keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "M"
             },
             "viewGitFlowOptions": {
               "title": "view git flow options",
               "description": "A view git flow options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "i"
             },
             "fastForward": {
               "title": "fast forward",
               "description": "A fast forward keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "f"
             },
             "createTag": {
               "title": "create tag",
               "description": "A create tag keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "T"
             },
             "pushTag": {
               "title": "push tag",
               "description": "A push tag keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "P"
             },
             "setUpstream": {
               "title": "set upstream",
               "description": "A set upstream keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "u"
             },
             "fetchRemote": {
               "title": "fetch remote",
               "description": "A fetch remote keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "f"
             }
           },
@@ -1339,127 +1350,127 @@
             "squashDown": {
               "title": "squash down",
               "description": "A squash down keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "s"
             },
             "renameCommit": {
               "title": "rename commit",
               "description": "A rename commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "r"
             },
             "renameCommitWithEditor": {
               "title": "rename commit with editor",
               "description": "A rename commit with editor keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "R"
             },
             "viewResetOptions": {
               "title": "view reset options",
               "description": "A view reset options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "g"
             },
             "markCommitAsFixup": {
               "title": "mark commit as fixup",
               "description": "A mark commit as fixup keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "f"
             },
             "createFixupCommit": {
               "title": "create fixup commit",
               "description": "A create fixup commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "F"
             },
             "squashAboveCommits": {
               "title": "squash above commits",
               "description": "A squash above commits keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "S"
             },
             "moveDownCommit": {
               "title": "move down commit",
               "description": "A move down commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-j>"
             },
             "moveUpCommit": {
               "title": "move up commit",
               "description": "A move up commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-k>"
             },
             "amendToCommit": {
               "title": "amend to commit",
               "description": "A amend to commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "A"
             },
             "pickCommit": {
               "title": "pick commit",
               "description": "A pick commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "p"
             },
             "revertCommit": {
               "title": "revert commit",
               "description": "A revert commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "t"
             },
             "cherryPickCopy": {
               "title": "cherry pick copy",
               "description": "A cherry pick copy keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "c"
             },
             "cherryPickCopyRange": {
               "title": "cherry pick copy range",
               "description": "A cherry pick copy range keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "C"
             },
             "pasteCommits": {
               "title": "paste commits",
               "description": "A paste commits keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "v"
             },
             "tagCommit": {
               "title": "tag commit",
               "description": "A tag commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "T"
             },
             "checkoutCommit": {
               "title": "checkout commit",
               "description": "A checkout commit keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<space>"
             },
             "resetCherryPick": {
               "title": "reset cherry pick",
               "description": "A reset cherry pick keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-R>"
             },
             "copyCommitMessageToClipboard": {
               "title": "copy commit message to clipboard",
               "description": "A copy commit message to clipboard keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-y>"
             },
             "openLogMenu": {
               "title": "open log menu",
               "description": "A open log menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "<c-l>"
             },
             "viewBisectOptions": {
               "title": "view bisect options",
               "description": "A view bisect options keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "b"
             }
           },
@@ -1473,13 +1484,13 @@
             "popStash": {
               "title": "pop stash",
               "description": "A pop stash keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "g"
             },
             "renameStash": {
               "title": "rename stash",
               "description": "A rename stash keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "r"
             }
           },
@@ -1493,7 +1504,7 @@
             "checkoutCommitFile": {
               "title": "checkout commit file",
               "description": "A checkout commit file keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "c"
             }
           },
@@ -1507,25 +1518,25 @@
             "toggleDragSelect": {
               "title": "toggle drag select",
               "description": "A toggle drag select keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "v"
             },
             "toggleDragSelect-alt": {
               "title": "toggle drag select-alt",
               "description": "A toggle drag select-alt keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "V"
             },
             "toggleSelectHunk": {
               "title": "toggle select hunk",
               "description": "A toggle select hunk keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "a"
             },
             "pickBothHunks": {
               "title": "pick both hunks",
               "description": "A pick both hunks keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "b"
             }
           },
@@ -1539,19 +1550,19 @@
             "init": {
               "title": "init",
               "description": "An init keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "i"
             },
             "update": {
               "title": "update",
               "description": "An update keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "u"
             },
             "bulkMenu": {
               "title": "bulk menu",
               "description": "A bulk menu keybinding\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
-              "type": "string",
+              "$ref": "#/definitions/keybinding",
               "default": "b"
             }
           },

From 02866ab1588548c90704da898ad0bb28ed34945d Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sat, 5 Aug 2023 22:29:36 +1000
Subject: [PATCH 15/27] feat(schema): support services

---
 schemas/config.json | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 430173d122e..a9595a96bf2 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -1570,6 +1570,20 @@
         }
       },
       "additionalProperties": false
+    },
+    "services": {
+      "title": "services",
+      "description": "Service settings",
+      "type": "object",
+      "patternProperties": {
+        ".": {
+          "title": "service",
+          "description": "A service",
+          "type": "string",
+          "pattern": "^[^:]+:[^:]+$"
+        }
+      },
+      "additionalProperties": false
     }
   },
   "additionalProperties": false

From b9719b4b2bba7de63a8b7176f2579202ee50d1eb Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sat, 5 Aug 2023 22:35:20 +1000
Subject: [PATCH 16/27] feat(schema): support commit prefixes

---
 schemas/config.json | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index a9595a96bf2..7d82b9b38b6 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -587,6 +587,44 @@
           "description": "how many lines of context are shown around a change in diffs\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "integer",
           "default": 3
+        },
+        "commitPrefixes": {
+          "title": "commit prefixes",
+          "description": "Commit prefixes",
+          "type": "object",
+          "patternProperties": {
+            ".": {
+              "title": "repository path",
+              "description": "A repository path",
+              "type": "object",
+              "required": [
+                "pattern",
+                "replace"
+              ],
+              "properties": {
+                "pattern": {
+                  "title": "pattern",
+                  "description": "A pattern",
+                  "type": "string",
+                  "minLength": 1,
+                  "examples": [
+                    "^\\w+\\/(\\w+-\\w+).*"
+                  ]
+                },
+                "replace": {
+                  "title": "replace",
+                  "description": "A replacement",
+                  "type": "string",
+                  "minLength": 1,
+                  "examples": [
+                    "[$1] "
+                  ]
+                }
+              },
+              "additionalProperties": false
+            }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false

From 6388b0dbea0932f0d662766c0fa00bf37974336b Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Sun, 6 Aug 2023 04:40:01 +1000
Subject: [PATCH 17/27] feat(schema): add links to docs

---
 schemas/config.json | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index 7d82b9b38b6..3cc5bd1440a 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -361,19 +361,19 @@
         },
         "authorColors": {
           "title": "author colors",
-          "description": "Author colors",
+          "description": "Author colors\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-author-color",
           "type": "object",
           "properties": {
             "*": {
               "title": "author color",
-              "description": "An author color",
+              "description": "An author color\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-author-color",
               "$ref": "#/definitions/color"
             }
           },
           "patternProperties": {
             ".": {
               "title": "author color",
-              "description": "An author color",
+              "description": "An author color\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-author-color",
               "$ref": "#/definitions/color"
             }
           },
@@ -381,12 +381,12 @@
         },
         "branchColors": {
           "title": "branch colors",
-          "description": "Branch colors",
+          "description": "Branch colors\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-branch-color",
           "type": "object",
           "patternProperties": {
             ".": {
               "title": "branch color",
-              "description": "A branch color",
+              "description": "A branch color\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-branch-color",
               "$ref": "#/definitions/color"
             }
           },
@@ -590,12 +590,12 @@
         },
         "commitPrefixes": {
           "title": "commit prefixes",
-          "description": "Commit prefixes",
+          "description": "Commit prefixes\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix",
           "type": "object",
           "patternProperties": {
             ".": {
               "title": "repository path",
-              "description": "A repository path",
+              "description": "A repository path\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix",
               "type": "object",
               "required": [
                 "pattern",
@@ -604,7 +604,7 @@
               "properties": {
                 "pattern": {
                   "title": "pattern",
-                  "description": "A pattern",
+                  "description": "A pattern\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix",
                   "type": "string",
                   "minLength": 1,
                   "examples": [
@@ -613,7 +613,7 @@
                 },
                 "replace": {
                   "title": "replace",
-                  "description": "A replacement",
+                  "description": "A replacement\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix",
                   "type": "string",
                   "minLength": 1,
                   "examples": [
@@ -1611,12 +1611,12 @@
     },
     "services": {
       "title": "services",
-      "description": "Service settings",
+      "description": "Service settings\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-pull-request-urls",
       "type": "object",
       "patternProperties": {
         ".": {
           "title": "service",
-          "description": "A service",
+          "description": "A service\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-pull-request-urls",
           "type": "string",
           "pattern": "^[^:]+:[^:]+$"
         }

From f3af388eb65c1a13251cce20dce18c6bc8a64c9a Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 00:55:44 +1000
Subject: [PATCH 18/27] feat(schema): support top custom command keys

---
 schemas/config.json | 104 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 104 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 3cc5bd1440a..6cd49e1155b 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -1622,6 +1622,110 @@
         }
       },
       "additionalProperties": false
+    },
+    "customCommands": {
+      "title": "custom commands",
+      "description": "Custom commands\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+      "type": "object",
+      "required": [
+        "key",
+        "command",
+        "context"
+      ],
+      "properties": {
+        "key": {
+          "title": "key",
+          "description": "A command trigger\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "$ref": "#/definitions/keybinding"
+        },
+        "command": {
+          "title": "command",
+          "description": "A command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "string",
+          "default": "",
+          "examples": [
+            "git fetch {{.Form.Remote}} {{.Form.Branch}} && git checkout FETCH_HEAD"
+          ]
+        },
+        "context": {
+          "title": "context",
+          "description": "A context\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "string",
+          "enum": [
+            "status",
+            "files",
+            "worktrees",
+            "localBranches",
+            "remotes",
+            "remoteBranches",
+            "tags",
+            "commits",
+            "reflogCommits",
+            "subCommits",
+            "commitFiles",
+            "stash",
+            "global"
+          ]
+        },
+        "subprocess": {
+          "title": "subprocess",
+          "description": "Whether to run command in subprocess\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "boolean",
+          "default": false
+        },
+        "prompts": {
+          "title": "prompts",
+          "description": "Prompts before running a command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "object",
+          "properties": {},
+          "additionalProperties": false
+        },
+        "loadingText": {
+          "title": "loading text",
+          "description": "Text to display while waiting for command to finish\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "string",
+          "default": "",
+          "examples": [
+            "Loading..."
+          ]
+        },
+        "description": {
+          "title": "description",
+          "description": "A description\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "string",
+          "default": "",
+          "examples": [
+            "Checkout a remote branch as FETCH_HEAD"
+          ]
+        },
+        "stream": {
+          "title": "stream",
+          "description": "Whether to stream command output to Command Log panel\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "boolean",
+          "default": false
+        },
+        "showOutput": {
+          "title": "show output",
+          "description": "Whether to show the command output in popup\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "boolean",
+          "default": false
+        },
+        "after": {
+          "title": "after",
+          "description": "Actions to take after the command has completed\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+          "type": "object",
+          "properties": {
+            "checkForConflicts": {
+              "title": "check for conflicts",
+              "description": "Whether to check for conflicts before running command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+              "type": "boolean",
+              "default": false
+            }
+          },
+          "additionalProperties": false
+        }
+      },
+      "additionalProperties": false
     }
   },
   "additionalProperties": false

From c19a69624c88355f5d3d80de2f3cae53e91a27e0 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 01:27:48 +1000
Subject: [PATCH 19/27] feat(schema): support input prompt

---
 schemas/config.json | 116 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 113 insertions(+), 3 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index 6cd49e1155b..34092dd270f 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -39,6 +39,33 @@
         "<c-b>",
         "g"
       ]
+    },
+    "custom-commands-prompts-type-property": {
+      "title": "type",
+      "description": "A type\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#common-fields",
+      "type": "string",
+      "enum": [
+        "input",
+        "confirm",
+        "menu",
+        "menuFromCommand"
+      ]
+    },
+    "custom-commands-prompts-title-property": {
+      "title": "title",
+      "description": "A title\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#common-fields",
+      "type": "string",
+      "examples": [
+        "Remote branch:"
+      ]
+    },
+    "custom-commands-prompts-key-property": {
+      "title": "key",
+      "description": "A key\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#common-fields",
+      "type": "string",
+      "examples": [
+        "Branch"
+      ]
     }
   },
   "title": "ui settings",
@@ -1676,9 +1703,92 @@
         "prompts": {
           "title": "prompts",
           "description": "Prompts before running a command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "object",
-          "properties": {},
-          "additionalProperties": false
+          "type": "array",
+          "items": {
+            "description": "A prompt before running a command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "object",
+            "properties": {
+              "type": {
+                "$ref": "#/definitions/custom-commands-prompts-type-property"
+              },
+              "title": {
+                "$ref": "#/definitions/custom-commands-prompts-title-property"
+              },
+              "key": {
+                "$ref": "#/definitions/custom-commands-prompts-key-property"
+              }
+            },
+            "allOf": [
+              {
+                "if": {
+                  "properties": {
+                    "type": {
+                      "const": "input"
+                    }
+                  }
+                },
+                "then": {
+                  "properties": {
+                    "type": {
+                      "$ref": "#/definitions/custom-commands-prompts-type-property"
+                    },
+                    "title": {
+                      "$ref": "#/definitions/custom-commands-prompts-title-property"
+                    },
+                    "key": {
+                      "$ref": "#/definitions/custom-commands-prompts-key-property"
+                    },
+                    "initialValue": {
+                      "title": "initial value",
+                      "description": "An initial value\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                      "type": "string"
+                    },
+                    "suggestions": {
+                      "title": "suggestions",
+                      "description": "Whether to show suggestions as the input is entered\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                      "type": "object",
+                      "oneOf": [
+                        {
+                          "properties": {
+                            "preset": {
+                              "title": "preset",
+                              "description": "A preset\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                              "type": "string",
+                              "enum": [
+                                "authors",
+                                "branches",
+                                "files",
+                                "refs",
+                                "remotes",
+                                "remoteBranches",
+                                "tags"
+                              ]
+                            }
+                          },
+                          "additionalProperties": false
+                        },
+                        {
+                          "properties": {
+                            "command": {
+                              "title": "command",
+                              "description": "A command where each line in the output is suggestion\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                              "type": "string",
+                              "default": "",
+                              "examples": [
+                                "git branch --format='%(refname:short)'"
+                              ]
+                            }
+                          },
+                          "additionalProperties": false
+                        }
+                      ]
+                    }
+                  },
+                  "additionalProperties": false
+                }
+              }
+            ]
+          }
         },
         "loadingText": {
           "title": "loading text",

From 8242d270f2eb7c9982aa58319e0d250808c134ae Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 01:31:08 +1000
Subject: [PATCH 20/27] feat(schema): require top keys for prompt

---
 schemas/config.json | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 34092dd270f..3b909183ca6 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -1707,6 +1707,11 @@
           "items": {
             "description": "A prompt before running a command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
             "type": "object",
+            "required": [
+              "type",
+              "title",
+              "key"
+            ],
             "properties": {
               "type": {
                 "$ref": "#/definitions/custom-commands-prompts-type-property"

From 14c18b3e933292ee3b753fb2689413c9110b0a25 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 01:33:06 +1000
Subject: [PATCH 21/27] feat(schema): support confirm prompt

---
 schemas/config.json | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 3b909183ca6..616668accd0 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -1791,6 +1791,37 @@
                   },
                   "additionalProperties": false
                 }
+              },
+              {
+                "if": {
+                  "properties": {
+                    "type": {
+                      "const": "confirm"
+                    }
+                  }
+                },
+                "then": {
+                  "properties": {
+                    "type": {
+                      "$ref": "#/definitions/custom-commands-prompts-type-property"
+                    },
+                    "title": {
+                      "$ref": "#/definitions/custom-commands-prompts-title-property"
+                    },
+                    "key": {
+                      "$ref": "#/definitions/custom-commands-prompts-key-property"
+                    },
+                    "body": {
+                      "title": "body",
+                      "description": "A body\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#confirm",
+                      "type": "string",
+                      "examples": [
+                        "Are you sure you want to push to the remote?"
+                      ]
+                    }
+                  },
+                  "additionalProperties": false
+                }
               }
             ]
           }

From b3a1c9c23b68ed29da15d000f4564f3761db3b63 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 01:43:20 +1000
Subject: [PATCH 22/27] feat(schema): support menu prompt

---
 schemas/config.json | 63 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index 616668accd0..e4a475b7b19 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -1822,6 +1822,69 @@
                   },
                   "additionalProperties": false
                 }
+              },
+              {
+                "if": {
+                  "properties": {
+                    "type": {
+                      "const": "menu"
+                    }
+                  }
+                },
+                "then": {
+                  "required": [
+                    "options"
+                  ],
+                  "properties": {
+                    "type": {
+                      "$ref": "#/definitions/custom-commands-prompts-type-property"
+                    },
+                    "title": {
+                      "$ref": "#/definitions/custom-commands-prompts-title-property"
+                    },
+                    "key": {
+                      "$ref": "#/definitions/custom-commands-prompts-key-property"
+                    },
+                    "options": {
+                      "title": "options",
+                      "description": "Options\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
+                      "type": "array",
+                      "uniqueItems": true,
+                      "items": {
+                        "description": "An option",
+                        "type": "object",
+                        "required": [
+                          "value"
+                        ],
+                        "properties": {
+                          "name": {
+                            "title": "name",
+                            "description": "A first label part\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
+                            "type": "string",
+                            "default": ""
+                          },
+                          "description": {
+                            "title": "description",
+                            "description": "A second label part\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
+                            "type": "string",
+                            "default": ""
+                          },
+                          "value": {
+                            "title": "value",
+                            "description": "the value that will be used in the command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
+                            "type": "string",
+                            "minLength": 1,
+                            "examples": [
+                              "feature"
+                            ]
+                          }
+                        },
+                        "additionalProperties": false
+                      }
+                    }
+                  },
+                  "additionalProperties": false
+                }
               }
             ]
           }

From e71bef048c09254cfb6d39d26dc171f5405ff031 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 01:51:02 +1000
Subject: [PATCH 23/27] feat(schema): support menus from commands

---
 schemas/config.json | 62 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index e4a475b7b19..d4119135a52 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -1885,6 +1885,68 @@
                   },
                   "additionalProperties": false
                 }
+              },
+              {
+                "if": {
+                  "properties": {
+                    "type": {
+                      "const": "menuFromCommand"
+                    }
+                  }
+                },
+                "then": {
+                  "required": [
+                    "command"
+                  ],
+                  "properties": {
+                    "type": {
+                      "$ref": "#/definitions/custom-commands-prompts-type-property"
+                    },
+                    "title": {
+                      "$ref": "#/definitions/custom-commands-prompts-title-property"
+                    },
+                    "key": {
+                      "$ref": "#/definitions/custom-commands-prompts-key-property"
+                    },
+                    "command": {
+                      "title": "command",
+                      "description": "A command to generate options\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
+                      "type": "string",
+                      "default": "",
+                      "examples": [
+                        "git branch  -r --list {{.SelectedRemote.Name }}/*"
+                      ]
+                    },
+                    "filter": {
+                      "title": "filter",
+                      "description": "A regex specifying groups which kept from command output\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
+                      "type": "string",
+                      "default": "",
+                      "examples": [
+                        ".*{{.SelectedRemote.Name }}/(?P<branch>.*)"
+                      ]
+                    },
+                    "valueFormat": {
+                      "title": "valueFormat",
+                      "description": "A value format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
+                      "type": "string",
+                      "default": "",
+                      "examples": [
+                        "{{ .branch }}"
+                      ]
+                    },
+                    "labelFormat": {
+                      "title": "labelFormat",
+                      "description": "A label format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
+                      "type": "string",
+                      "default": "",
+                      "examples": [
+                        "{{ .branch | green }}"
+                      ]
+                    }
+                  },
+                  "additionalProperties": false
+                }
               }
             ]
           }

From 32ddbd3246e18d500ba92818860a72172c2fea6f Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 01:58:09 +1000
Subject: [PATCH 24/27] fix(schema): add missing property

---
 schemas/config.json | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/schemas/config.json b/schemas/config.json
index d4119135a52..db527c00535 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -386,6 +386,12 @@
           ],
           "default": "single"
         },
+        "animateExplosion": {
+          "title": "animate explosion",
+          "description": "Whether to show explosion animation when nuking working tree\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "type": "boolean",
+          "default": true
+        },
         "authorColors": {
           "title": "author colors",
           "description": "Author colors\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-author-color",

From eb4e38465e80c46010c6578dbde6f5c2e7724c14 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 01:59:51 +1000
Subject: [PATCH 25/27] fix(schema): description rewording

---
 schemas/config.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index db527c00535..ac2bce578d3 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -388,7 +388,7 @@
         },
         "animateExplosion": {
           "title": "animate explosion",
-          "description": "Whether to show explosion animation when nuking working tree\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+          "description": "Whether to show explosion animation while nuking working tree\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
           "type": "boolean",
           "default": true
         },
@@ -814,7 +814,7 @@
     },
     "quitOnTopLevelReturn": {
       "title": "quit on top level return",
-      "description": "Whether to quit on 'esc' press when when there is nothing to cancel/close\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
+      "description": "Whether to quit on 'esc' press while there is nothing to cancel/close\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#default",
       "type": "boolean",
       "default": false
     },

From 0ff24408ffc8f134e2cb74f7b87772b7612c8fa7 Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 02:01:34 +1000
Subject: [PATCH 26/27] fix(schema): allow empty strings for edit presets

---
 schemas/config.json | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index ac2bce578d3..3f38aa3bcd1 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -680,17 +680,24 @@
           "title": "edit preset",
           "description": "An edit preset\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing",
           "type": "string",
-          "enum": [
-            "vim",
-            "nvim",
-            "emacs",
-            "nano",
-            "vscode",
-            "sublime",
-            "bbedit",
-            "kakoune",
-            "helix",
-            "xcode"
+          "oneOf": [
+            {
+              "enum": [
+                "vim",
+                "nvim",
+                "emacs",
+                "nano",
+                "vscode",
+                "sublime",
+                "bbedit",
+                "kakoune",
+                "helix",
+                "xcode"
+              ]
+            },
+            {
+              "const": ""
+            }
           ],
           "default": ""
         },

From c232abc861755afc42fc807b9434e29e6e27302f Mon Sep 17 00:00:00 2001
From: EmilySeville7cfg <EmilySeville7cfg@gmail.com>
Date: Mon, 7 Aug 2023 02:08:44 +1000
Subject: [PATCH 27/27] fix(schema): custom command definition

---
 schemas/config.json | 643 ++++++++++++++++++++++----------------------
 1 file changed, 324 insertions(+), 319 deletions(-)

diff --git a/schemas/config.json b/schemas/config.json
index 3f38aa3bcd1..721e77af8ff 100644
--- a/schemas/config.json
+++ b/schemas/config.json
@@ -1666,350 +1666,355 @@
     "customCommands": {
       "title": "custom commands",
       "description": "Custom commands\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-      "type": "object",
-      "required": [
-        "key",
-        "command",
-        "context"
-      ],
-      "properties": {
-        "key": {
-          "title": "key",
-          "description": "A command trigger\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "$ref": "#/definitions/keybinding"
-        },
-        "command": {
-          "title": "command",
-          "description": "A command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "string",
-          "default": "",
-          "examples": [
-            "git fetch {{.Form.Remote}} {{.Form.Branch}} && git checkout FETCH_HEAD"
-          ]
-        },
-        "context": {
-          "title": "context",
-          "description": "A context\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "string",
-          "enum": [
-            "status",
-            "files",
-            "worktrees",
-            "localBranches",
-            "remotes",
-            "remoteBranches",
-            "tags",
-            "commits",
-            "reflogCommits",
-            "subCommits",
-            "commitFiles",
-            "stash",
-            "global"
-          ]
-        },
-        "subprocess": {
-          "title": "subprocess",
-          "description": "Whether to run command in subprocess\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "boolean",
-          "default": false
-        },
-        "prompts": {
-          "title": "prompts",
-          "description": "Prompts before running a command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "array",
-          "items": {
-            "description": "A prompt before running a command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-            "type": "object",
-            "required": [
-              "type",
-              "title",
-              "key"
-            ],
-            "properties": {
-              "type": {
-                "$ref": "#/definitions/custom-commands-prompts-type-property"
-              },
-              "title": {
-                "$ref": "#/definitions/custom-commands-prompts-title-property"
+      "type": "array",
+      "uniqueItems": true,
+      "items": {
+        "description": "A custom command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+        "type": "object",
+        "required": [
+          "key",
+          "command",
+          "context"
+        ],
+        "properties": {
+          "key": {
+            "title": "key",
+            "description": "A command trigger\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "$ref": "#/definitions/keybinding"
+          },
+          "command": {
+            "title": "command",
+            "description": "A command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "string",
+            "default": "",
+            "examples": [
+              "git fetch {{.Form.Remote}} {{.Form.Branch}} && git checkout FETCH_HEAD"
+            ]
+          },
+          "context": {
+            "title": "context",
+            "description": "A context\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "string",
+            "enum": [
+              "status",
+              "files",
+              "worktrees",
+              "localBranches",
+              "remotes",
+              "remoteBranches",
+              "tags",
+              "commits",
+              "reflogCommits",
+              "subCommits",
+              "commitFiles",
+              "stash",
+              "global"
+            ]
+          },
+          "subprocess": {
+            "title": "subprocess",
+            "description": "Whether to run command in subprocess\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "boolean",
+            "default": false
+          },
+          "prompts": {
+            "title": "prompts",
+            "description": "Prompts before running a command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "array",
+            "items": {
+              "description": "A prompt before running a command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+              "type": "object",
+              "required": [
+                "type",
+                "title",
+                "key"
+              ],
+              "properties": {
+                "type": {
+                  "$ref": "#/definitions/custom-commands-prompts-type-property"
+                },
+                "title": {
+                  "$ref": "#/definitions/custom-commands-prompts-title-property"
+                },
+                "key": {
+                  "$ref": "#/definitions/custom-commands-prompts-key-property"
+                }
               },
-              "key": {
-                "$ref": "#/definitions/custom-commands-prompts-key-property"
-              }
-            },
-            "allOf": [
-              {
-                "if": {
-                  "properties": {
-                    "type": {
-                      "const": "input"
+              "allOf": [
+                {
+                  "if": {
+                    "properties": {
+                      "type": {
+                        "const": "input"
+                      }
                     }
+                  },
+                  "then": {
+                    "properties": {
+                      "type": {
+                        "$ref": "#/definitions/custom-commands-prompts-type-property"
+                      },
+                      "title": {
+                        "$ref": "#/definitions/custom-commands-prompts-title-property"
+                      },
+                      "key": {
+                        "$ref": "#/definitions/custom-commands-prompts-key-property"
+                      },
+                      "initialValue": {
+                        "title": "initial value",
+                        "description": "An initial value\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                        "type": "string"
+                      },
+                      "suggestions": {
+                        "title": "suggestions",
+                        "description": "Whether to show suggestions as the input is entered\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                        "type": "object",
+                        "oneOf": [
+                          {
+                            "properties": {
+                              "preset": {
+                                "title": "preset",
+                                "description": "A preset\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                                "type": "string",
+                                "enum": [
+                                  "authors",
+                                  "branches",
+                                  "files",
+                                  "refs",
+                                  "remotes",
+                                  "remoteBranches",
+                                  "tags"
+                                ]
+                              }
+                            },
+                            "additionalProperties": false
+                          },
+                          {
+                            "properties": {
+                              "command": {
+                                "title": "command",
+                                "description": "A command where each line in the output is suggestion\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                                "type": "string",
+                                "default": "",
+                                "examples": [
+                                  "git branch --format='%(refname:short)'"
+                                ]
+                              }
+                            },
+                            "additionalProperties": false
+                          }
+                        ]
+                      }
+                    },
+                    "additionalProperties": false
                   }
                 },
-                "then": {
-                  "properties": {
-                    "type": {
-                      "$ref": "#/definitions/custom-commands-prompts-type-property"
-                    },
-                    "title": {
-                      "$ref": "#/definitions/custom-commands-prompts-title-property"
-                    },
-                    "key": {
-                      "$ref": "#/definitions/custom-commands-prompts-key-property"
-                    },
-                    "initialValue": {
-                      "title": "initial value",
-                      "description": "An initial value\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
-                      "type": "string"
+                {
+                  "if": {
+                    "properties": {
+                      "type": {
+                        "const": "confirm"
+                      }
+                    }
+                  },
+                  "then": {
+                    "properties": {
+                      "type": {
+                        "$ref": "#/definitions/custom-commands-prompts-type-property"
+                      },
+                      "title": {
+                        "$ref": "#/definitions/custom-commands-prompts-title-property"
+                      },
+                      "key": {
+                        "$ref": "#/definitions/custom-commands-prompts-key-property"
+                      },
+                      "body": {
+                        "title": "body",
+                        "description": "A body\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#confirm",
+                        "type": "string",
+                        "examples": [
+                          "Are you sure you want to push to the remote?"
+                        ]
+                      }
                     },
-                    "suggestions": {
-                      "title": "suggestions",
-                      "description": "Whether to show suggestions as the input is entered\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
-                      "type": "object",
-                      "oneOf": [
-                        {
+                    "additionalProperties": false
+                  }
+                },
+                {
+                  "if": {
+                    "properties": {
+                      "type": {
+                        "const": "menu"
+                      }
+                    }
+                  },
+                  "then": {
+                    "required": [
+                      "options"
+                    ],
+                    "properties": {
+                      "type": {
+                        "$ref": "#/definitions/custom-commands-prompts-type-property"
+                      },
+                      "title": {
+                        "$ref": "#/definitions/custom-commands-prompts-title-property"
+                      },
+                      "key": {
+                        "$ref": "#/definitions/custom-commands-prompts-key-property"
+                      },
+                      "options": {
+                        "title": "options",
+                        "description": "Options\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
+                        "type": "array",
+                        "uniqueItems": true,
+                        "items": {
+                          "description": "An option",
+                          "type": "object",
+                          "required": [
+                            "value"
+                          ],
                           "properties": {
-                            "preset": {
-                              "title": "preset",
-                              "description": "A preset\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                            "name": {
+                              "title": "name",
+                              "description": "A first label part\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
                               "type": "string",
-                              "enum": [
-                                "authors",
-                                "branches",
-                                "files",
-                                "refs",
-                                "remotes",
-                                "remoteBranches",
-                                "tags"
-                              ]
-                            }
-                          },
-                          "additionalProperties": false
-                        },
-                        {
-                          "properties": {
-                            "command": {
-                              "title": "command",
-                              "description": "A command where each line in the output is suggestion\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#input",
+                              "default": ""
+                            },
+                            "description": {
+                              "title": "description",
+                              "description": "A second label part\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
                               "type": "string",
-                              "default": "",
+                              "default": ""
+                            },
+                            "value": {
+                              "title": "value",
+                              "description": "the value that will be used in the command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
+                              "type": "string",
+                              "minLength": 1,
                               "examples": [
-                                "git branch --format='%(refname:short)'"
+                                "feature"
                               ]
                             }
                           },
                           "additionalProperties": false
                         }
-                      ]
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              },
-              {
-                "if": {
-                  "properties": {
-                    "type": {
-                      "const": "confirm"
-                    }
-                  }
-                },
-                "then": {
-                  "properties": {
-                    "type": {
-                      "$ref": "#/definitions/custom-commands-prompts-type-property"
-                    },
-                    "title": {
-                      "$ref": "#/definitions/custom-commands-prompts-title-property"
-                    },
-                    "key": {
-                      "$ref": "#/definitions/custom-commands-prompts-key-property"
+                      }
                     },
-                    "body": {
-                      "title": "body",
-                      "description": "A body\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#confirm",
-                      "type": "string",
-                      "examples": [
-                        "Are you sure you want to push to the remote?"
-                      ]
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              },
-              {
-                "if": {
-                  "properties": {
-                    "type": {
-                      "const": "menu"
-                    }
+                    "additionalProperties": false
                   }
                 },
-                "then": {
-                  "required": [
-                    "options"
-                  ],
-                  "properties": {
-                    "type": {
-                      "$ref": "#/definitions/custom-commands-prompts-type-property"
-                    },
-                    "title": {
-                      "$ref": "#/definitions/custom-commands-prompts-title-property"
-                    },
-                    "key": {
-                      "$ref": "#/definitions/custom-commands-prompts-key-property"
-                    },
-                    "options": {
-                      "title": "options",
-                      "description": "Options\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
-                      "type": "array",
-                      "uniqueItems": true,
-                      "items": {
-                        "description": "An option",
-                        "type": "object",
-                        "required": [
-                          "value"
-                        ],
-                        "properties": {
-                          "name": {
-                            "title": "name",
-                            "description": "A first label part\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
-                            "type": "string",
-                            "default": ""
-                          },
-                          "description": {
-                            "title": "description",
-                            "description": "A second label part\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
-                            "type": "string",
-                            "default": ""
-                          },
-                          "value": {
-                            "title": "value",
-                            "description": "the value that will be used in the command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu",
-                            "type": "string",
-                            "minLength": 1,
-                            "examples": [
-                              "feature"
-                            ]
-                          }
-                        },
-                        "additionalProperties": false
+                {
+                  "if": {
+                    "properties": {
+                      "type": {
+                        "const": "menuFromCommand"
                       }
                     }
                   },
-                  "additionalProperties": false
-                }
-              },
-              {
-                "if": {
-                  "properties": {
-                    "type": {
-                      "const": "menuFromCommand"
-                    }
-                  }
-                },
-                "then": {
-                  "required": [
-                    "command"
-                  ],
-                  "properties": {
-                    "type": {
-                      "$ref": "#/definitions/custom-commands-prompts-type-property"
-                    },
-                    "title": {
-                      "$ref": "#/definitions/custom-commands-prompts-title-property"
-                    },
-                    "key": {
-                      "$ref": "#/definitions/custom-commands-prompts-key-property"
-                    },
-                    "command": {
-                      "title": "command",
-                      "description": "A command to generate options\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
-                      "type": "string",
-                      "default": "",
-                      "examples": [
-                        "git branch  -r --list {{.SelectedRemote.Name }}/*"
-                      ]
-                    },
-                    "filter": {
-                      "title": "filter",
-                      "description": "A regex specifying groups which kept from command output\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
-                      "type": "string",
-                      "default": "",
-                      "examples": [
-                        ".*{{.SelectedRemote.Name }}/(?P<branch>.*)"
-                      ]
-                    },
-                    "valueFormat": {
-                      "title": "valueFormat",
-                      "description": "A value format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
-                      "type": "string",
-                      "default": "",
-                      "examples": [
-                        "{{ .branch }}"
-                      ]
+                  "then": {
+                    "required": [
+                      "command"
+                    ],
+                    "properties": {
+                      "type": {
+                        "$ref": "#/definitions/custom-commands-prompts-type-property"
+                      },
+                      "title": {
+                        "$ref": "#/definitions/custom-commands-prompts-title-property"
+                      },
+                      "key": {
+                        "$ref": "#/definitions/custom-commands-prompts-key-property"
+                      },
+                      "command": {
+                        "title": "command",
+                        "description": "A command to generate options\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
+                        "type": "string",
+                        "default": "",
+                        "examples": [
+                          "git branch  -r --list {{.SelectedRemote.Name }}/*"
+                        ]
+                      },
+                      "filter": {
+                        "title": "filter",
+                        "description": "A regex specifying groups which kept from command output\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
+                        "type": "string",
+                        "default": "",
+                        "examples": [
+                          ".*{{.SelectedRemote.Name }}/(?P<branch>.*)"
+                        ]
+                      },
+                      "valueFormat": {
+                        "title": "valueFormat",
+                        "description": "A value format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
+                        "type": "string",
+                        "default": "",
+                        "examples": [
+                          "{{ .branch }}"
+                        ]
+                      },
+                      "labelFormat": {
+                        "title": "labelFormat",
+                        "description": "A label format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
+                        "type": "string",
+                        "default": "",
+                        "examples": [
+                          "{{ .branch | green }}"
+                        ]
+                      }
                     },
-                    "labelFormat": {
-                      "title": "labelFormat",
-                      "description": "A label format\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#menu-from-command",
-                      "type": "string",
-                      "default": "",
-                      "examples": [
-                        "{{ .branch | green }}"
-                      ]
-                    }
-                  },
-                  "additionalProperties": false
+                    "additionalProperties": false
+                  }
                 }
-              }
+              ]
+            }
+          },
+          "loadingText": {
+            "title": "loading text",
+            "description": "Text to display while waiting for command to finish\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "string",
+            "default": "",
+            "examples": [
+              "Loading..."
             ]
+          },
+          "description": {
+            "title": "description",
+            "description": "A description\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "string",
+            "default": "",
+            "examples": [
+              "Checkout a remote branch as FETCH_HEAD"
+            ]
+          },
+          "stream": {
+            "title": "stream",
+            "description": "Whether to stream command output to Command Log panel\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "boolean",
+            "default": false
+          },
+          "showOutput": {
+            "title": "show output",
+            "description": "Whether to show the command output in popup\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "boolean",
+            "default": false
+          },
+          "after": {
+            "title": "after",
+            "description": "Actions to take after the command has completed\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+            "type": "object",
+            "properties": {
+              "checkForConflicts": {
+                "title": "check for conflicts",
+                "description": "Whether to check for conflicts before running command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
+                "type": "boolean",
+                "default": false
+              }
+            },
+            "additionalProperties": false
           }
         },
-        "loadingText": {
-          "title": "loading text",
-          "description": "Text to display while waiting for command to finish\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "string",
-          "default": "",
-          "examples": [
-            "Loading..."
-          ]
-        },
-        "description": {
-          "title": "description",
-          "description": "A description\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "string",
-          "default": "",
-          "examples": [
-            "Checkout a remote branch as FETCH_HEAD"
-          ]
-        },
-        "stream": {
-          "title": "stream",
-          "description": "Whether to stream command output to Command Log panel\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "boolean",
-          "default": false
-        },
-        "showOutput": {
-          "title": "show output",
-          "description": "Whether to show the command output in popup\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "boolean",
-          "default": false
-        },
-        "after": {
-          "title": "after",
-          "description": "Actions to take after the command has completed\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-          "type": "object",
-          "properties": {
-            "checkForConflicts": {
-              "title": "check for conflicts",
-              "description": "Whether to check for conflicts before running command\nhttps://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md#custom-command-keybindings",
-              "type": "boolean",
-              "default": false
-            }
-          },
-          "additionalProperties": false
-        }
-      },
-      "additionalProperties": false
+        "additionalProperties": false
+      }
     }
   },
   "additionalProperties": false