diff --git a/zsh/oh-my-zsh/themes/spaceship.zsh-theme b/zsh/oh-my-zsh/themes/spaceship.zsh-theme new file mode 100644 index 0000000..4fbb29f --- /dev/null +++ b/zsh/oh-my-zsh/themes/spaceship.zsh-theme @@ -0,0 +1,217 @@ +# +# 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 "$@"