Gitmux shows git status in your tmux status bar
Works with all reasonably recent tmux versions (2.1+)
Download the latest binary for your platform/architecture and uncompress it.
Homebrew (macOS and linux) (amd64 and arm64)Install the latest version with:
Arch Linux users can download the gitmux, gitmux-bin or gitmux-git AUR package.
Download and install a Go compiler (Go 1.16 or later). Run go install
to build and install gitmux
:
go install github.com/arl/gitmux@latest
If your tmux
version supports pane_current_path
(tmux v2.1+), just add this line to your .tmux.conf
:
set -g status-right '#(gitmux "#{pane_current_path}")'
If your tmux
doesn't support pane_current_path
then you can use a bash-specific solution to achieve relatively similar behaviour: gitmux
will refresh after every shell command you run or when you switch windows, however it won't refresh automatically, nor when switching panes.
Note that tmux v2.1
was released in 2015 so you're probably better off updating to a more recent version anyway 🙂.
gitmux
is not meant to be used directly but it still has a command line interface that can be used to troubleshoot your installation, or create the default configuration:
$ gitmux -h
gitmux v0.11.5
Usage: gitmux [options] [dir]
gitmux prints the status of a Git working tree as a tmux format string.
If directory is not given, it default to the working directory.
Options:
-cfg FILE read gitmux config from FILE.
-printcfg prints default configuration file.
-dbg outputs Git status as JSON and print errors.
-timeout DUR exits if still running after given duration (ex: 2s, 500ms).
-V prints gitmux version and exits.
gitmux
output can be customized via a configuration file in YAML format.
This is the default gitmux configuration file, in YAML format:
tmux: symbols: branch: '⎇ ' hashprefix: ':' ahead: ↑· behind: ↓· staged: '● ' conflict: '✖ ' modified: '✚ ' untracked: '… ' stashed: '⚑ ' clean: ✔ insertions: Σ deletions: Δ styles: clear: '#[fg=default]' state: '#[fg=red,bold]' branch: '#[fg=white,bold]' remote: '#[fg=cyan]' divergence: '#[fg=default]' staged: '#[fg=green,bold]' conflict: '#[fg=red,bold]' modified: '#[fg=red,bold]' untracked: '#[fg=magenta,bold]' stashed: '#[fg=cyan,bold]' clean: '#[fg=green,bold]' insertions: '#[fg=green]' deletions: '#[fg=red]' layout: [branch, .., remote-branch, divergence, '- ', flags] options: branch_max_len: 0 branch_trim: right ellipsis: … hide_clean: false swap_divergence: false divergence_space: false
First, save the default configuration to a new file:
gitmux -printcfg > $HOME/.gitmux.conf
Modify the line you've added to .tmux.conf
, passing the path of the configuration file as argument to gitmux
via the -cfg
flag
set -g status-right '#(gitmux -cfg $HOME/.gitmux.conf "#{pane_current_path}")'
Open .gitmux.conf
and modify it, replacing symbols, styles and layout to suit your needs.
In tmux
status bar, gitmux
output immediately reflects the changes you make to the configuration.
gitmux
configuration is split into 4 sections:
symbols
: they're just strings of unicode charactersstyles
: tmux format stringslayout
: list of gitmux
layout components, defines the component to show and in their order.options
: additional configuration optionsThe symbols
section defines the symbols printed before specific elements of Git status displayed in tmux
status string:
symbols: branch: "⎇ " # current branch name. hashprefix: ":" # Git SHA1 hash (in 'detached' state). ahead: ↑· # 'ahead count' when local and remote branch diverged. behind: ↓· # 'behind count' when local and remote branch diverged. staged: "● " # count of files in the staging area. conflict: "✖ " # count of files in conflicts. modified: "✚ " # count of modified files. untracked: "… " # count of untracked files. stashed: "⚑ " # count of stash entries. insertions: Σ # count of inserted lines (stats section). deletions: Δ # count of deleted lines (stats section). clean: ✔ # Shown when the working tree is clean.
Styles are tmux format strings used to specify text colors and attributes of Git status elements. See the STYLES
section of tmux
man page.
styles: clear: '#[fg=default]' # Clear previous style. state: '#[fg=red,bold]' # Special tree state strings such as [rebase], [merge], etc. branch: '#[fg=white,bold]' # Local branch name remote: '#[fg=cyan]' # Remote branch name divergence: "#[fg=yellow]" # 'divergence' counts staged: '#[fg=green,bold]' # 'staged' count conflict: '#[fg=red,bold]' # 'conflicts' count modified: '#[fg=red,bold]' # 'modified' count untracked: '#[fg=magenta,bold]' # 'untracked' count stashed: '#[fg=cyan,bold]' # 'stash' count insertions: '#[fg=green]' # 'insertions' count deletions: '#[fg=red]' # 'deletions' count clean: '#[fg=green,bold]' # 'clean' symbol
The layout
section defines what components gitmux
shows and the order in which they appear on tmux
status bar.
For example, the default gitmux
layout shows is:
layout: [branch, .., remote-branch, divergence, " - ", flags]
It shows, in that order:
..
,-
characterNote that elements only appear when they make sense, for example if local and remote branch are aligned, the divergence string won't show up. Same thing for the remote branch, etc.
But you can anyway choose to never show some components if you wish, or to present them in a different order.
This is the list of the possible keywords for layout
:
branch
local branch name main
remote-branch
remote branch name origin/main
divergence
divergence local/remote branch, if any ↓·2↑·1
remote
alias for remote-branch
followed by divergence
origin/main ↓·2↑·1
flags
Symbols representing the working tree state ✚ 1 ⚑ 1 … 2
stats
Insertions/deletions (lines). Disabled by default Σ56 Δ21
any string foo
Non-keywords are shown as-is hello gitmux
Some example layouts:
layout: [branch, .., remote-branch, divergence, " - ", flags]
layout: [branch, divergence, " - ", flags]
layout: [flags, " ", branch]
layout: [branch, "|", flags, "|", stats]
This is the list of additional configuration options
:
branch_max_len
Maximum displayed length for local and remote branch names 0
(no limit) branch_trim
Trim left, right or from the center of the branch (right
, left
or center
) right
(trailing) ellipsis
Character to show branch name has been truncated …
hide_clean
Hides the clean flag entirely false
swap_divergence
Swaps order of behind & ahead upstream counts false
divergence_space
Add a space between behind & ahead upstream counts false
flags_without_count
Show flags symbols without counts* false
*When flags_without_count
is true, shows only symbols (empty symbols show nothing). When false (default), shows symbols with counts (empty symbols show counts only).
Check the opened and closed issues and don't hesitate to report anything by filing a new one.
Gitmux takes too long to refresh?In case gitmux takes too long to refresh, try to decrease the value of the status-interval
option. A reasonable value is 2 seconds, which you can set in .tmux.conf
with:
Check out tmux man page for more details.
Pull requests are welcome.
For major changes, please open an issue first to open a discussion.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4