# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
  test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
  alias ls='ls --color=auto'
  alias dir='dir --color=auto'
  alias vdir='vdir --color=auto'
  alias grep='grep --color=auto'
  alias fgrep='fgrep --color=auto'
  alias egrep='egrep --color=auto'
fi

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

# Enable vi mode
set -o vi

function _prompt_first_line {
  local exit_code=$?
  if [ "$exit_code" = "0" ]; then
    exit_code=
  else
    # If the last command failed, display its error code at the right
    case $exit_code in
      129) exit_code="SIGHUP"     ;;  # 128 + 1
      130) exit_code="SIGINT"     ;;  # 128 + 2
      131) exit_code="SIGQUIT"    ;;  # 128 + 3
      132) exit_code="SIGILL"     ;;  # 128 + 4
      133) exit_code="SIGTRAP"    ;;  # 128 + 5
      134) exit_code="SIGABRT"    ;;  # 128 + 6
      134) exit_code="SIGIOT"     ;;  # 128 + 6
      135) exit_code="SIGBUS"     ;;  # 128 + 7
      136) exit_code="SIGFPE"     ;;  # 128 + 8
      137) exit_code="SIGKILL"    ;;  # 128 + 9
      138) exit_code="SIGUSR1"    ;;  # 128 + 10
      139) exit_code="SIGSEGV"    ;;  # 128 + 11
      140) exit_code="SIGUSR2"    ;;  # 128 + 12
      141) exit_code="SIGPIPE"    ;;  # 128 + 13
      142) exit_code="SIGALRM"    ;;  # 128 + 14
      143) exit_code="SIGTERM"    ;;  # 128 + 15
      144) exit_code="SIGSTKFLT"  ;;  # 128 + 16
      145) exit_code="SIGCHLD"    ;;  # 128 + 17
      146) exit_code="SIGCONT"    ;;  # 128 + 18
      147) exit_code="SIGSTOP"    ;;  # 128 + 19
      148) exit_code="SIGTSTP"    ;;  # 128 + 20
      149) exit_code="SIGTTIN"    ;;  # 128 + 21
      150) exit_code="SIGTTOU"    ;;  # 128 + 22
      151) exit_code="SIGURG"     ;;  # 128 + 23
      152) exit_code="SIGXCPU"    ;;  # 128 + 24
      153) exit_code="SIGXFSZ"    ;;  # 128 + 25
      154) exit_code="SIGVTALRM"  ;;  # 128 + 26
      155) exit_code="SIGPROF"    ;;  # 128 + 27
      156) exit_code="SIGWINCH"   ;;  # 128 + 28
      157) exit_code="SIGIO"      ;;  # 128 + 29
      158) exit_code="SIGPWR"     ;;  # 128 + 30
      159) exit_code="SIGSYS"     ;;  # 128 + 31
    esac
    exit_code=" \e[1m\e[31m$exit_code\e[0m"
  fi
  local time=$(date +%H:%M:%S)
  local dir=$PWD
  [[ "$dir" =~ ^"$HOME"(/|$) ]] && dir="~${dir#$HOME}"
  # TODO: virtualenv
  local grey="\e[38;5;244m"
  local reset="\e[0m"
  local blue="\e[38;5;37m"
  echo -e "$grey$time$reset $blue$dir$reset$exit_code"
}

PROMPT_COMMAND=_prompt_first_line

yellow="\001\e[38;5;3m\002"
grey="\001\e[38;5;244m\002"
reset="\001\e[0m\002"

PS1="$yellow\u$reset@$grey\h$reset "

# Setup environment variables
export PATH=$HOME/.local/bin:$PATH