218 lines
7.6 KiB
Plaintext
218 lines
7.6 KiB
Plaintext
|
#
|
||
|
# Spaceship ZSH
|
||
|
#
|
||
|
# Author: Denys Dovhan, denysdovhan.com
|
||
|
# License: MIT
|
||
|
# https://github.com/denysdovhan/spaceship-prompt
|
||
|
|
||
|
# Current version of Spaceship
|
||
|
# Useful for issue reporting
|
||
|
export SPACESHIP_VERSION='3.11.0'
|
||
|
|
||
|
# Common-used variable for new line separator
|
||
|
NEWLINE='
|
||
|
'
|
||
|
|
||
|
# Determination of Spaceship working directory
|
||
|
# https://git.io/vdBH7
|
||
|
if [[ -z "$SPACESHIP_ROOT" ]]; then
|
||
|
if [[ "${(%):-%N}" == '(eval)' ]]; then
|
||
|
if [[ "$0" == '-antigen-load' ]] && [[ -r "${PWD}/spaceship.zsh" ]]; then
|
||
|
# Antigen uses eval to load things so it can change the plugin (!!)
|
||
|
# https://github.com/zsh-users/antigen/issues/581
|
||
|
export SPACESHIP_ROOT=$PWD
|
||
|
else
|
||
|
print -P "%F{red}You must set SPACESHIP_ROOT to work from within an (eval).%f"
|
||
|
return 1
|
||
|
fi
|
||
|
else
|
||
|
# Get the path to file this code is executing in; then
|
||
|
# get the absolute path and strip the filename.
|
||
|
# See https://stackoverflow.com/a/28336473/108857
|
||
|
export SPACESHIP_ROOT=${${(%):-%x}:A:h}
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# CONFIGURATION
|
||
|
# The default configuration that can be overridden in .zshrc
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
if [ -z "$SPACESHIP_PROMPT_ORDER" ]; then
|
||
|
SPACESHIP_PROMPT_ORDER=(
|
||
|
time # Time stampts section
|
||
|
user # Username section
|
||
|
dir # Current directory section
|
||
|
host # Hostname section
|
||
|
git # Git section (git_branch + git_status)
|
||
|
hg # Mercurial section (hg_branch + hg_status)
|
||
|
package # Package version
|
||
|
node # Node.js section
|
||
|
ruby # Ruby section
|
||
|
elm # Elm section
|
||
|
elixir # Elixir section
|
||
|
xcode # Xcode section
|
||
|
swift # Swift section
|
||
|
golang # Go section
|
||
|
php # PHP section
|
||
|
rust # Rust section
|
||
|
haskell # Haskell Stack section
|
||
|
julia # Julia section
|
||
|
docker # Docker section
|
||
|
aws # Amazon Web Services section
|
||
|
venv # virtualenv section
|
||
|
conda # conda virtualenv section
|
||
|
pyenv # Pyenv section
|
||
|
dotnet # .NET section
|
||
|
ember # Ember.js section
|
||
|
kubecontext # Kubectl context section
|
||
|
terraform # Terraform workspace section
|
||
|
exec_time # Execution time
|
||
|
line_sep # Line break
|
||
|
battery # Battery level and status
|
||
|
vi_mode # Vi-mode indicator
|
||
|
jobs # Background jobs indicator
|
||
|
exit_code # Exit code section
|
||
|
char # Prompt character
|
||
|
)
|
||
|
fi
|
||
|
|
||
|
if [ -z "$SPACESHIP_RPROMPT_ORDER" ]; then
|
||
|
SPACESHIP_RPROMPT_ORDER=(
|
||
|
# empty by default
|
||
|
)
|
||
|
fi
|
||
|
|
||
|
# PROMPT
|
||
|
SPACESHIP_PROMPT_ADD_NEWLINE="${SPACESHIP_PROMPT_ADD_NEWLINE=true}"
|
||
|
SPACESHIP_PROMPT_SEPARATE_LINE="${SPACESHIP_PROMPT_SEPARATE_LINE=true}"
|
||
|
SPACESHIP_PROMPT_FIRST_PREFIX_SHOW="${SPACESHIP_PROMPT_FIRST_PREFIX_SHOW=false}"
|
||
|
SPACESHIP_PROMPT_PREFIXES_SHOW="${SPACESHIP_PROMPT_PREFIXES_SHOW=true}"
|
||
|
SPACESHIP_PROMPT_SUFFIXES_SHOW="${SPACESHIP_PROMPT_SUFFIXES_SHOW=true}"
|
||
|
SPACESHIP_PROMPT_DEFAULT_PREFIX="${SPACESHIP_PROMPT_DEFAULT_PREFIX="via "}"
|
||
|
SPACESHIP_PROMPT_DEFAULT_SUFFIX="${SPACESHIP_PROMPT_DEFAULT_SUFFIX=" "}"
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# LIBS
|
||
|
# Spaceship utils/hooks/etc
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
# Load utils
|
||
|
source "$SPACESHIP_ROOT/lib/utils.zsh"
|
||
|
|
||
|
# load hooks
|
||
|
source "$SPACESHIP_ROOT/lib/hooks.zsh"
|
||
|
|
||
|
# load section utils
|
||
|
source "$SPACESHIP_ROOT/lib/section.zsh"
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# SECTIONS
|
||
|
# Sourcing sections the prompt consists of
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
for section in $(spaceship::union $SPACESHIP_PROMPT_ORDER $SPACESHIP_RPROMPT_ORDER); do
|
||
|
if [[ -f "$SPACESHIP_ROOT/sections/$section.zsh" ]]; then
|
||
|
source "$SPACESHIP_ROOT/sections/$section.zsh"
|
||
|
elif spaceship::defined "spaceship_$section"; then
|
||
|
# Custom section is declared, nothing else to do
|
||
|
continue
|
||
|
else
|
||
|
echo "Section '$section' have not been loaded."
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# BACKWARD COMPATIBILITY WARNINGS
|
||
|
# Show deprecation messages for options that are set, but not supported
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
spaceship::deprecated SPACESHIP_PROMPT_SYMBOL "Use %BSPACESHIP_CHAR_SYMBOL%b instead."
|
||
|
spaceship::deprecated SPACESHIP_BATTERY_ALWAYS_SHOW "Use %BSPACESHIP_BATTERY_SHOW='always'%b instead."
|
||
|
spaceship::deprecated SPACESHIP_BATTERY_CHARGING_SYMBOL "Use %BSPACESHIP_BATTERY_SYMBOL_CHARGING%b instead."
|
||
|
spaceship::deprecated SPACESHIP_BATTERY_DISCHARGING_SYMBOL "Use %BSPACESHIP_BATTERY_SYMBOL_DISCHARGING%b instead."
|
||
|
spaceship::deprecated SPACESHIP_BATTERY_FULL_SYMBOL "Use %BSPACESHIP_BATTERY_SYMBOL_FULL%b instead."
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# PROMPTS
|
||
|
# An entry point of prompt
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
# PROMPT
|
||
|
# Primary (left) prompt
|
||
|
spaceship_prompt() {
|
||
|
# Retrieve exit code of last command to use in exit_code
|
||
|
# Must be captured before any other command in prompt is executed
|
||
|
# Must be the very first line in all entry prompt functions, or the value
|
||
|
# will be overridden by a different command execution - do not move this line!
|
||
|
RETVAL=$?
|
||
|
|
||
|
# Should it add a new line before the prompt?
|
||
|
[[ $SPACESHIP_PROMPT_ADD_NEWLINE == true ]] && echo -n "$NEWLINE"
|
||
|
spaceship::compose_prompt $SPACESHIP_PROMPT_ORDER
|
||
|
}
|
||
|
|
||
|
# $RPROMPT
|
||
|
# Optional (right) prompt
|
||
|
spaceship_rprompt() {
|
||
|
# Retrieve exit code of last command to use in exit_code
|
||
|
RETVAL=$?
|
||
|
|
||
|
spaceship::compose_prompt $SPACESHIP_RPROMPT_ORDER
|
||
|
}
|
||
|
|
||
|
# PS2
|
||
|
# Continuation interactive prompt
|
||
|
spaceship_ps2() {
|
||
|
# Retrieve exit code of last command to use in exit_code
|
||
|
RETVAL=$?
|
||
|
|
||
|
local char="${SPACESHIP_CHAR_SYMBOL_SECONDARY="$SPACESHIP_CHAR_SYMBOL"}"
|
||
|
spaceship::section "$SPACESHIP_CHAR_COLOR_SECONDARY" "$char"
|
||
|
}
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# SETUP
|
||
|
# Setup requirements for prompt
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
# Runs once when user opens a terminal
|
||
|
# All preparation before drawing prompt should be done here
|
||
|
prompt_spaceship_setup() {
|
||
|
autoload -Uz vcs_info
|
||
|
autoload -Uz add-zsh-hook
|
||
|
|
||
|
# This variable is a magic variable used when loading themes with zsh's prompt
|
||
|
# function. It will ensure the proper prompt options are set.
|
||
|
prompt_opts=(cr percent sp subst)
|
||
|
|
||
|
# Borrowed from promptinit, sets the prompt options in case the prompt was not
|
||
|
# initialized via promptinit.
|
||
|
setopt noprompt{bang,cr,percent,subst} "prompt${^prompt_opts[@]}"
|
||
|
|
||
|
# Add exec_time hooks
|
||
|
add-zsh-hook preexec spaceship_exec_time_preexec_hook
|
||
|
add-zsh-hook precmd spaceship_exec_time_precmd_hook
|
||
|
|
||
|
# Disable python virtualenv environment prompt prefix
|
||
|
VIRTUAL_ENV_DISABLE_PROMPT=true
|
||
|
|
||
|
# Configure vcs_info helper for potential use in the future
|
||
|
add-zsh-hook precmd spaceship_exec_vcs_info_precmd_hook
|
||
|
zstyle ':vcs_info:*' enable git
|
||
|
zstyle ':vcs_info:git*' formats '%b'
|
||
|
|
||
|
# Expose Spaceship to environment variables
|
||
|
PROMPT='$(spaceship_prompt)'
|
||
|
PS2='$(spaceship_ps2)'
|
||
|
RPS1='$(spaceship_rprompt)'
|
||
|
}
|
||
|
|
||
|
# ------------------------------------------------------------------------------
|
||
|
# ENTRY POINT
|
||
|
# An entry point of prompt
|
||
|
# ------------------------------------------------------------------------------
|
||
|
|
||
|
# Pass all arguments to the spaceship_setup function
|
||
|
prompt_spaceship_setup "$@"
|