HL_PRECMD_LEFT=' ' HL_PRECMD_RIGHT='' HL_USER_LEFT='' HL_USER_RIGHT='' HL_CLOCK_LEFT='' HL_CLOCK_RIGHT='' HL_REPO='' HL_PUSH='↑' HL_PULL='↓' HL_CHANGES='' HL_PRECURSOR='' HL_PROMPT_FG=223 HL_PROMPT_BG=0 HL_USER_FG=223 HL_USER_BG=66 HL_USER_NOPERMS=160 HL_CLOCK_FG=214 HL_CLOCK_BG=0 hl_colored_echo_def() { hl_colored_echo $HL_PROMPT_FG $HL_PROMPT_BG $1 } hl_colored_echo() { echo -en "%F{$1}%K{$2}$3%k%f" } hl_user() { hl_colored_echo $HL_USER_BG $HL_PROMPT_BG $HL_USER_LEFT __user="$USER" [ ! -w . ] && hl_colored_echo $HL_USER_NOPERMS $HL_USER_BG $__user \ || hl_colored_echo $HL_USER_FG $HL_USER_BG $__user hl_colored_echo $HL_USER_BG $HL_PROMPT_BG $HL_USER_RIGHT } hl_time() { hl_colored_echo $HL_CLOCK_FG $HL_CLOCK_BG "$HL_CLOCK_LEFT$(date +%R)$HL_CLOCK_RIGHT" } hl_precursor() { __body=$HL_PRECURSOR if git rev-parse --git-dir > /dev/null 2>&1; then __gitstatus="$(git status -uno)" if echo $__gitstatus | grep -q 'behind' > /dev/null 2>&1; then __body=$HL_PULL elif echo $__gitstatus | grep -q 'ahead' > /dev/null 2>&1; then __body=$HL_PUSH elif echo $__gitstatus | grep -q 'changes' > /dev/null 2>&1; then __body=$HL_CHANGES else __body=$HL_REPO fi fi echo -en "$__body" } # user 12:45 > # user - white on blue - on machine # - white on green - ssh # - red on * - no write permissions # precursor - > - default # -  - git repo # - ↑ - unpushed changes # - ↓ - unpulled changes # -  - unstaged changes # - colored red - no write permissions hl_precmd() { __exitcode="$?" if [ "$_print_directory" -ne 0 ] || [ "$__exitcode" -ne 0 ]; then [ "$__exitcode" -ne 0 ] && hl_colored_echo $HL_USER_NOPERMS $HL_PROMPT_BG $HL_PRECMD_LEFT \ || hl_colored_echo $HL_USER_BG $HL_PROMPT_BG $HL_PRECMD_LEFT [ "$__exitcode" -ne 0 ] && hl_colored_echo $HL_PROMPT_FG $HL_USER_NOPERMS " $__exitcode " [ "$_print_directory" -ne 0 ] && hl_colored_echo $HL_USER_FG $HL_USER_BG " $PWD" [ "$_print_directory" -ne 0 ] && hl_colored_echo $HL_USER_BG $HL_PROMPT_BG "$HL_PRECMD_RIGHT\n" \ || hl_colored_echo $HL_USER_NOPERMS $HL_PROMPT_BG "$HL_PRECMD_RIGHT\n" fi } chpwd() { _print_directory=1 } preexec() { _print_directory=0 } setopt prompt_subst export PROMPT='$(hl_precmd)%F{$HL_PROMPT_FG}$(hl_user) $(hl_time) $(hl_precursor) %f'