lp-neon/neon.theme
2022-10-01 18:32:53 +02:00

294 lines
8.6 KiB
Text

_lp_neon_theme_activate() {
local lp_terminal_format
#
# User-configurable variables.
#
NEON_PRIMARY_COLOR=( ${NEON_PRIMARY_COLOR[@]+"${NEON_PRIMARY_COLOR[@]}"} )
[[ ${#NEON_PRIMARY_COLOR[@]} == 0 ]] && NEON_PRIMARY_COLOR=(2 -1 0 0 2 -1)
lp_terminal_format "${NEON_PRIMARY_COLOR[@]}"
local primary="$lp_terminal_format"
NEON_PRIMARYBOLD_COLOR=( ${NEON_PRIMARYBOLD_COLOR[@]+"${NEON_PRIMARYBOLD_COLOR[@]}"} )
[[ ${#NEON_PRIMARYBOLD_COLOR[@]} == 0 ]] && NEON_PRIMARYBOLD_COLOR=(2 -1 1 0 2 -1)
lp_terminal_format "${NEON_PRIMARYBOLD_COLOR[@]}"
local primarybold="$lp_terminal_format"
NEON_SECONDARY_COLOR=( ${NEON_SECONDARY_COLOR[@]+"${NEON_SECONDARY_COLOR[@]}"} )
[[ ${#NEON_SECONDARY_COLOR[@]} == 0 ]] && NEON_SECONDARY_COLOR=(4 -1 0 0 4 -1)
lp_terminal_format "${NEON_SECONDARY_COLOR[@]}"
local secondary="$lp_terminal_format"
NEON_SECONDARYBOLD_COLOR=( ${NEON_SECONDARYBOLD_COLOR[@]+"${NEON_SECONDARYBOLD_COLOR[@]}"} )
[[ ${#NEON_SECONDARYBOLD_COLOR[@]} == 0 ]] && NEON_SECONDARYBOLD_COLOR=(4 -1 1 0 4 -1)
lp_terminal_format "${NEON_SECONDARYBOLD_COLOR[@]}"
local secondarybold="$lp_terminal_format"
NEON_PROMPT_COLOR=( ${NEON_PROMPT_COLOR[@]+"${NEON_PROMPT_COLOR[@]}"} )
[[ ${#NEON_PROMPT_COLOR[@]} == 0 ]] && NEON_PROMPT_COLOR=(6 -1 0 0 6 -1)
lp_terminal_format "${NEON_PROMPT_COLOR[@]}"
local prompt="$lp_terminal_format"
NEON_WARN_COLOR=( ${NEON_WARN_COLOR[@]+"${NEON_WARN_COLOR[@]}"} )
[[ ${#NEON_WARN_COLOR[@]} == 0 ]] && NEON_WARN_COLOR=(1 -1 0 0 1 -1)
lp_terminal_format "${NEON_WARN_COLOR[@]}"
local warn="$lp_terminal_format"
local p="$primary"
local n="$NO_COL"
NEON_MARK_BRACKET_OPEN="${NEON_MARK_BRACKET_OPEN:-┥}"
LP_MARK_BRACKET_OPEN="$p${NEON_MARK_BRACKET_OPEN}$n"
NEON_MARK_BRACKET_CLOSE="${NEON_MARK_BRACKET_CLOSE:-┝}"
LP_MARK_BRACKET_CLOSE="$p${NEON_MARK_BRACKET_CLOSE}$n"
NEON_MARK_MULTIPLEXER_OPEN="${NEON_MARK_MULTIPLEXER_OPEN:-╣}"
NEON_MARK_MULTIPLEXER_CLOSE="${NEON_MARK_MULTIPLEXER_CLOSE:-╠}"
NEON_MARK_PERM="${NEON_MARK_PERM:-╏}"
NEON_MARK_SHORTEN_PATH="${NEON_MARK_SHORTEN_PATH:-┈}"
NEON_MARK_DIRSTACK="${NEON_MARK_DIRSTACK:-☰}"
NEON_MARK_SHLVL="${NEON_MARK_SHLVL:->}"
NEON_MARK_JOBS_SEPARATOR="${NEON_MARK_JOBS_SEPARATOR:-┄}"
NEON_MARK_WIFI="${NEON_MARK_WIFI:-╜}"
#
# Theme configuration.
#
LP_MARK_MULTIPLEXER_OPEN="${NEON_MARK_MULTIPLEXER_OPEN}"
LP_MARK_MULTIPLEXER_CLOSE="${NEON_MARK_MULTIPLEXER_CLOSE}"
LP_MARK_PERM="${NEON_MARK_PERM}"
LP_MARK_SHORTEN_PATH="${NEON_MARK_SHORTEN_PATH}"
LP_MARK_DIRSTACK="${NEON_MARK_DIRSTACK}"
LP_MARK_SHLVL="${NEON_MARK_SHLVL}"
LP_MARK_JOBS_SEPARATOR="${secondary}${NEON_MARK_JOBS_SEPARATOR}${n}"
LP_MARK_WIFI="${NEON_MARK_WIFI}"
LP_COLOR_PATH=$primary
LP_COLOR_PATH_SEPARATOR=$primary
LP_COLOR_PATH_SHORTENED=$primarybold
LP_COLOR_PATH_VCS_ROOT=$primarybold
LP_COLOR_PATH_LAST_DIR=$primarybold
LP_COLOR_PATH_ROOT=$primary
LP_COLOR_USER_LOGGED=$primary
LP_COLOR_USER_ALT=$primarybold
LP_COLOR_USER_ROOT=$warn
LP_COLOR_HOST=$primary
LP_COLOR_SSH=$primary
LP_COLOR_SU=$primarybold
LP_COLOR_TELNET=$warn
LP_COLOR_X11_ON=$primarybold
LP_COLOR_X11_OFF=$primary
LP_COLOR_WRITE=$primary
LP_COLOR_NOWRITE=$warn
LP_COLOR_IN_MULTIPLEXER=$primarybold
LP_COLOR_DIRSTACK=$primary
LP_COLOR_PROXY=$secondarybold
LP_COLOR_JOB_D=$secondary
LP_COLOR_JOB_R=$secondary
LP_COLOR_JOB_Z=$secondarybold
LP_COLOR_CHARGING_ABOVE=$secondary
LP_COLOR_CHARGING_UNDER=$secondarybold
LP_COLOR_DISCHARGING_ABOVE=$secondary
LP_COLOR_DISCHARGING_UNDER=$secondarybold
LP_COLOR_TIME=$secondary
LP_COLOR_VIRTUALENV=$secondary
LP_COLOR_NODE_VENV=$secondary
LP_COLOR_RUBY_VENV=$secondary
LP_COLOR_TERRAFORM=$secondary
LP_COLOR_CONTAINER=$secondary
LP_COLOR_KUBECONTEXT=$secondary
LP_COLOR_AWS_PROFILE=$secondary
LP_COLOR_SHLVL=$prompt
LP_COLOR_ERR=$warn
LP_COLOR_RUNTIME=$prompt
LP_COLOR_MARK=$prompt
LP_COLOR_MARK_ROOT=$warn
LP_COLOR_MARK_SUDO=$warn
_lp_default_theme_activate
}
_lp_neon_theme_directory() {
_lp_default_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_neon_theme_prompt() {
if _lp_jobcount_color; then
LP_JOBS="$lp_jobcount_color"
else
LP_JOBS=
fi
if _lp_temperature_color; then
LP_TEMP="$lp_temperature_color"
else
LP_TEMP=
fi
if _lp_load_color; then
LP_LOAD="$lp_load_color"
else
LP_LOAD=
fi
if _lp_battery_color; then
LP_BATT="$lp_battery_color"
else
LP_BATT=
fi
if _lp_wifi_signal_strength_color; then
LP_WIFI="$lp_wifi_signal_strength_color"
else
LP_WIFI=
fi
if _lp_time_color; then
LP_TIME="$lp_time_color"
elif _lp_analog_time_color; then
LP_TIME="$lp_analog_time_color"
else
LP_TIME=
fi
if _lp_sudo_active_color; then
LP_COLOR_MARK="$lp_sudo_active_color"
fi
if _lp_dirstack; then
LP_DIRSTACK="${LP_COLOR_DIRSTACK}${lp_dirstack}${LP_MARK_DIRSTACK}${NO_COL}"
else
LP_DIRSTACK=
fi
if _lp_http_proxy_color; then
LP_PROXY="$lp_http_proxy_color"
else
LP_PROXY=
fi
if _lp_shell_level; then
LP_SHLVL="${LP_MARK_SHLVL}"
local i
for (( i=1; i < lp_shell_level; ++i )) ; do
LP_SHLVL+="${LP_MARK_SHLVL}"
done
else
LP_SHLVL="${LP_MARK_SHLVL}"
fi
if _lp_python_env_color; then
LP_VENV="$lp_python_env_color"
else
LP_VENV=
fi
if _lp_node_env_color; then
LP_NODE_VENV="$lp_node_env_color"
else
LP_NODE_VENV=
fi
if _lp_ruby_env_color; then
LP_RUBY_VENV="$lp_ruby_env_color"
else
LP_RUBY_VENV=
fi
if _lp_kubernetes_context_color; then
LP_KUBECONTEXT="$lp_kubernetes_context_color"
else
LP_KUBECONTEXT=
fi
if _lp_terraform_env_color; then
LP_TFSPACE="$lp_terraform_env_color"
else
LP_TFSPACE=
fi
if _lp_container_color; then
LP_CONTAINER="$lp_container_color"
else
LP_CONTAINER=
fi
if _lp_software_collections_color; then
LP_SCLS="$lp_software_collections_color"
else
LP_SCLS=
fi
if _lp_aws_profile_color; then
LP_AWS_PROFILE="$lp_aws_profile_color"
else
LP_AWS_PROFILE=
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_vcs_details_color; then
LP_VCS="$lp_vcs_details_color"
else
LP_VCS=
fi
_lp_smart_mark
LP_MARK="${lp_smart_mark}${NO_COL}"
_lp_neon_theme_prompt_template
}
_lp_neon_theme_prompt_template() {
if [[ -f "${LP_PS1_FILE-}" ]]; then
# shellcheck source=liquid.ps1
source "$LP_PS1_FILE"
fi
if [[ -z "${LP_PS1-}" ]]; then
local first_left first_right second_left second_right third
local lp_terminal_format
lp_terminal_format "${NEON_PRIMARY_COLOR[@]}"
local m="$lp_terminal_format"
lp_terminal_format "${NEON_SECONDARY_COLOR[@]}"
local s="$lp_terminal_format"
lp_terminal_format "${NEON_PROMPT_COLOR[@]}"
local p="$lp_terminal_format"
local n="$NO_COL"
# ━┝┌─└─⤙⤚⤛⤜
first_left="$s${LP_PS1_PREFIX}─$n${LP_JOBS}$s─$n${LP_BATT}$s─$n${LP_WIFI}$s─$n${LP_LOAD}$s─$n${LP_TEMP}$s─$n${LP_PROXY}"
first_right="$s┄「$n${LP_SCLS}${LP_AWS_PROFILE}${LP_CONTAINER}${LP_VENV}${LP_NODE_VENV}${LP_RUBY_VENV}${LP_TFSPACE}${LP_KUBECONTEXT}$s」┄─$n${LP_TIME}$s─⎸$n"
first="${first_left}$s─$n${first_right}"
second_left="${LP_BRACKET_OPEN}${LP_USER}${LP_HOST}${LP_PERM}${LP_PWD}${LP_BRACKET_CLOSE}$m═$n${LP_DIRSTACK}$m═╾$n"
second_right="${LP_VCS}"
second="${second_left}${second_right}"
third="${LP_RUNTIME}$p━$n${LP_ERR}$p━$n${LP_COLOR_MARK}${LP_MARK}$p${LP_SHLVL}$n "
PS1=" $s┌─$n${first}\n$m╔╧══$n${second}\n$p┗━$n${third}"
# Get the core sections without prompt escapes and make them into a title.
_lp_formatted_title "${LP_PS1_PREFIX}${LP_BRACKET_OPEN}${LP_USER}${LP_HOST}${LP_MARK_PERM}${lp_path-}${LP_BRACKET_CLOSE}${LP_MARK}"
else
PS1=$LP_PS1
fi
}