function gitinfo
  if git rev-parse --is-inside-work-tree >/dev/null 2>&1
    set -l branch (git branch --show-current)
    set -l staged ""
    set -l dirty ""
    set -l untracked ""
  if not git diff --quiet
    set dirty (set_color yellow)"*"
  end
  if not git diff --cached --quiet
    set staged (set_color green)"+"
  end
  set -l untracked_files (git ls-files --others --exclude-standard)
  if test -n "$untracked_files"
    set untracked (set_color red)" *"
  end
  echo (set_color magenta)"($branch)"$staged$dirty$untracked(set_color normal)
  end
end
