diff --git a/starship.theme b/starship.theme new file mode 100644 index 0000000..fd51a99 --- /dev/null +++ b/starship.theme @@ -0,0 +1,343 @@ + +_lp_starship_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. + # + + # Liquid Prompt reconfig + + LP_COLOR_USER="$BOLD_YELLOW" + LP_COLOR_USER_ALT="$BOLD_YELLOW" + LP_COLOR_USER_LOGGED="$BOLD_YELLOW" + LP_COLOR_USER_ROOT="$BOLD_RED" + LP_COLOR_SHLVL="$BOLD_YELLOW" + LP_MARK_SHLVL="โ†•๏ธ " + LP_COLOR_KUBECONTEXT="$BOLD_CYAN" + LP_MARK_KUBECONTEXT="โ˜ธ " + LP_COLOR_CONTAINER="$BLUE" + LP_MARK_PERM="" + LP_COLOR_PATH="$CYAN" # Starship use bold cyan, but that hides LP's hint on directories. + LP_COLOR_PATH_LAST_DIR="$BOLD_CYAN" + LP_COLOR_PATH_SEPARATOR="$CYAN" + LP_COLOR_PATH_SHORTENED="$BOLD_CYAN" + LP_COLOR_PATH_VCS_ROOT="$BOLD_CYAN" + LP_COLOR_WRITE="" # "${BOLD_CYAN}" + LP_COLOR_NOWRITE="${RED}๐Ÿ”’" + lp_terminal_format 105 -1 1 0 15 -1 + LP_COLOR_TERRAFORM="$lp_terminal_format" + # LP_MARK_TERRAFORM="๐Ÿ’ " # TODO in LP + LP_COLOR_MARK_SUDO="$BOLD_BLUE" + LP_COLOR_RUNTIME="$BOLD_YELLOW" + LP_COLOR_JOB_D="$BOLD_BLUE" + LP_COLOR_JOB_R="$BOLD_BLUE" + LP_COLOR_JOB_Z="$BOLD_BLUE" + LP_MARK_ADAPTER="๏–ƒ " + LP_MARK_BATTERY="๏–‚ " + LP_COLOR_TIME="$BOLD_YELLOW" + LP_COLOR_ERR="$BOLD_RED" + LP_COLOR_MARK="$BOLD_WHITE" + + # Starship Config + LP_STARSHIP_MARK_SSH="๐ŸŒ" + LP_STARSHIP_MARK_SUDO="๐Ÿง™ " + + _lp_user + local -i user_type="$?" + + # if (( user_type < 2 )); then # if user is not root + # if (( LP_ENABLE_SUDO )); then + # LP_COLOR_MARK_NO_SUDO="$LP_COLOR_MARK" + # fi + # else # root! + # if (( ! LP_ENABLE_VCS_ROOT )); then + # LP_MARK_DISABLED="$LP_MARK_DEFAULT" + # fi + # fi + + # 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 in " + else + LP_USER= + fi + + _lp_starship_hostname_color + LP_HOST="$lp_hostname_color" + + # If we are running in a terminal multiplexer, brackets are colored + if _lp_multiplexer; then + LP_BRACKET_OPEN="${LP_COLOR_IN_MULTIPLEXER}${LP_MARK_MULTIPLEXER_OPEN}${NO_COL}" + LP_BRACKET_CLOSE="${LP_COLOR_IN_MULTIPLEXER}${LP_MARK_MULTIPLEXER_CLOSE}${NO_COL}" + else + LP_BRACKET_OPEN="${LP_MARK_BRACKET_OPEN}" + LP_BRACKET_CLOSE="${LP_MARK_BRACKET_CLOSE}" + fi + + _lp_terminal_device + # shellcheck disable=SC2034 + LP_TTYN=$lp_terminal_device +} + +_lp_starship_theme_directory() { + _lp_default_theme_directory +} + +_lp_starship_theme_prompt() { + _lp_starship_theme_prompt_data + _lp_starship_theme_prompt_template +} + +_lp_starship_theme_prompt_data() { + # left of main prompt: space at right + 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" + LP_STARSHIP_SUDO="${LP_COLOR_MARK_SUDO}${LP_STARSHIP_MARK_SUDO}${NO_COL} " + fi + + # if _lp_dirstack_color; then + # LP_DIRSTACK=" $lp_dirstack_color" + # else + # LP_DIRSTACK= + # fi + + # in main prompt: no space + # if _lp_http_proxy_color; then + # LP_PROXY="$lp_http_proxy_color" + # else + # LP_PROXY= + # fi + + if _lp_shell_level_color; then + LP_SHLVL="$lp_shell_level_color " + else + LP_SHLVL= + fi + + if _lp_python_env_color ; then + LP_VENV="via $lp_python_env_color " + else + LP_VENV= + fi + + if _lp_node_env_color; then + LP_NODE_VENV="via $lp_node_env_color " + else + LP_NODE_VENV= + fi + + if _lp_ruby_env_color; then + LP_RUBY_VENV="via $lp_ruby_env_color " + else + LP_RUBY_VENV= + fi + + if _lp_kubernetes_context_color; then + LP_KUBECONTEXT="via $lp_kubernetes_context_color " + else + LP_KUBECONTEXT= + fi + + if _lp_terraform_env_color; then + LP_TFSPACE="via $lp_terraform_env_color " + else + LP_TFSPACE= + fi + + if _lp_container_color; then + LP_CONTAINER="via $lp_container_color " + else + LP_CONTAINER= + fi + + if _lp_software_collections_color; then + LP_SCLS="via $lp_software_collections_color " + else + LP_SCLS= + fi + + if _lp_aws_profile_color; then + LP_AWS_PROFILE="via $lp_aws_profile_color " + else + LP_AWS_PROFILE= + fi + + if _lp_cmake_color; then + LP_CMAKE="via $lp_cmake_color " + else + LP_CMAKE= + fi + + if _lp_runtime_color; then + LP_RUNTIME="took $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="on $lp_vcs_details_color " + else + LP_VCS= + fi + + # Should be called after the dev env group above. + # if _lp_dev_env_color ; then + # LP_DEV_ENV="$lp_dev_env_color" + # else + # LP_DEV_ENV= + # fi + + _lp_smart_mark + LP_MARK="${lp_smart_mark}${NO_COL} " +} + + +_lp_starship_theme_prompt_template() { + +# Starship sections: +# username, hostname, localip, shlvl, singularity, kubernetes, directory, vcsh, git_branch, git_commit, git_state, git_metrics, git_status, hg_branch, docker_context, package, c, cmake, cobol, daml, dart, deno, dotnet, elixir, elm, erlang, golang, haskell, helm, java, julia, kotlin, lua, nim, nodejs, ocaml, perl, php, pulumi, purescript, python, raku, rlang, red, ruby, rust, scala, swift, terraform, vlang, vagrant, zig, buf, nix_shell, conda, spack, memory_usage, aws, gcloud, openstack, azure, env_var, crystal, custom, sudo, cmd_duration, line_break +# jobs, battery, time, status, container, shell + +# Not supported by LP: +# localip, vcsh, package, C, cobol, daml, dart, deno, dotnet, elixir, elm, erlang, golang, haskell, helm, java, julia, kotlin, lua, nim, ocaml, perl, php, pulumi, purescript, raku, rlang, red, ruby, rust, scala, swift, vlang, vagrant, zig, buf, nix_shell, conda, spack, memory_usage, gcloud, openstack, azure, env_var, crystal + +# Not supported by Starship: +# load, temp, title, X11, chroot, SU, telnet, ssh color, wifi, dirstack, proxy, analog time, tmux/screen. + + if [[ -f "${LP_PS1_FILE-}" ]]; then + # shellcheck source=liquid.ps1 + source "$LP_PS1_FILE" + fi + + if [[ -z "${LP_PS1-}" ]]; then + # Docker is displayed along with Singularity and Kubernetes (strange that it is not the case in Starshipโ€ฆ), + # in the container section, which is not duplicated at the end, like in Starship (WTF?). + local n='\n' + PS1="${LP_USER}${LP_HOST}${LP_SHLVL}${LP_CONTAINER}${LP_KUBECONTEXT}${LP_PWD}${LP_PERM} ${LP_VCS}${LP_CMAKE}${LP_NODE_VENV}${LP_VENV}${LP_TFSPACE}${LP_AWS_PROFILE}${LP_PS1_POSTFIX}${LP_STARSHIP_SUDO}${LP_RUNTIME}${n}" + PS1+="${LP_JOBS}${LP_BATTERY}${LP_TIME}${LP_ERR}${LP_COLOR_MARK}${LP_MARK}" + + # No title support in Starship. + else + PS1=$LP_PS1 + fi + +} + + +_lp_starship_hostname_color() { + # No X11 support in Starship. + # No Chroot support in Starship. + + if _lp_hostname; then + case "$lp_connection" in + lcl) + lp_hostname_color+="${LP_COLOR_HOST}${lp_hostname}${NO_COL}" + ;; + ssh) + # No hashed host color in Starship. + lp_hostname_color+="${LP_COLOR_SSH}${LP_STARSHIP_MARK_SSH}${NO_COL} on ${LP_COLOR_HOST}${lp_hostname}${NO_COL}" + ;; + # No SU support in Starship. + # No telnet support in Starship. + esac + fi +} +