# Mostly clueless

but curious to find out
Dec 17, 2012

# Git Information in Fish Shell’s Prompt

After toying around with Zsh for a while I stumbled upon Fish or more precisely Ridiculous Fish which is a fork of the original Fish Shell.

Since Fish does not have a configuration framework like oh-my-zsh you have to setup your prompt with additional Git information yourself. I consider this an advantage though as you can't just take a bunch of configuration files from somewhere without having an idea what they actually do.

It took me a while to find this part of the Fish source code which documents this functionality quite well. An example which you can put into `~/.config/fish/config.fish` follows below:

    set normal (set_color normal)
    set magenta (set_color magenta)
    set yellow (set_color yellow)
    set green (set_color green)
    set red (set_color red)
    set gray (set_color -o black)

    # Fish git prompt
    set __fish_git_prompt_showdirtystate 'yes'
    set __fish_git_prompt_showstashstate 'yes'
    set __fish_git_prompt_showuntrackedfiles 'yes'
    set __fish_git_prompt_showupstream 'yes'
    set __fish_git_prompt_color_branch yellow
    set __fish_git_prompt_color_upstream_ahead green
    set __fish_git_prompt_color_upstream_behind red

    # Status Chars
    set __fish_git_prompt_char_dirtystate '⚡'
    set __fish_git_prompt_char_stagedstate '→'
    set __fish_git_prompt_char_untrackedfiles '☡'
    set __fish_git_prompt_char_stashstate '↩'
    set __fish_git_prompt_char_upstream_ahead '+'
    set __fish_git_prompt_char_upstream_behind '-'

    function fish_prompt
      set last_status $status

      set_color $fish_color_cwd
      printf '%s' (prompt_pwd)
      set_color normal

      printf '%s ' (__fish_git_prompt)

      set_color normal
    end