zsh-rust-git-prompt /
# zsh-rust-git-prompt

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?”

## Features

* 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).

## Dependencies

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

## Installation

* Install Rust.
* Install the relevant Nerd Font and set it as default in your terminal app.
* Clone this repo.
* `cargo build --release`
* `mv 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`.)

## Configuration

* 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 ``.
* The format of the status line can be modified by changing the format strings at the bottom of ``.
* There is only partial support for ANSI formatting codes at present, provided by the `*_style()` functions.