You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dotfiles/zsh/.zsh-custom/prompt_balkian_setup

162 lines
5.0 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these 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 <i@agnoster.net>
# Jeff Sandberg <paradox460@gmail.com>
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
# Screenshots:
# http://i.imgur.com/0XIWX.png
#
# Load dependencies.
pmodload 'helper'
# Define variables.
_prompt_balkian_current_bg='NONE'
_prompt_balkian_segment_separator=' '
_prompt_balkian_start_time=$SECONDS
#hostnamecolor=$(hostname | od | tr ' ' '\n' | awk '{total = total + $1}END{print 30 + (total % 6)}')
if [[ $TERM =~ "256color" ]]; then
hostnamecolor="$((16 + $(hostname | cksum | cut -c1-3) % 256))";
else
hostnamecolor="$((31 + $(hostname | cksum | cut -c1-3) % 6))";
fi
function prompt_balkian_start_segment {
local bg fg
[[ -n "$1" ]] && bg="%K{$1}" || bg="%k"
[[ -n "$2" ]] && fg="%F{$2}" || fg="%f"
if [[ "$_prompt_balkian_current_bg" != 'NONE' && "$1" != "$_prompt_balkian_current_bg" ]]; then
print -n " $bg%F{$_prompt_balkian_current_bg}$_prompt_balkian_segment_separator$fg "
else
print -n "$bg$fg "
fi
_prompt_balkian_current_bg="$1"
[[ -n "$3" ]] && print -n "$3"
}
function prompt_balkian_end_segment {
if [[ -n "$_prompt_balkian_current_bg" ]]; then
print -n " %k%F{$_prompt_balkian_current_bg}$_prompt_balkian_segment_separator"
else
print -n "%k"
fi
print -n "%f"
_prompt_balkian_current_bg=''
}
function prompt_balkian_build_prompt {
prompt_balkian_start_segment default default '%(?::%F{red}✘ )%(!:%F{yellow}⚡ :)%(1j:%F{cyan}⚙ :)%F{${hostnamecolor}}%n%F{white}@%F{${hostnamecolor}}%m%f'
prompt_balkian_start_segment default default '$_prompt_balkian_pwd'
if [[ -n "$git_info" ]]; then
prompt_balkian_start_segment "" yellow '${(e)git_info[ref]}${(e)git_info[status]}'
fi
prompt_balkian_end_segment
}
function prompt_balkian_pwd {
local pwd="${PWD/#$HOME/~}"
if [[ "$pwd" == (#m)[/~] ]]; then
_prompt_balkian_pwd="$MATCH"
unset MATCH
else
_prompt_balkian_pwd="${${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}//\%/%%}/${${pwd:t}//\%/%%}"
fi
}
function prompt_balkian_print_elapsed_time {
local end_time=$(( SECONDS - _prompt_balkian_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_balkian_precmd {
setopt LOCAL_OPTIONS
unsetopt XTRACE KSH_ARRAYS
# Format PWD.
prompt_balkian_pwd
# Get Git repository information.
if (( $+functions[git-info] )); then
git-info
fi
# Calculate and print the elapsed time.
prompt_balkian_print_elapsed_time
}
function prompt_balkian_preexec {
_prompt_balkian_start_time="$SECONDS"
}
function prompt_balkian_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_balkian_preexec
add-zsh-hook precmd prompt_balkian_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_balkian_build_prompt)}
${editor_info[keymap]} '
RPROMPT='%F{blue}[%F{green}%D{%H:%M:%S}%F{blue}]%f'
SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? '
}
prompt_balkian_setup "$@"