diff --git a/themes/essential/essential.theme.bash b/themes/essential/essential.theme.bash new file mode 100644 index 00000000..c0b1a38e --- /dev/null +++ b/themes/essential/essential.theme.bash @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +# https://github.com/koalaman/shellcheck/wiki/Sc2154 +# shellcheck disable=SC2154 + +function _user-prompt() { + local -r user='\\u' + + if [[ "${EUID}" -eq 0 ]]; then + # Privileged users: + local -r user_color="${bold_red}" + else + # Standard users: + local -r user_color="${bold_green}" + fi + + # Print the current user's name (colored according to their current EUID): + echo -e "${user_color}${user}${normal}" +} + +function _host-prompt() { + local -r host='\\h' + + # Check whether or not $SSH_TTY is set: + if [[ -z "${SSH_TTY}" ]]; then + # For local hosts, set the host's prompt color to blue: + local -r host_color="${bold_blue}" + else + # For remote hosts, set the host's prompt color to red: + local -r host_color="${bold_red}" + fi + + # Print the current hostname (colored according to $SSH_TTY's status): + echo -e "${host_color}${host}${normal}" +} + +function _user-at-host-prompt() { + # Concatenate the user and host prompts into: user@host: + echo -e "$(_user-prompt)${bold_white}@$(_host-prompt)" +} + +function _exit-status-prompt() { + local -r prompt_string="${1}" + local -r exit_status="${2}" + + # Check the exit status of the last command captured by $exit_status: + if [[ "${exit_status}" -eq 0 ]]; then + # For commands that return an exit status of zero, set the exit status's + # notifier to green: + local -r exit_status_color="${bold_green}" + else + # For commands that return a non-zero exit status, set the exit status's + # notifier to red: + local -r exit_status_color="${bold_red}" + fi + + echo -ne "${exit_status_color}" + if [[ "${prompt_string}" -eq 1 ]]; then + # $PS1: + echo -e " +${normal} " + elif [[ "${prompt_string}" -eq 2 ]]; then + # $PS2: + echo -e " |${normal} " + else + # Default: + echo -e " ?${normal} " + fi +} + +function _ps1() { + local -r time='\\t' + + echo -ne "${bold_white}${time} " + echo -ne "$(_user-at-host-prompt)" + echo -e "${bold_white}:${normal}${PWD}" + echo -e "$(_exit-status-prompt 1 "${exit_status}")" +} + +function _ps2() { + echo -e "$(_exit-status-prompt 2 "${exit_status}")" +} + +function prompt_command() { + # Capture the exit status of the last command: + local -r exit_status="${?}" + + # Build the $PS1 prompt: + PS1="$(_ps1)" + + # Build the $PS2 prompt: + PS2="$(_ps2)" +} + +safe_append_prompt_command prompt_command + +# vim: sw=2 ts=2 et: