# shellcheck shell=bash # shellcheck disable=SC2034 # Expected behavior for themes. # Prompt defaut configuration BARBUK_PROMPT=${BARBUK_PROMPT:="git-uptream-remote-logo ssh path scm python_venv ruby node terraform cloud duration exit"} # Theme custom glyphs # SCM SCM_GIT_CHAR_GITLAB=${BARBUK_GITLAB_CHAR:=' '} SCM_GIT_CHAR_BITBUCKET=${BARBUK_BITBUCKET_CHAR:=' '} SCM_GIT_CHAR_GITHUB=${BARBUK_GITHUB_CHAR:=' '} SCM_GIT_CHAR_DEFAULT=${BARBUK_GIT_DEFAULT_CHAR:=' '} SCM_GIT_CHAR_ICON_BRANCH=${BARBUK_GIT_BRANCH_ICON:=''} SCM_HG_CHAR=${BARBUK_HG_CHAR:='☿ '} SCM_SVN_CHAR=${BARBUK_SVN_CHAR:='⑆ '} # Exit code EXIT_CODE_ICON=${BARBUK_EXIT_CODE_ICON:=' '} # Programming and tools PYTHON_VENV_CHAR=${BARBUK_PYTHON_VENV_CHAR:=' '} RUBY_CHAR=${BARBUK_RUBY_CHAR:=' '} NODE_CHAR=${BARBUK_NODE_CHAR:=' '} TERRAFORM_CHAR=${BARBUK_TERRAFORM_CHAR:="❲t❳ "} # Cloud AWS_PROFILE_CHAR=${BARBUK_AWS_PROFILE_CHAR:=" aws "} SCALEWAY_PROFILE_CHAR=${BARBUK_SCALEWAY_PROFILE_CHAR:=" scw "} GCLOUD_CHAR=${BARBUK_GCLOUD_CHAR:=" google "} # Command duration COMMAND_DURATION_MIN_SECONDS=${COMMAND_DURATION_MIN_SECONDS:-1} # Ssh user and hostname display SSH_INFO=${BARBUK_SSH_INFO:=true} HOST_INFO=${BARBUK_HOST_INFO:=long} # Bash-it default glyphs customization SCM_NONE_CHAR= SCM_THEME_PROMPT_DIRTY=" ${bold_red?}✗" SCM_THEME_PROMPT_CLEAN=" ${bold_green?}✓" SCM_THEME_PROMPT_PREFIX="|" SCM_THEME_PROMPT_SUFFIX="${green?}| " SCM_GIT_BEHIND_CHAR="${bold_red?}↓${normal?}" SCM_GIT_AHEAD_CHAR="${bold_green?}↑${normal?}" SCM_GIT_UNTRACKED_CHAR="⌀" SCM_GIT_UNSTAGED_CHAR="${bold_yellow?}•${normal?}" SCM_GIT_STAGED_CHAR="${bold_green?}+${normal?}" GIT_THEME_PROMPT_DIRTY=" ${bold_red?}✗" GIT_THEME_PROMPT_CLEAN=" ${bold_green?}✓" GIT_THEME_PROMPT_PREFIX="${cyan?}" GIT_THEME_PROMPT_SUFFIX="${cyan?}" SCM_THEME_BRANCH_TRACK_PREFIX="${normal?} ⤏ ${cyan?}" SCM_THEME_CURRENT_USER_PREFFIX='  ' SCM_GIT_SHOW_CURRENT_USER=false NVM_THEME_PROMPT_PREFIX='' NVM_THEME_PROMPT_SUFFIX='' RVM_THEME_PROMPT_PREFIX='' RVM_THEME_PROMPT_SUFFIX='' RBENV_THEME_PROMPT_PREFIX=' ' RBENV_THEME_PROMPT_SUFFIX='' RBFU_THEME_PROMPT_PREFIX='' RBFU_THEME_PROMPT_SUFFIX='' function __git-uptream-remote-logo_prompt() { [[ "$(_git-upstream)" == "" ]] && SCM_GIT_CHAR="$SCM_GIT_CHAR_DEFAULT" local remote remote_domain remote=$(_git-upstream-remote) remote_domain=$(git config --get remote."$remote".url | awk -F'[@:.]' '{print $2}') # remove // suffix for https:// url remote_domain=${remote_domain//\//} case $remote_domain in github) SCM_GIT_CHAR="$SCM_GIT_CHAR_GITHUB" ;; gitlab) SCM_GIT_CHAR="$SCM_GIT_CHAR_GITLAB" ;; bitbucket) SCM_GIT_CHAR="$SCM_GIT_CHAR_BITBUCKET" ;; *) SCM_GIT_CHAR="$SCM_GIT_CHAR_DEFAULT" ;; esac echo "${purple?}$(scm_char)" } function git_prompt_info() { git_prompt_vars echo -e "on $SCM_GIT_CHAR_ICON_BRANCH $SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_GIT_AHEAD$SCM_GIT_BEHIND$SCM_GIT_STASH$SCM_SUFFIX " } function __exit_prompt() { if [[ "$exit_code" -ne 0 ]]; then echo "${purple?}${EXIT_CODE_ICON}${yellow?}${exit_code}${bold_orange?} " else echo "${bold_green}" fi } function __aws_profile_prompt() { if [[ -n "${AWS_PROFILE}" ]]; then echo -n "${bold_purple?}${AWS_PROFILE_CHAR}${normal?}${AWS_PROFILE} " fi } function __scaleway_profile_prompt() { if [[ -n "${SCW_PROFILE}" ]]; then echo -n "${bold_purple?}${SCALEWAY_PROFILE_CHAR}${normal?}${SCW_PROFILE} " fi } function __gcloud_prompt() { local active_gcloud_account="" active_gcloud_account="$(active_gcloud_account_prompt)" [[ -n "${active_gcloud_account}" ]] && echo "${bold_purple?}${GCLOUD_CHAR}${normal?}${active_gcloud_account} " } function __cloud_prompt() { __aws_profile_prompt __scaleway_profile_prompt __gcloud_prompt } function __terraform_prompt() { local terraform_workspace="" if [ -d .terraform ]; then terraform_workspace="$(terraform_workspace_prompt)" [[ -n "${terraform_workspace}" ]] && echo "${bold_purple?}${TERRAFORM_CHAR}${normal?}${terraform_workspace} " fi } function __node_prompt() { local node_version="" node_version="$(node_version_prompt)" [[ -n "${node_version}" ]] && echo "${bold_purple?}${NODE_CHAR}${normal?}${node_version} " } function __ruby_prompt() { local ruby_version="" ruby_version="$(ruby_version_prompt)" [[ -n "${ruby_version}" ]] && echo "${bold_purple?}${RUBY_CHAR}${normal?}${ruby_version} " } function __ssh_prompt() { # Detect ssh if [[ -n "${SSH_CONNECTION}" ]] && [ "$SSH_INFO" = true ]; then if [ "$HOST_INFO" = long ]; then host="\H" else host="\h" fi echo "${bold_blue?}\u${bold_orange?}@${cyan?}$host ${bold_orange?}in " fi } function __python_venv_prompt() { # Detect python venv if [[ -n "${CONDA_DEFAULT_ENV}" ]]; then echo "${bold_purple?}$PYTHON_VENV_CHAR${normal?}${CONDA_DEFAULT_ENV} " elif [[ -n "${VIRTUAL_ENV}" ]]; then echo "${bold_purple?}$PYTHON_VENV_CHAR${normal?}$(basename "${VIRTUAL_ENV}") " fi } function __path_prompt() { local dir_color=${green?} # Detect root shell if [ "$(whoami)" = root ]; then dir_color=${red?} fi echo "${dir_color}\w${normal} " } function __scm_prompt() { scm_prompt_info } function __duration_prompt() { [[ -n "$command_duration" ]] && echo "${command_duration} " } function __prompt-command() { exit_code="$?" command_duration=$(_command_duration) local wrap_char # Generate prompt PS1="\n " for segment in $BARBUK_PROMPT; do local info info="$(__"${segment}"_prompt)" [[ -n "${info}" ]] && PS1+="${info}" done # Cut prompt when it's too long if [[ ${#PS1} -gt $((COLUMNS * 2)) ]]; then wrap_char="\n" fi PS1="${PS1}${wrap_char}❯${normal} " } safe_append_prompt_command __prompt-command