A git status prompt for zsh written in Rust

Nigel Stanger authored on 20 Oct 2022
src Fiddled with prefixes & colours 1 year ago
.gitignore Added initial version 1 year ago
Cargo.lock Corrected package name and version 1 year ago
Cargo.toml Corrected package name and version 1 year ago
README.md Added install step to avoid code signing errors 1 year ago


A bare-bones Git prompt for zsh implemented in Rust for speed (and as a learning exercise).

Configuration is rudimentary because I figured “how often am I going to change the appearance of my Git prompt?”


  • Automatically detects Git repositories and only displays the prompt when inside one.
  • Includes the following Git status information:
    • current branch
    • commits ahead/behind remote
    • number of stashes (if any)
    • number of staged files (if any)
    • number of changed files (if any)
    • number of conflicting files (if any)
    • number of untracked files (if any)
    • number of ignored files (if any)
  • Basic format configuration via constants in the code.
  • Partial ANSI formatting support (currently only the ones I use).


  • Rust (compilation).
  • Your favourite Nerd Font.


  • Install Rust.
  • Install the relevant Nerd Font and set it as default in your terminal app.
  • Clone this repo.
  • cargo build --release
  • rm <bindir>/zsh-rust-git-promptMANDATORY on Apple Silicon, optional on Intel. Simply copying or moving the new binary over the top of the old one will cause a code signature mismatch and lead to obscure zsh: killed errors — see Updating Mac Software. Removing the old binary first flushes its code signature cache.
  • cp target/release/zsh-rust-git-prompt <bindir> where <bindir> is in PATH.
  • Add this to your .zshrc:
    RPROMPT='$(git status --porcelain=v2 --branch --show-stash -z 2>/dev/null | zsh-rust-git-prompt)'`
    (Or PROMPT if you prefer, but it’s really designed more for RPROMPT.)


  • Changing the configuration requires a rebuild (cargo build --release) and reinstall.
  • The strings used to generate the various components of the status line can be modified by changing the constants at the top of main.rs.
  • The format of the status line can be modified by changing the format strings at the bottom of main.rs.
  • There is only partial support for ANSI formatting codes at present, provided by the *_style() functions.