id = "lazygit" name = "lazygit" homepage = "https://github.com/jesseduffield/lazygit" description = "A simple terminal UI for git commands." # The logo the project's README puts at the top. icon = "https://user-images.githubusercontent.com/8456633/174470852-339b5011-5800-4bb9-a628-ff230aa8cd4e.png" executables = ["lazygit"] [dotfiles] # docs/Config.md, "User Config", names the default global config file per # platform: # # Linux: ~/.config/lazygit/config.yml # MacOS: ~/Library/Application Support/lazygit/config.yml # Windows: %LOCALAPPDATA%\lazygit\config.yml (default location, but it will # also be found in %APPDATA%\lazygit\config.yml) # # The first three of those are the platform-native config directory, which is # [appData] — macOS Application Support, Linux $XDG_CONFIG_HOME, Windows # %APPDATA%. The same section notes that setting XDG_CONFIG_HOME moves it on # macOS too ("If you want to change the config directory: MacOS: export # XDG_CONFIG_HOME=\"$HOME/.config\""), which is the override [appData]'s Linux # half already stands for. The Windows default lives under %LOCALAPPDATA% # instead, so that one is listed on its own. # # The same doc lists the pre-vendor-rename spellings ("For old installations # ... I just used my name"): ~/.config/jesseduffield/lazygit/config.yml, # ~/Library/Application Support/jesseduffield/lazygit/config.yml and # %APPDATA%\jesseduffield\lazygit\config.yml — again one [appData] root. An # install that never moved still has only that one, so both are listed and a # consumer skips whichever is absent. paths = [ "[appData]/lazygit/config.yml", "%LOCALAPPDATA%/lazygit/config.yml", "[appData]/jesseduffield/lazygit/config.yml", ] # Nothing to carve out: the config directory also holds "some other files # lazygit uses to keep track of state across sessions" (docs/Config.md, # "Overriding default config file location"), but the paths above name # config.yml itself rather than the directory, so the state files are never # picked up in the first place. exclude = [] # A git TUI with no accounts of its own: it shells out to git and to the user's # own credential helper, and stores no token. secret = [] # No machine_lines. The file is keybindings, theme, pager and custom commands — # the things a user wants everywhere. `git.paging.pager` and `os.editPreset` # name programs rather than absolute paths, so they travel too. [commands] format = 1 label = "Open lazygit" description = "Start lazygit on a repository, optionally focused on a panel or filtered to a path. Printing config and profiling options are left out." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.source]] id = "help" kind = "help" url = "https://github.com/jesseduffield/lazygit/blob/master/pkg/app/entry_point.go" revision = "master 2026-10-27" evidence = """ -p, --path Path of git repo. (equivalent to --work-tree= --git-dir=/.git/) -f, --filter Path to filter on in `git log -- `. git-arg Panel to focus upon opening lazygit. Accepted values (based on git terminology): status, branch, log, stash. -d, --debug Run in debug mode with logging (see --logs flag below). -l, --logs Tail lazygit logs (intended to be used when `lazygit --debug` is called in a separate terminal tab) --screen-mode The initial screen-mode, which determines the size of the focused panel. Valid options: 'normal' (default), 'half', 'full' --use-config-file Comma separated list to custom config file(s) To override the individual config file used, use the `--use-config-file` arg """ [[commands.field]] id = "path" label = "Repository path" type = "path" path = { kind = "directory", role = "input" } option = ["--path", "-p"] sources = ["help"] [[commands.field]] id = "filter" label = "Filter log to path" type = "path" path = { kind = "any", role = "input" } option = ["--filter", "-f"] sources = ["help"] [[commands.field]] id = "screen_mode" label = "Initial screen mode" type = "enum" option = ["--screen-mode"] choices = [{ value = "normal", label = "Normal" }, { value = "half", label = "Half" }, { value = "full", label = "Full" }] sources = ["help"] [[commands.field]] id = "config_file" label = "Config file(s)" description = "Comma-separated list of config files." type = "string" option = ["--use-config-file"] sources = ["help"] [[commands.field]] id = "debug" label = "Debug mode" type = "boolean" option = ["--debug", "-d"] sources = ["help"] [[commands.field]] id = "logs" label = "Tail logs" description = "Run in a second tab while another lazygit runs with debug." type = "boolean" option = ["--logs", "-l"] sources = ["help"] [[commands.field]] id = "panel" label = "Focus panel" type = "enum" position = 0 choices = [{ value = "status", label = "Status" }, { value = "branch", label = "Branches" }, { value = "log", label = "Log" }, { value = "stash", label = "Stash" }] sources = ["help"] [[commands.task]] id = "open_repo" label = "Open a repository" fields = ["path", "panel"] required = ["path"] [[commands.task]] id = "debug" label = "Debug run" fields = ["path", "debug"] required = [] set = { debug = [true] } [[commands.group]] id = "basic" label = "Basic" fields = ["path", "panel", "filter", "screen_mode"] [[commands.group]] id = "advanced" label = "Advanced" fields = ["config_file", "debug", "logs"]