A git status prompt for zsh written in Rust

src Testing comment 11 months ago
.gitignore Added initial version 11 months ago
Cargo.lock Corrected package name and version 11 months ago
Cargo.toml Corrected package name and version 11 months ago
README.md Added install step to avoid code signing errors 11 months 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.