{"id":31298190,"url":"https://github.com/djuuu/tmux-git-status","last_synced_at":"2026-05-14T20:32:02.752Z","repository":{"id":314172745,"uuid":"1054468992","full_name":"Djuuu/tmux-git-status","owner":"Djuuu","description":"Show Git status in your tmux status bar","archived":false,"fork":false,"pushed_at":"2025-09-18T16:35:51.000Z","size":64,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-11T00:37:34.923Z","etag":null,"topics":["bash","git","tmux","tmux-status"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Djuuu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-10T22:14:26.000Z","updated_at":"2025-09-21T16:46:23.000Z","dependencies_parsed_at":"2025-09-11T02:13:58.956Z","dependency_job_id":"2b207857-d014-45db-a138-eb1b0115a86e","html_url":"https://github.com/Djuuu/tmux-git-status","commit_stats":null,"previous_names":["djuuu/tmux-git-status"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Djuuu/tmux-git-status","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Djuuu%2Ftmux-git-status","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Djuuu%2Ftmux-git-status/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Djuuu%2Ftmux-git-status/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Djuuu%2Ftmux-git-status/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Djuuu","download_url":"https://codeload.github.com/Djuuu/tmux-git-status/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Djuuu%2Ftmux-git-status/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33042128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","git","tmux","tmux-status"],"created_at":"2025-09-24T23:57:26.132Z","updated_at":"2026-05-14T20:32:02.735Z","avatar_url":"https://github.com/Djuuu.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tmux-Git-status\n\nShows Git status in your [tmux](https://github.com/tmux/tmux/wiki) status bar.\n\n![git status - custom 1](docs/img/git-status-custom-1.png)\n\n![git status - default](docs/img/git-status-default.png)\n\n**Key Features**\n* Fast and lightweight\n* Built with only Bash \u0026 Git - no third-party dependencies\u003csup\u003e*\u003c/sup\u003e\n* Highly configurable\n* [Catppuccin](https://github.com/catppuccin/tmux) integration\n\n_( \u003csup\u003e*\u003c/sup\u003e A [Nerd Font](https://www.nerdfonts.com/)-compatible font is required to display icons correctly)_\n\n## Installation\n\n### Using Tmux Plugin Manager\n\n1. Install [TPM](https://github.com/tmux-plugins/tpm)\n2. Add the plugin in your `.tmux.conf`:\n   ```\n   set -g @plugin 'Djuuu/tmux-git-status'\n   ```\n3. Add the module to your status bar:\n   ```\n   set -ag status-left \"#{git_status}\"\n   ```\n\n### Manually\n\n1. Clone the plugin\n   ```\n   git clone https://github.com/Djuuu/tmux-git-status.git ~/path/to/tmux-git-status\n   ```\n2. Run the plugin at the end of your `.tmux.conf`:\n   ```\n   run ~/path/to/tmux-git-status/git-status.tmux\n   ```\n3. Add the module to your status bar:\n   ```\n   set -ag status-left \"#{git_status}\"\n   ```\n\n### Additional Catppuccin configuration\n\nA custom [Catppuccin](https://github.com/catppuccin/tmux) status line module is provided:\n\n1. Define the `CATPPUCCIN_PATH` variable in your configuration\n   ```\n   %hidden CATPPUCCIN_PATH=\"/path/to/catppuccin/tmux\"\n   ```\n\n1. Source the `git_status.catppuccin.conf` configuration file, after `catppuccin.tmux`\n   ``` \n   # Run Catppuccin\n   run \"/path/to/catppuccin/tmux/catppuccin.tmux\"\n\n   # ...\n\n   # Configure Git status catppuccin module\n   source -q \"/path/to/tmux-git-status/git_status.catppuccin.conf\"   \n   ```\n1. Add the module to your status bar:\n   ```\n   set -ag status-left \"#{@catppuccin_status_git}\"\n   ```\n\n## Configuration\n\nThe Git status module content is rendered using the following template:\n``` \nset -gq @git_status_format \"{branch_icon}{branch}{upstream}{divergence}{action}{state}\"\n``` \nAvailable template entries:\n- `{branch_icon}`: [branch icon](#branch-icon)\n- `{branch}` local [branch name](#branch-name)\n- `{upstream}` upstream tracking branch name\n- `{divergence}` [divergence](#divergence) between local and remote branches\n- `{action}` [action](#action) icon / details (if any) \n- `{state}` [state](#state) icons (if any)\n\nMost of the icons and styles used by this module are customizable (see [configuration reference](#configuration-reference)).\n\n### Branch icon\n\n* Local branch  \n  ![local branch icon](docs/img/git-status-branch-icon-default.png)\n\n* Remote tracking branch\n\n  When your current branch has an upstream tracking branch, the branch icon reflects these remote types:\n\n  | Remote type | Remote pattern  | Display                                                          |\n  |-------------|-----------------|------------------------------------------------------------------|\n  | Github      | `github.com`    | ![github icon](docs/img/git-status-branch-icon-github.png)       |\n  | Gitlab      | `gitlab.com`    | ![gitlab icon](docs/img/git-status-branch-icon-gitlab.png)       |\n  | Bitbucket   | `bitbucket.org` | ![bitbucket icon](docs/img/git-status-branch-icon-bitbucket.png) |\n  | Forgejo     | `codeberg.org`  | ![forgejo icon](docs/img/git-status-branch-icon-forgejo.png)     |\n  | default     | `*`             | ![default icon](docs/img/git-status-branch-icon-default.png)     |\n\n  3 custom remote patterns can also be defined:\n  ```\n  set -gq @git_status_custom_remote_1_pattern \"git.example.dev\"\n  set -gq @git_status_custom_remote_1_icon    \"\" # nf-linux-forgejo\n\n  set -gq @git_status_custom_remote_2_pattern \"gitea.example.net\"\n  set -gq @git_status_custom_remote_2_icon    \" \" # nf-linux-gitea\n  \n  set -gq @git_status_custom_remote_3_pattern \"gitlab.example.com\"\n  set -gq @git_status_custom_remote_3_icon    \"\" # nf-seti-gitlab\n  ```\n\n* Detached state  \n  ![detached head icon](docs/img/git-status-branch-icon-detached.png)\n  \n### Branch name\n\nLocal branch names are truncated according to the value of `@git_status_branch_max_length` (40 by default).\n\nUpstream branch names are truncated according to the value of `@git_status_upstream_max_length` (15 by default).  \nIn addition, truncated upstream names will always show the whole remote name (eg: `origin/…`).\n\nYou can disable truncation by setting `*_max_length` value to 0.\n\n* ```\n  set -gq @git_status_branch_max_length 40\n  set -gq @git_status_upstream_max_length 30 \n  ``` \n  ![branch name - no truncation](docs/img/git-status-truncation-1.png)\n\n* ```\n  set -gq @git_status_branch_max_length 14\n  set -gq @git_status_upstream_max_length 8\n  ```\n  ![branch name - truncation](docs/img/git-status-truncation-2.png)\n\n### Divergence\n\nDivergence between your local branch and its tracking upstream can be shown in 3 modes:\n\n* `set -gq @git_status_divergence_mode \"detailed\"`  \n  Displays arrows with the number of commits ahead (↑) and behind (↓)  \n  ![divergence - detailed](docs/img/git-status-divergence-detailed.png)\n\n* `set -gq @git_status_divergence_mode \"simple\"`  \n  Shows only the arrows, without the counters  \n  ![divergence - simple](docs/img/git-status-divergence-simple.png)\n\n* `set -gq @git_status_divergence_mode \"single\"`  \n  Uses a single icon to represent the divergence state  \n  ![divergence - single](docs/img/git-status-divergence-single.png)\n\nIn `detailed` and `simple` modes, the order of \"ahead\" and \"behind\" indicators can be swapped with:  \n```\nset -gq @git_status_divergence_swap true\n```\n![divergence - detailed + swap](docs/img/git-status-divergence-detailed-swap.png)\n\n### Action\n\nDuring specific Git operations, a dedicated icon is displayed (typically when an action is interrupted due to a conflict):\n\n| Action      | Icon                                                                           |\n|-------------|--------------------------------------------------------------------------------|\n| cherry-pick | ![cherry-pick](docs/img/git-status-action-cherry-pick.png) \u003cbr\u003e_(1 conflict)_  |\n| merge       | ![merge](docs/img/git-status-action-merge.png) \u003cbr\u003e_(1 conflict)_              |\n| revert      | ![revert](docs/img/git-status-action-revert.png) \u003cbr\u003e_(1 conflict)_            |\n| bisect      | ![bisect](docs/img/git-status-action-bisect.png)                               |\n\nThe _rebase_ action has a more detailed display:\n\n![action: rebase](docs/img/git-status-action-rebase.png)  \n_(rebasing `feature/ipsum-example` onto `epic/example-stuff`, stopped at commit 2 out of 4, 1 conflict)_\n\nDuring rebase, the `{branch}`, `{upstream}` and `{divergence}` items are hidden to provide space for the detailed rebase information.  \nYou can disable this behavior with:\n```\nset -gq @git_status_rebase_hide_branch_info false\n```\n\n### State\n\nConfigure how the \"dirty\" state of your Git repository appears with these options:\n\n* **`@git_status_state_mode`**\n\n  - `\"detailed\"`  \n    Shows distinct icons for each type of change:  \n    ![state - detailed, counters](docs/img/git-status-state-detailed-counters.png)  \n    _(1 deleted, 2 changes, 3 untracked, 1 staged)_\n  \n  - `\"summary\"`  \n    Groups \"changed\", \"deleted\" and \"untracked\" into a single icon  \n    ![state - summary, counters](docs/img/git-status-state-summary-counters.png)  \n    _(6 \"dirty\" changes (deleted + changes + untracked), 1 staged)_\n\n    Note: If only untracked files are present, a dedicated icon is used:  \n    ![state - summary, untracked, counters](docs/img/git-status-state-summary-untracked-counters.png)  \n    _(1 untracked, 1 staged)_\n\n* **`@git_status_show_state_counters`** (`true` / `false`)\n  - `true` shows the number of changes for each state\n  - `false` only shows icons\n\n  \u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\" rowspan=\"2\"\u003e\u003c/td\u003e\n    \u003cth colspan=\"2\" align=\"center\"\u003e \u003ccode\u003e@git_status_show_state_counters\u003c/code\u003e \u003c/th\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth\u003e \u003ccode\u003etrue\u003c/code\u003e \u003c/th\u003e\n    \u003cth\u003e \u003ccode\u003efalse\u003c/code\u003e \u003c/th\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth rowspan=\"3\"\u003e \u003ccode\u003e@git_status_state_mode\u003c/code\u003e \u003c/th\u003e\n    \u003cth\u003e \u003ccode\u003e\"detailed\"\u003c/code\u003e \u003c/th\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/img/git-status-state-detailed-counters.png\" alt=\"Git state, detailed, counters\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/img/git-status-state-detailed-nocount.png\" alt=\"Git state, detailed, no counters\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth rowspan=\"2\"\u003e \u003ccode\u003e\"summary\"\u003c/code\u003e \u003c/th\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/img/git-status-state-summary-counters.png\" alt=\"Git state, summary, counters\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/img/git-status-state-summary-nocount.png\" alt=\"Git state, summary, no counters\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/img/git-status-state-summary-untracked-counters.png\" alt=\"Git state, summary, counters\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/img/git-status-state-summary-untracked-nocount.png\" alt=\"Git state, summary, no counters\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003c/table\u003e\n\n\nAdditional state-related options:\n\n* `@git_status_state_clean_icon`  \n  set to empty string to display no icon when state is clean  \n  ![state - clean](docs/img/git-status-state-clean.png)  \n\n* `@git_status_state_show_stash`  \n  disabled by default, set to `true` to show stash item count  \n  ![state - stash count](docs/img/git-status-state-stash%20count.png)\n\n- `@git_status_ignore_submodules`  \n  ignore submodule changes in state display (defaults to `false`)\n\n### Catppuccin integration\n\nThe plugin integrates with the [Catppuccin](https://github.com/catppuccin/tmux) theme for tmux\n(see [additional catppuccin configuration](#additional-catppuccin-configuration)).\n\n![catppuccin module](docs/img/git-status-catppuccin.png)\n\nSpecific configuration variables:\n\n* `@git_status_catppuccin_hide_outside_repository`  \n  Hide whole status module when not in a repository, instead of showing empty module skeleton (defaults to `true`)\n\n* `@git_status_catppuccin_replace_module_icon`  \n  Replace Catppuccin module icon with dynamic [branch icon](#branch-icon) (defaults to `true`)\n\n## Configuration reference\n\nAvailable options (see [git-status.tmux.conf](git-status.tmux.conf)):\n\n```\n# Default base style\nset -gq @git_status_default_style \"#[fg=white,nobold]\"\n\n# Git status custom format. Available entries:\n# - {branch_icon}   Example:  \n# - {branch}        Example:  feature/example\n# - {upstream}      Example:   → origin/feature/example\n# - {divergence}    Example:  ↑1·↓2\n# - {action}        Example:   \n# - {state}         Example:  󰍴1  2 3  4\nset -gq @git_status_format \"{branch_icon}{branch}{upstream}{divergence}{action}{state}\"\n\n## Branch ######################################################################\n\nset -gq @git_status_icon_style   \"#[fg=white,bold]\"\nset -gq @git_status_branch_style \"#[fg=white,bold]\"\n\n# Branch name truncation (set to 0 to disable truncation)\nset -gq @git_status_branch_max_length  40\n\n# Branch icon\nset -gq @git_status_branch_icon    \"\" # nf-fa-code_branch\nset -gq @git_status_detached_icon  \" \" # nf-fa-code_commit\n# Branch icon for specific remote types\nset -gq @git_status_github_icon         \"󰊤\" # nf-md-github\nset -gq @git_status_gitlab_icon         \"\" # nf-seti-gitlab\nset -gq @git_status_bitbucket_icon      \"\" # nf-dev-bitbucket\nset -gq @git_status_forgejo_icon        \"\" # nf-linux-forgejo\nset -gq @git_status_default_remote_icon \"\" # nf-fa-code_branch\n# Custom remote patterns \u0026 icons\nset -gq @git_status_custom_remote_1_pattern \"\"\nset -gq @git_status_custom_remote_1_icon    \"\"\nset -gq @git_status_custom_remote_2_pattern \"\"\nset -gq @git_status_custom_remote_2_icon    \"\"\nset -gq @git_status_custom_remote_3_pattern \"\"\nset -gq @git_status_custom_remote_3_icon    \"\"\n\n## Remote ######################################################################\n\nset -gq @git_status_upstream_prefix \"#[fg=white,nobold] → \"\nset -gq @git_status_upstream_style  \"#[fg=cyan,bold]\"\n\n# Upstream branch name truncation (set to 0 to disable truncation)\n# note: when truncated, remote branch will always show the full remote name (ex: \"origin/…\")\nset -gq @git_status_upstream_max_length 15\n\n## Divergence ##################################################################\n\n# Upstream divergence mode\n# \"detailed\": display ahead \u0026 behind arrow icons, with commit count\n# \"simple\": display ahead \u0026 behind arrow icons, without commit count\n# \"single\": display single icon (ahead/behind/diverged)\nset -gq @git_status_divergence_mode \"detailed\" # \"detailed\" | \"simple\" | \"single\"\n\n# \"detailed\" / \"simple\" divergence display icons\nset -gq @git_status_ahead_icon           \"#[fg=green,bold]↑\"\nset -gq @git_status_behind_icon          \"#[fg=red,bold]↓\"\nset -gq @git_status_divergence_separator \"#[fg=#666666]·\"\n\n# Swap \"ahead\" and \"behind\" indicators position\nset -gq @git_status_divergence_swap false\n\n# \"single\" divergence mode icons\nset -gq @git_status_divergence_single_ahead_icon    \"#[fg=green,bold]\" # nf-fa-arrow_up\nset -gq @git_status_divergence_single_behind_icon   \"#[fg=red,bold]\"   # nf-fa-arrow_down\nset -gq @git_status_divergence_single_diverged_icon \"#[fg=yellow,bold]\" # nf-fa-arrows_up_down\n\n## Action ######################################################################\n\n# Action display prefix \u0026 suffix\nset -gq @git_status_action_prefix  \" #[fg=yellow,bold]\"\nset -gq @git_status_action_suffix  \"#[fg=yellow,bold]\"\n\n# Action icons (shown during specific actions, usually on conflict)\nset -gq @git_status_action_rebase_icon  \" ☈ \"  # nf-oct-git_merge\nset -gq @git_status_action_merge_icon   \"\"   # nf-oct-git_merge\nset -gq @git_status_action_cherry_icon  \" \" # nf-fae-cherry\nset -gq @git_status_action_revert_icon  \" \"  # nf-fa-rotate_left\nset -gq @git_status_action_bisect_icon  \"?\"  # nf-fa-arrows_up_down\n\n# Rebase action specific display\nset -gq @git_status_rebase_head_style   \"#[fg=yellow,bold]\"\nset -gq @git_status_rebase_target_style \"#[fg=cyan,bold]\"\nset -gq @git_status_rebase_head_target_separator \" ↷ \"\nset -gq @git_status_rebase_interactive_edit_icon \"#[fg=yellow] \" # nf-fa-edit\n\n# Progress counter style\nset -gq @git_status_rebase_progress_style \"#[fg=yellow,bold]\"\n# Progress counter style when stopped because of conflict\nset -gq @git_status_rebase_conflict_style \"#[fg=red,bold]\"\n\n# Hide branch info (branch, remote, divergence) during rebase, to leave room for detailed rebase info\nset -gq @git_status_rebase_hide_branch_info true\n\n## State #######################################################################\n\n# Status icon mode\n# - \"detailed\" : show individual icons for \"changed\", \"deleted\", \"untracked\", etc.\n# - \"summary\" : group \"changed\", \"deleted\" and \"untracked\" in a single icon\nset -gq @git_status_state_mode \"detailed\"\n\n# Ignore submodules in got state\nset -gq @git_status_ignore_submodules false\n\n# Show counters for each state (when false, only icons will be shown)\nset -gq @git_status_show_state_counters true\n\nset -gq @git_status_state_prefix         \" \"\nset -gq @git_status_state_clean_icon     \"#[fg=green,bold] \"  # nf-cod-sparkle\nset -gq @git_status_state_deleted_icon   \"#[fg=red,bold]󰍴\"     # nf-md-minus\nset -gq @git_status_state_changed_icon   \"#[fg=yellow,bold] \" # nf-cod-request_changes\nset -gq @git_status_state_untracked_icon \"#[fg=green,bold]\"   # nf-oct-plus\nset -gq @git_status_state_staged_icon    \"#[fg=green,bold] \"  # nf-cod-request_changes\nset -gq @git_status_state_conflict_icon  \"#[fg=red,bold] \"    # nf-fa-arrows_left_right\n\nset -gq @git_status_state_show_stash   false\nset -gq @git_status_state_stashes_icon \"#[fg=cyan,nobold] \" # nf-fa-buffer\n\n## Catppuccin integration ######################################################\n\n# Hide whole status module when not in a repository, instead of showing empty module skeleton\nset -gq @git_status_catppuccin_hide_outside_repository true\n\n# Replace Catppuccin module icon with dynamic branch icon\nset -gq @git_status_catppuccin_replace_module_icon true\n```\n\n## Inspiration \u0026 alternatives\n\n- https://github.com/arl/gitmux\n- https://github.com/arl/tmux-gitbar\n- https://github.com/romkatv/gitstatus\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjuuu%2Ftmux-git-status","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjuuu%2Ftmux-git-status","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjuuu%2Ftmux-git-status/lists"}