# vim:ft=zsh ts=2 sw=2 sts=2
# brethil oh-my-zsh theme
# See "EXPANSION OF PROMPT SEQUENCES" in `man zshmisc`
# Note: Most of the expansions/color sequences can be tested using `print -P`

  # prints hostname on an orange background if on an ssh connection, adds username if root

local user='%(!.%K{160}%F{255}%B%n%b%k%f.)' # prints 'root' on a red background if user is root
local host='%K{202}%B%F{255}%m%f%k%b' # bold host name on an orange background
local open_bracket='%(!.[.)'
local close_bracket='%(!.].)'
local at='%(!.@.)'
local user_prompt
if [[ -n $SSH_CONNECTION ]]; then
  user_prompt="[${user}${at}${host}]"
else
  user_prompt="${open_bracket}${user}${close_bracket}"
fi

local job_prompt="%(1j.%B%K{202}%F{220} %j %k%b.)"


local shlvl_prompt
# Shows SHLVL on a magenta background if SHLVL > 1 (2 if in a tmux session)
if [[ -z "$TMUX" ]]; then
  shlvl_prompt="%(2L.%K{161}%F{255}%B %L %f%b%k.)"
else
  shlvl_prompt="%(3L.%K{161}%F{255}%B $((SHLVL-1)) %f%b%k.)"
fi

# Shows last 3 items in path if there are more than 4
local path_prompt='[%F{green}%(4~:…/%3~:%~)%f]'

# PREFIX/SUFFIX are added before/after `git_prompt_info`
ZSH_THEME_GIT_PROMPT_PREFIX=" %f%{$fg[yellow]%} "
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} |"

ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[white]%}%{$fg[red]%}x%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN=" %{$fg[white]%}%{$fg[green]%}√%{$reset_color%}"

# The following are part of `git_prompt_status`
# Rules:
#    ? : untracked
#    * : modified
#    + : added
#    $ : stashed
ZSH_THEME_GIT_PROMPT_STASHED="%B%F{32}$%b%f" # blue
# ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[red]%}✗ " # this is equivalent to DIRTY, if DISABLE_UNTRACKED_FILES_DIRTY is set
ZSH_THEME_GIT_PROMPT_ADDED="%B%F{34}+%b%f" # green
ZSH_THEME_GIT_PROMPT_UNTRACKED="%B%F{red}?%b%f" # red

# The following are part of `git_remote_status`
# ZSH_THEME_GIT_PROMPT_EQUAL_REMOTE="%{$fg[green]%}="
ZSH_THEME_GIT_PROMPT_AHEAD_REMOTE=">"
ZSH_THEME_GIT_PROMPT_BEHIND_REMOTE="<"
ZSH_THEME_GIT_PROMPT_DIVERGED_REMOTE="<>"


local BOLD_PURPLE='%B%F{5}'
local CLEAR='%f%b'
local venv
function virtualenv_info {
    [ -z "$VIRTUAL_ENV" ] && return
    venv="$(basename "$VIRTUAL_ENV")"
    if [[ "$venv" == ".venv" ]]; then
      venv="$(basename $(dirname "$VIRTUAL_ENV") )"
    fi

    # bold (%B) purple (%F{5})
    echo -n " %B%F{5}<$venv>%b%f "
}


local git_prompt='$(git_prompt_info)$(git_prompt_status)$(git_remote_status)'

local return_code_RPS1='%(?..%B%F{88}-$?-%f%b)'

local success="%B%F{28} →%f%b"
local failure="%B%{$fg[red]%} x%b%{$reset_color%}"
local prompt_with_previous_return_status="%(?:$success:$failure) "

function prompt_too_long(){
  # prints a newline if less than $COLUMNS/2 characters remain to the right margin, see end of `man zshmisc`
  echo "%-$((COLUMNS/2))(l..\n)"
}

## oh-my-zsh vi-mode plugins indicators:
export MODE_INDICATOR="[%B%K{red}nav%k%b]" # red background
export INSERT_MODE_INDICATOR="[%B%K{28}ins%k%b]" # green background

# put it all together
PROMPT='$(virtualenv_info)'"${user_prompt}${path_prompt}${git_prompt}${job_prompt}${shlvl_prompt}$(prompt_too_long)${prompt_with_previous_return_status}"

# Right prompt is just return code and time
RPS1="${return_code_RPS1}"'$(vi_mode_prompt_info)[%*]'