#!/bin/bash set_prompt() { last_exitcode="$?" declare checkmark fancy_x timestamp git_prompt_msg git_status_short git_status_colour git_unstaged git_untracked PS1="${c_reset}" # Set a fancy symbol to indicate the last exitcode if (( last_exitcode )); then last_exitcode_indicator="${c_red}!${c_reset}" else last_exitcode_indicator="${c_green}.${c_reset}" fi # Set the username colour if (( UID )); then user_colour="${c_green}" user_indicator='$' else user_colour="${c_red}" user_indicator='#' fi user_indicator='>' # Set the git prompt message git rev-parse --git-dir &>/dev/null && { git_current_branch="$(git rev-parse --abbrev-ref HEAD)" while read; do case "$REPLY" in (' M'*|A*|D*) git_unstaged=1;; (\?\?*) git_untracked=1;; esac done < <( git status --short ) (( git_unstaged )) && { git_status_short+='c' git_status_colour="${c_red}" } (( git_untracked )) && { git_status_short+='f' git_status_colour="${c_red}" } git_status_short=${git_status_short:-ok} git_status_colour=${git_status_colour:-"${c_green}"} git_prompt_msg="(${c_cyan}$git_current_branch${c_reset}[${git_status_colour}${git_status_short}${c_reset}]) " } set_title "${USER}@${HOSTNAME}" if [[ "$PWD" == "$HOME" ]]; then prompt_pwd='~' elif [[ "$PWD" =~ ^"$HOME" ]]; then prompt_pwd="~/${PWD##*${HOME}/}" else prompt_pwd="$PWD" fi prompt=( "${c_reset}" "[${last_exitcode_indicator}]" "${user_colour}${USER}${c_reset}@${c_lightblue}${HOSTNAME}" "$prompt_pwd" "${git_prompt_msg}${user_colour}${user_indicator}" "$c_reset" ) PS1="${prompt[@]}" }