Skip to content

Instantly share code, notes, and snippets.

@ActionScripted
Created March 18, 2019 16:49
Show Gist options
  • Save ActionScripted/6dd98177d625e6dae579e07b6e001f6b to your computer and use it in GitHub Desktop.
Save ActionScripted/6dd98177d625e6dae579e07b6e001f6b to your computer and use it in GitHub Desktop.
# Solarized 2 (solarized but wanted a different name)
# ---
#
# Solarized prompt...that might be breaking the rules a bit.
# SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B RGB HSB
# --------- ------- ---- ------- ----------- ---------- ----------- -----------
# base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21
# base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26
# base01 #586e75 10/7 brgreen 240 #585858 45 -07 -07 88 110 117 194 25 46
# base00 #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195 23 51
# base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59
# base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63
# base2 #eee8d5 7/7 white 254 #e4e4e4 92 -00 10 238 232 213 44 11 93
# base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99
# yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71
# orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80
# red #d30102 1/1 red 124 #af0000 45 70 60 211 1 2 0 99 83
# magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83
# violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77
# blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82
# cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63
# green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60
#
# The "%{...%}" is to help with prompt line length/position.
# If you don't do this, auto-complete (tab) will not position
# suggestions properly.
#
# http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html
# https://stackoverflow.com/questions/4842424/list-of-ansi-color-escape-sequences
# https://wiki.archlinux.org/index.php/zsh
sfp_prev_bg=''
sfp_prev_fg=''
# Default output styles
sfp_reset() {
echo -n "%{\033[0m%}"
}
# Prefix output with color and styles
# $1 = fg, $2 = bg, $3 = style, $4 = output
sfp_segment() {
local bg="\033[48;5;$2m"
local fg="\033[38;5;$1m"
local style
sfp_prev_bg=$2
sfp_prev_fg=$1
for s in ${(s.,.)3}; do
case $s in
(blink) style+='\033[5m' ;;
(bold) style+='\033[1m' ;;
(faint) style+='\033[2m' ;;
(italic) style+='\033[3m' ;;
(normal) style+='\033[0m' ;;
(strike) style+='\033[9m' ;;
(underline) style+='\033[4m' ;;
esac
done
sfp_reset
echo -n "%{$style$fg$bg%}$4"
}
# The fancy arrow thing between items
sfp_separator() {
local bg="\033[48;5;$2m"
local fg="\033[38;5;$1m"
sfp_reset
echo -n "%{$fg$bg%}\ue0b0"
}
# Build our prompt
sfp_build() {
RETVAL=$?
local job_count=$(jobs -l | wc -l | tr -d ' ')
sfp_segment 7 10 'normal' ' %n'
sfp_segment 7 10 'faint' '@'
sfp_segment 7 10 'normal' '%m '
if [[ -n $VIRTUAL_ENV && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
sfp_separator $sfp_prev_bg 6
sfp_segment 7 6 'normal' " `basename $VIRTUAL_ENV` "
fi
if [[ $job_count -gt 0 ]]; then
sfp_separator $sfp_prev_bg 13
sfp_segment 7 13 'normal' " $job_count "
fi
if [[ $RETVAL -ne 0 ]]; then
sfp_separator $sfp_prev_bg 9
sfp_segment 15 9 'normal' " $RETVAL "
fi
if (( $+commands[git] )); then
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
local mode=''
local ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git rev-parse --short HEAD 2> /dev/null)"
local repo_path=$(git rev-parse --git-dir 2>/dev/null)
local segment_bg=12
if [[ -n $(parse_git_dirty) ]]; then segment_bg=4; fi
if [[ -e "${repo_path}/BISECT_LOG" ]]; then
mode=" <B>"
elif [[ -e "${repo_path}/MERGE_HEAD" ]]; then
mode=" >M<"
elif [[ -e "${repo_path}/rebase" || -e "${repo_path}/rebase-apply" || -e "${repo_path}/rebase-merge" || -e "${repo_path}/../.dotest" ]]; then
mode=" >R>"
fi
setopt promptsubst
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' get-revision true
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' stagedstr '✚'
zstyle ':vcs_info:*' unstagedstr '●'
zstyle ':vcs_info:*' formats ' %u%c'
zstyle ':vcs_info:*' actionformats ' %u%c'
vcs_info
sfp_separator $sfp_prev_bg $segment_bg
sfp_segment 15 $segment_bg 'faint' " \ue0a0 "
sfp_segment 15 $segment_bg 'normal' "${ref/refs\/heads\//}"
sfp_segment 15 $segment_bg 'normal' "${vcs_info_msg_0_%% }${mode} "
fi
fi
sfp_separator $sfp_prev_bg 0
sfp_segment 14 0 'normal' ' %~ '
sfp_separator $sfp_prev_bg 8
echo ''
sfp_segment 14 0 'normal' ' %(!.#.$) '
sfp_separator $sfp_prev_bg 8
sfp_segment 0 8 'normal' ' '
sfp_reset
#echo -n "%{%f%k%}"
sfp_segment 2 8 'normal' ''
}
# Assign to prompts
PROMPT='%{%f%b%k%}$(sfp_build)'
# LS colors
LSCOLORS='exfxcxdxbxegedabagacad'
# Zsh to use the same colors as ls
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
function precmd() {
# Print a newline before the prompt, unless it's the
# first prompt in the process.
# TODO: suppress when "clear" called
if [ -z "$NEW_LINE_BEFORE_PROMPT" ]; then
NEW_LINE_BEFORE_PROMPT=1
elif [ "$NEW_LINE_BEFORE_PROMPT" -eq 1 ]; then
echo ''
fi
}
# Reset term before output
preexec () { echo -ne "\e[0m" }
VIRTUAL_ENV_DISABLE_PROMPT=1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment