Created
September 22, 2017 14:37
-
-
Save schan90/b97cbfa077b78ec834b168e22755aefa to your computer and use it in GitHub Desktop.
My custom paradox theme prezto. Add nvm and timestamp in RPROMPT. Inspired by https://gist.github.com/rjorgenson/83094662ace4d3b82b95/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# A two-line, Powerline-inspired theme that displays contextual information. | |
# | |
# This theme requires a patched Powerline font, get them from | |
# https://github.com/Lokaltog/powerline-fonts. | |
# | |
# Authors: | |
# Isaac Wolkerstorfer <[email protected]> | |
# Jeff Sandberg <[email protected]> | |
# Sorin Ionescu <[email protected]> | |
# | |
# Screenshots: | |
# http://i.imgur.com/0XIWX.png | |
# | |
RSEGMENT_SEPARATOR="\ue0b2" | |
PRIMARY_FG=black | |
CURRENT_BG='NONE' | |
# Load dependencies. | |
pmodload 'helper' | |
# Define variables. | |
_prompt_paradox_current_bg='NONE' | |
_prompt_paradox_segment_separator='' | |
_prompt_paradox_start_time=$SECONDS | |
function prompt_paradox_start_segment { | |
local bg fg | |
[[ -n "$1" ]] && bg="%K{$1}" || bg="%k" | |
[[ -n "$2" ]] && fg="%F{$2}" || fg="%f" | |
if [[ "$_prompt_paradox_current_bg" != 'NONE' && "$1" != "$_prompt_paradox_current_bg" ]]; then | |
print -n " $bg%F{$_prompt_paradox_current_bg}$_prompt_paradox_segment_separator$fg " | |
else | |
print -n "$bg$fg " | |
fi | |
_prompt_paradox_current_bg="$1" | |
[[ -n "$3" ]] && print -n "$3" | |
} | |
function prompt_paradox_end_segment { | |
if [[ -n "$_prompt_paradox_current_bg" ]]; then | |
print -n " %k%F{$_prompt_paradox_current_bg}$_prompt_paradox_segment_separator" | |
else | |
print -n "%k" | |
fi | |
print -n "%f" | |
_prompt_paradox_current_bg='' | |
} | |
function prompt_paradox_build_prompt { | |
prompt_paradox_start_segment black default '%(?::%F{red}✘ )%(!:%F{yellow}⚡ :)%(1j:%F{cyan}⚙ :)%F{blue}%n%F{red}@%F{green}%m%f' | |
prompt_paradox_start_segment blue black '$_prompt_paradox_pwd' | |
if [[ -n "$git_info" ]]; then | |
prompt_paradox_start_segment green black '${(e)git_info[ref]}${(e)git_info[status]}' | |
fi | |
prompt_paradox_end_segment | |
} | |
function prompt_paradox_pwd { | |
local pwd="${PWD/#$HOME/~}" | |
if [[ "$pwd" == (#m)[/~] ]]; then | |
_prompt_paradox_pwd="$MATCH" | |
unset MATCH | |
else | |
_prompt_paradox_pwd="${${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}//\%/%%}/${${pwd:t}//\%/%%}" | |
fi | |
} | |
function prompt_paradox_print_elapsed_time { | |
local end_time=$(( SECONDS - _prompt_paradox_start_time )) | |
local hours minutes seconds remainder | |
if (( end_time >= 3600 )); then | |
hours=$(( end_time / 3600 )) | |
remainder=$(( end_time % 3600 )) | |
minutes=$(( remainder / 60 )) | |
seconds=$(( remainder % 60 )) | |
print -P "%B%F{red}>>> elapsed time ${hours}h${minutes}m${seconds}s%b" | |
elif (( end_time >= 60 )); then | |
minutes=$(( end_time / 60 )) | |
seconds=$(( end_time % 60 )) | |
print -P "%B%F{yellow}>>> elapsed time ${minutes}m${seconds}s%b" | |
elif (( end_time > 10 )); then | |
print -P "%B%F{green}>>> elapsed time ${end_time}s%b" | |
fi | |
} | |
function prompt_paradox_precmd { | |
setopt LOCAL_OPTIONS | |
unsetopt XTRACE KSH_ARRAYS | |
# Format PWD. | |
prompt_paradox_pwd | |
# Get Git repository information. | |
if (( $+functions[git-info] )); then | |
git-info | |
fi | |
# Calculate and print the elapsed time. | |
prompt_paradox_print_elapsed_time | |
} | |
function prompt_paradox_preexec { | |
_prompt_paradox_start_time="$SECONDS" | |
} | |
# Begin an RPROMPT segment | |
# Takes two arguments, background and foreground. Both can be omitted, | |
# rendering default background/foreground. | |
rprompt_segment() { | |
local bg fg | |
[[ -n $1 ]] && bg="%K{$1}" || bg="%k" | |
[[ -n $2 ]] && fg="%F{$2}" || fg="%f" | |
if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then | |
echo -n " %{%K{$CURRENT_BG}%F{$1}%}$RSEGMENT_SEPARATOR%{$bg%}%{$fg%} " | |
else | |
echo -n "%F{$1}%{%K{default}%}$RSEGMENT_SEPARATOR%{$bg%}%{$fg%} " | |
fi | |
CURRENT_BG=$1 | |
[[ -n $3 ]] && echo -n $3 | |
} | |
# NVM: output current node version if NVM present | |
prompt_nvm() { | |
if [[ $(type nvm) =~ 'nvm is a shell function' ]]; then | |
local v=$(nvm current) | |
fi | |
[[ $v != '' ]] && rprompt_segment green $PRIMARY_FG "⬢ $v" | |
} | |
# Timestamp: add a timestamp to prompt - real time clock, stops when command is executed | |
prompt_timestamp() { | |
if [[ $ZSH_TIME = "24" ]]; then | |
local time_string="%H:%M:%S" | |
else | |
local time_string="%L:%M:%S %p" | |
fi | |
rprompt_segment blue $PRIMARY_FG "%D{$time_string}" | |
} | |
## Right prompt | |
rprompt_agnoster_rj() { | |
prompt_nvm | |
prompt_timestamp | |
echo -n " " # rprompt looks awful without a space at the end | |
} | |
function prompt_paradox_setup { | |
setopt LOCAL_OPTIONS | |
unsetopt XTRACE KSH_ARRAYS | |
prompt_opts=(cr percent subst) | |
# Load required functions. | |
autoload -Uz add-zsh-hook | |
# Add hook for calling git-info before each command. | |
add-zsh-hook preexec prompt_paradox_preexec | |
add-zsh-hook precmd prompt_paradox_precmd | |
# Set editor-info parameters. | |
zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' | |
zstyle ':prezto:module:editor:info:keymap:primary' format '%B%F{blue}❯%f%b' | |
zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format '%F{red}♺%f' | |
zstyle ':prezto:module:editor:info:keymap:alternate' format '%B%F{red}❮%f%b' | |
# Set git-info parameters. | |
zstyle ':prezto:module:git:info' verbose 'yes' | |
zstyle ':prezto:module:git:info:action' format ' ⁝ %s' | |
zstyle ':prezto:module:git:info:added' format ' ✚' | |
zstyle ':prezto:module:git:info:ahead' format ' ⬆' | |
zstyle ':prezto:module:git:info:behind' format ' ⬇' | |
zstyle ':prezto:module:git:info:branch' format ' %b' | |
zstyle ':prezto:module:git:info:commit' format '➦ %.7c' | |
zstyle ':prezto:module:git:info:deleted' format ' ✖' | |
zstyle ':prezto:module:git:info:dirty' format ' ⁝' | |
zstyle ':prezto:module:git:info:modified' format ' ✱' | |
zstyle ':prezto:module:git:info:position' format '%p' | |
zstyle ':prezto:module:git:info:renamed' format ' ➙' | |
zstyle ':prezto:module:git:info:stashed' format ' S' | |
zstyle ':prezto:module:git:info:unmerged' format ' ═' | |
zstyle ':prezto:module:git:info:untracked' format ' ?' | |
zstyle ':prezto:module:git:info:keys' format \ | |
'ref' '$(coalesce "%b" "%p" "%c")' \ | |
'status' '%s%D%A%B%S%a%d%m%r%U%u' | |
# Define prompts. | |
PROMPT=' | |
${(e)$(prompt_paradox_build_prompt)} | |
${editor_info[keymap]} ' | |
RPROMPT='%{%f%b%k%}$(rprompt_agnoster_rj)' | |
SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' | |
} | |
prompt_paradox_setup "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment