dotfiles/dotfiles/lib/zsh/prompt.sh

153 lines
4.0 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

##### COLOR SETUP
autoload -U colors && colors
# P.C. Shyamshankar <sykora@lucentbeing.com>
# Copied from
# http://github.com/sykora/etc/blob/master/zsh/functions/spectrum/
typeset -Ag FX FG BG
FX=(
reset "%{%}"
bold "%{%}" no-bold "%{%}"
italic "%{%}" no-italic "%{%}"
underline "%{%}" no-underline "%{%}"
blink "%{%}" no-blink "%{%}"
reverse "%{%}" no-reverse "%{%}"
)
for color in {000..255}; do
FG[$color]="%{[38;5;${color}m%}"
BG[$color]="%{[48;5;${color}m%}"
done
# Show all 256 colors with color number
function spectrum_ls {
for code in {000..255}; do
print -P -- "$code: %{$FG[$code]Test%f%}"
done
}
#####
function current_directory {
local PWD=$(pwd)
echo "${PWD/#$HOME/~}"
}
function git_prompt_info {
if test -z $(git branch-or-sha);
then
echo ""
else
local b="$(print_with_color $(git branch-or-sha) $SOURCE_CONTROL_COLOR)"
echo " $(separator "on") $b$(git_status_character)"
fi
}
function git_status_character {
if git dirty;
then
print_with_color "✘" "$fg[red]"
else
print_with_color "✔" "$fg[green]"
fi
}
function command_line_character {
if ! test -z $(git branch-or-sha);
then
echo "±"
else
echo "○"
fi
}
function job_count {
jobs -s | wc -l
}
function colored_job_count {
local job_count="$(job_count)"
if [ $job_count -gt 0 ]; then
print_with_color "($job_count) " $JOB_COUNT_COLOR
fi
}
export PROMPT_CHAR_ERROR="$fg[red]"
export PROMPT_CHAR_SUCCESS="$fg[green]"
function prompt_custom_colors {
export USERNAME_COLOR="$FG[040]"
export SEPARATOR_COLOR="$FG[239]"
export HOSTNAME_COLOR="$FG[033]"
export CURRENT_DIRECTORY_COLOR="$FG[226]"
export CURRENT_DIRECTORY_COLOR="$FG[255]"
}
function prompt_basic_colors {
export USERNAME_COLOR="$fg_no_bold[green]"
export SEPARATOR_COLOR="$fg_no_bold[black]"
export HOSTNAME_COLOR="$fg_no_bold[blue]"
export CURRENT_DIRECTORY_COLOR="$fg[yellow]"
export SOURCE_CONTROL_COLOR="$fg[white]"
}
function prompt_solarized_colors {
prompt_basic_colors
export HOSTNAME_COLOR="$fg[magenta]"
export USERNAME_COLOR="$fg[blue]"
export CURRENT_DIRECTORY_COLOR="$fg[red]"
export SOURCE_CONTROL_COLOR="$fg[white]"
}
function prompt_tomorrow_colors {
export SEPARATOR_COLOR="$fg[cyan]"
export HOSTNAME_COLOR="$fg[yellow]"
export USERNAME_COLOR="$fg[blue]"
export CURRENT_DIRECTORY_COLOR="$fg[red]"
export SOURCE_CONTROL_COLOR="$fg[gray]"
}
function prompt_monokai_colors {
export SEPARATOR_COLOR="$fg[black]"
export HOSTNAME_COLOR="$fg[blue]"
export USERNAME_COLOR="$fg[red]"
export CURRENT_DIRECTORY_COLOR="$fg[magenta]"
export SOURCE_CONTROL_COLOR="$fg[white]"
}
function prompt_no_colors {
export SEPARATOR_COLOR=""
export HOSTNAME_COLOR=""
export USERNAME_COLOR=""
export CURRENT_DIRECTORY_COLOR=""
export SOURCE_CONTROL_COLOR=""
export reset_color=""
}
function prompt_basic_colors_with_grey_separator {
prompt_basic_colors
export SEPARATOR_COLOR="$FG[239]"
}
function print_with_color {
echo "%{$2%}$1%{$reset_color%}"
}
function separator {
print_with_color "$1" "$SEPARATOR_COLOR"
}
export JOB_COUNT_COLOR="$fg[blue]"
prompt_tomorrow_colors
# For reasons which are currently beyond me, it is not possible to use
# $? in PROMPT which is why the second line is so strangely
# constructed.
function set_my_prompt {
export PROMPT='⚡ % $(print_with_color "%n" "$USERNAME_COLOR") $(separator "at") $(print_with_color "`hostname -s`" "$HOSTNAME_COLOR") $(separator "in") $(print_with_color "`current_directory`" "$CURRENT_DIRECTORY_COLOR")$(git_prompt_info)
$(colored_job_count)%(?.$(print_with_color "$(command_line_character) " $PROMPT_CHAR_SUCCESS).$(print_with_color "$(command_line_character) " $PROMPT_CHAR_ERROR)) '
export PS2='(%_) '
}
function set_powerline_prompt {
source "$(python_module_path powerline)/bindings/zsh/powerline.zsh"
}