_lp_pure_theme_activate() { local lp_terminal_format # # Easy to use colors. # local lp_terminal_format af_color='' ab_color='' # Colors: variables are local so they will have a value only # during config loading and will not conflict with other values # with the same names defined by the user outside the config. local BOLD="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${_LP_CLOSE_ESC}" # Foreground colors __lp_foreground_color 0 local BLACK="${_LP_OPEN_ESC}${af_color}${_LP_CLOSE_ESC}" local BOLD_GRAY="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${_LP_CLOSE_ESC}" __lp_foreground_color 1 local RED="${_LP_OPEN_ESC}${af_color}${_LP_CLOSE_ESC}" local BOLD_RED="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${_LP_CLOSE_ESC}" __lp_foreground_color 0 __lp_background_color 1 local WARN_RED="${_LP_OPEN_ESC}${af_color}${ab_color}${_LP_CLOSE_ESC}" __lp_foreground_color 7 local CRIT_RED="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${ab_color}${_LP_CLOSE_ESC}" __lp_foreground_color 3 local DANGER_RED="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${ab_color}${_LP_CLOSE_ESC}" __lp_foreground_color 2 local GREEN="${_LP_OPEN_ESC}${af_color}${_LP_CLOSE_ESC}" local BOLD_GREEN="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${_LP_CLOSE_ESC}" __lp_foreground_color 3 local YELLOW="${_LP_OPEN_ESC}${af_color}${_LP_CLOSE_ESC}" local BOLD_YELLOW="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${_LP_CLOSE_ESC}" __lp_foreground_color 4 local BLUE="${_LP_OPEN_ESC}${af_color}${_LP_CLOSE_ESC}" local BOLD_BLUE="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${_LP_CLOSE_ESC}" __lp_foreground_color 5 local PURPLE="${_LP_OPEN_ESC}${af_color}${_LP_CLOSE_ESC}" local MAGENTA="${PURPLE}" local PINK="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${_LP_CLOSE_ESC}" local BOLD_PURPLE="${PINK}" local BOLD_MAGENTA="${PINK}" __lp_foreground_color 6 local CYAN="${_LP_OPEN_ESC}${af_color}${_LP_CLOSE_ESC}" local BOLD_CYAN="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${_LP_CLOSE_ESC}" __lp_foreground_color 7 local WHITE="${_LP_OPEN_ESC}${af_color}${_LP_CLOSE_ESC}" local BOLD_WHITE="${_LP_OPEN_ESC}${_LP_TI_BOLD-}${af_color}${_LP_CLOSE_ESC}" # NO_COL is special: it will be used at runtime, not just during config loading NO_COL="${_LP_OPEN_ESC}${_LP_TI_RESET-}${_LP_CLOSE_ESC}" # # End of colors section. # # Configuration variables. LP_PURE_GIT_DIRTY=${LP_PURE_GIT_DIRTY:-"*"} LP_PURE_GIT_DOWN_ARROW=${LP_PURE_GIT_DOWN_ARROW:-"⇣"} LP_PURE_GIT_UP_ARROW=${LP_PURE_GIT_UP_ARROW:-"⇡"} LP_PURE_MARK_JOBS=${LP_PURE_MARK_JOBS:-"✦"} LP_PURE_COLOR_JOBS=${LP_PURE_COLOR_JOBS:-$RED} # Config with a direct counterpart in LP. LP_MARK_DEFAULT="❯" LP_MARK_STASH="≡" # Enable the few features implemented by Pure. LP_RUNTIME_THRESHOLD=5 LP_ENABLE_JOBS=1 LP_ENABLE_RUNTIME=1 LP_ENABLE_VIRTUALENV=1 LP_ENABLE_TITLE=1 LP_ENABLE_COLOR=1 LP_ENABLE_ERROR=1 # Disable almost all features. LP_USER_ALWAYS=0 LP_ENABLE_PERM=0 LP_ENABLE_SHORTEN_PATH=0 LP_ENABLE_PROXY=0 LP_ENABLE_TEMP=0 LP_ENABLE_DETACHED_SESSIONS=0 LP_ENABLE_LOAD=0 LP_ENABLE_BATT=0 LP_ENABLE_GIT=1 LP_ENABLE_SVN=0 LP_ENABLE_FOSSIL=0 LP_ENABLE_HG=0 LP_HG_COMMAND=0 LP_ENABLE_BZR=0 LP_ENABLE_TIME=0 LP_TIME_ANALOG=0 LP_ENABLE_RUNTIME_BELL=0 LP_ENABLE_NODE_VENV=0 LP_ENABLE_RUBY_VENV=0 LP_ENABLE_TERRAFORM=0 LP_ENABLE_CONTAINER=0 LP_ENABLE_SCLS=0 LP_ENABLE_AWS_PROFILE=0 LP_ENABLE_VCS_ROOT=0 LP_ENABLE_SCREEN_TITLE=0 LP_ENABLE_TITLE_COMMAND=0 LP_ENABLE_SSH_COLORS=0 LP_DISABLED_VCS_PATHS=0 LP_ENABLE_SUDO=0 LP_ENABLE_DIRSTACK=0 LP_ENABLE_KUBECONTEXT=0 LP_ENABLE_KUBE_NAMESPACE=0 LP_ENABLE_CMAKE=0 LP_ENABLE_SHLVL=0 LP_ENABLE_WIFI_STRENGTH=0 LP_COLOR_PATH="$BLUE" LP_COLOR_PATH_SEPARATOR="$BLUE" LP_COLOR_PATH_VCS_ROOT="$BOLD" LP_COLOR_PATH_LAST_DIR="$BOLD" LP_COLOR_PATH_ROOT="$BOLD_YELLOW" LP_COLOR_ERR="$RED" LP_COLOR_MARK="$MAGENTA" lp_terminal_format 242 -1 0 0 15 -1 LP_COLOR_USER_LOGGED="$lp_terminal_format" LP_COLOR_USER_ALT="$BOLD" LP_COLOR_USER_ROOT="$BOLD_YELLOW" lp_terminal_format 242 -1 0 0 15 -1 LP_COLOR_HOST="$lp_terminal_format" lp_terminal_format 242 -1 0 0 15 -1 LP_COLOR_UP="$lp_terminal_format" LP_COLOR_COMMITS="$CYAN" LP_COLOR_COMMITS_BEHIND="$CYAN" LP_COLOR_CHANGES="$CYAN" LP_COLOR_DIFF="$CYAN" LP_COLOR_RUNTIME="$YELLOW" LP_COLOR_VIRTUALENV="$CYAN" # The user or connection type is not expected to change from inside the # shell, so we build this just once. if _lp_username_color; then LP_USER="$lp_username_color" else LP_USER= fi if _lp_hostname_color ; then LP_HOST="$lp_hostname_color " else LP_HOST= fi } _lp_pure_theme_directory() { local lp_path_format _lp_path_format "$LP_COLOR_PATH" "$LP_COLOR_PATH_LAST_DIR" "$LP_COLOR_PATH_VCS_ROOT" "$LP_COLOR_PATH_SHORTENED" "/" "$LP_COLOR_PATH_SEPARATOR" LP_PWD="${lp_path_format}${NO_COL}" } _lp_pure_theme_prompt() { if _lp_jobcount_color; then LP_JOBS=" ${LP_PURE_COLOR_JOBS}${LP_PURE_MARK_JOBS}${NO_COL}" else LP_JOBS= fi if _lp_python_env_color; then LP_VENV="$lp_python_env_color " else LP_VENV= fi if _lp_runtime_color; then LP_RUNTIME=" $lp_runtime_color" else LP_RUNTIME= fi if _lp_error_color; then LP_ERR="$lp_error_color" else LP_ERR= fi if _lp_find_vcs && _lp_pure_vcs; then LP_VCS=" $lp_vcs_details_color" else LP_VCS= fi # No smart mark. LP_MARK="${LP_MARK_DEFAULT}${NO_COL}" _lp_pure_theme_prompt_template } _lp_pure_theme_prompt_template() { if [[ -f "${LP_PS1_FILE-}" ]]; then # shellcheck source=liquid.ps1 source "$LP_PS1_FILE" fi if [[ -z "${LP_PS1-}" ]]; then PS1="${LP_USER}${LP_HOST}${LP_PWD}${LP_VCS}${LP_RUNTIME}\n${LP_VENV}${LP_JOBS}" if [[ -n "${LP_ERR}" ]] ; then PS1+="${LP_COLOR_ERR}${LP_MARK} " else PS1+="${LP_COLOR_MARK}${LP_MARK} " fi # Get the core sections without prompt escapes and make them into a title. _lp_formatted_title "${LP_USER}${LP_HOST}${lp_path-}${LP_MARK}" else PS1=$LP_PS1 fi } _lp_pure_vcs() { local branch if _lp_vcs_branch; then branch="$lp_vcs_branch" # Pure does not handle booknmarks or tags. # if _lp_vcs_bookmark; then # branch+=": $lp_vcs_bookmark" # fi # elif _lp_vcs_bookmark; then # branch="$lp_vcs_bookmark" # elif _lp_vcs_tag; then # branch="tag: $lp_vcs_tag" else _lp_vcs_commit_id branch="${lp_vcs_commit_id:0:7}" fi lp_vcs_details_color="$LP_COLOR_UP" local has_commit= if _lp_vcs_commits_off_remote; then lp_vcs_details_color="$LP_COLOR_COMMITS_BEHIND" if [[ "$lp_vcs_commit_ahead" -ne "0" && "$lp_vcs_commit_behind" -ne "0" ]]; then has_commit="${LP_COLOR_COMMITS}${LP_PURE_GIT_UP_ARROW}{NO_COL}${LP_COLOR_COMMITS_BEHIND}${LP_PURE_GIT_DOWN_ARROW}${NO_COL}" elif [[ "$lp_vcs_commit_ahead" -ne "0" ]]; then has_commit="${LP_COLOR_COMMITS}${LP_PURE_GIT_UP_ARROW}${NO_COL}" lp_vcs_details_color="$LP_COLOR_COMMITS" elif [[ "$lp_vcs_commit_behind" -ne "0" ]]; then has_commit="${LP_COLOR_COMMITS_BEHIND}${LP_PURE_GIT_DOWN_ARROW}${NO_COL}" fi fi local ret has_lines= if _lp_vcs_uncommitted_files; then _lp_vcs_unstaged_lines; ret=$? # Only show unstaged changes if the VCS supports staging, otherwise # show uncommitted changes if (( ret == 0 )); then has_lines="${LP_PURE_GIT_DIRTY}" elif (( ret == 1 )); then has_lines="" else _lp_vcs_uncommitted_lines has_lines="${LP_PURE_GIT_DIRTY}" fi lp_vcs_details_color="$LP_COLOR_CHANGES" fi lp_vcs_details_color+="$branch" if [[ -n "$has_lines" || -n "$has_commit" ]]; then lp_vcs_details_color+="${NO_COL}" if [[ -n "$has_lines" ]]; then lp_vcs_details_color+="${LP_COLOR_DIFF}${has_lines}${NO_COL}${has_commit}" fi lp_vcs_details_color+="${has_commit}" fi if _lp_vcs_head_status; then lp_vcs_details_color+=" $LP_COLOR_CHANGES$lp_vcs_head_status" if [[ -n "${lp_vcs_head_details-}" ]]; then lp_vcs_details_color+=" ${lp_vcs_head_details}" fi fi if _lp_vcs_stash_count; then lp_vcs_details_color+=" $LP_COLOR_COMMITS$LP_MARK_STASH" fi # Pure does not show untracked files. # if _lp_vcs_untracked_files; then # lp_vcs_details_color+="$LP_COLOR_CHANGES$LP_MARK_UNTRACKED" # fi lp_vcs_details_color+="$NO_COL" }