From 6805d4515099d99068ef38e82ecd23c2199fd281 Mon Sep 17 00:00:00 2001 From: Preston Davis Date: Tue, 22 Sep 2015 18:17:23 -0400 Subject: [PATCH] My shortcuts --- custom/example.zsh | 6 +- themes/bullet-train.zsh-theme | 450 +++++++++++++++++++++++ themes/powerlevel9k | 1 + themes/powerlevel9k.zsh-theme | 655 ++++++++++++++++++++++++++++++++++ 4 files changed, 1111 insertions(+), 1 deletion(-) create mode 100644 themes/bullet-train.zsh-theme create mode 160000 themes/powerlevel9k create mode 100644 themes/powerlevel9k.zsh-theme diff --git a/custom/example.zsh b/custom/example.zsh index 28ffcae25..d9c36a854 100644 --- a/custom/example.zsh +++ b/custom/example.zsh @@ -2,4 +2,8 @@ # Example: # # brainstormr=/Users/robbyrussell/Projects/development/planetargon/brainstormr -# \ No newline at end of file +# +alias p='tail -1 /home/pdavis/notes.txt | pbcopy' +alias pbcopy='xsel --clipboard --input' +alias rosh='ssh pdavis-admin@opsware.discovery.com -p 2222' +alias console='cu -t -l /dev/ttyUSB0 -s 115200' diff --git a/themes/bullet-train.zsh-theme b/themes/bullet-train.zsh-theme new file mode 100644 index 000000000..70a311c06 --- /dev/null +++ b/themes/bullet-train.zsh-theme @@ -0,0 +1,450 @@ +# README +# +# In order for this theme to render correctly, you will need a +# [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts). +# +# In addition, I recommend the +# [Tomorrow Night theme](https://github.com/chriskempson/tomorrow-theme) and, if +# you're using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over +# Terminal.app - it has significantly better color fidelity. + +# ------------------------------------------------------------------------------ +# CONFIGURATION +# The default configuration, that can be overwrite in your .zshrc file +# ------------------------------------------------------------------------------ + +VIRTUAL_ENV_DISABLE_PROMPT=true + +# PROMPT +if [ ! -n "${BULLETTRAIN_PROMPT_CHAR+1}" ]; then + BULLETTRAIN_PROMPT_CHAR="\$" +fi +if [ ! -n "${BULLETTRAIN_PROMPT_ROOT+1}" ]; then + BULLETTRAIN_PROMPT_ROOT=true +fi + +# STATUS +if [ ! -n "${BULLETTRAIN_STATUS_SHOW+1}" ]; then + BULLETTRAIN_STATUS_SHOW=true +fi +if [ ! -n "${BULLETTRAIN_STATUS_EXIT_SHOW+1}" ]; then + BULLETTRAIN_STATUS_EXIT_SHOW=false +fi +if [ ! -n "${BULLETTRAIN_STATUS_BG+1}" ]; then + BULLETTRAIN_STATUS_BG=green +fi +if [ ! -n "${BULLETTRAIN_STATUS_ERROR_BG+1}" ]; then + BULLETTRAIN_STATUS_ERROR_BG=red +fi +if [ ! -n "${BULLETTRAIN_STATUS_FG+1}" ]; then + BULLETTRAIN_STATUS_FG=white +fi + +# TIME +if [ ! -n "${BULLETTRAIN_TIME_SHOW+1}" ]; then + BULLETTRAIN_TIME_SHOW=true +fi +if [ ! -n "${BULLETTRAIN_TIME_BG+1}" ]; then + BULLETTRAIN_TIME_BG=white +fi +if [ ! -n "${BULLETTRAIN_TIME_FG+1}" ]; then + BULLETTRAIN_TIME_FG=black +fi + +# VIRTUALENV +if [ ! -n "${BULLETTRAIN_VIRTUALENV_SHOW+1}" ]; then + BULLETTRAIN_VIRTUALENV_SHOW=true +fi +if [ ! -n "${BULLETTRAIN_VIRTUALENV_BG+1}" ]; then + BULLETTRAIN_VIRTUALENV_BG=yellow +fi +if [ ! -n "${BULLETTRAIN_VIRTUALENV_FG+1}" ]; then + BULLETTRAIN_VIRTUALENV_FG=white +fi +if [ ! -n "${BULLETTRAIN_VIRTUALENV_PREFIX+1}" ]; then + BULLETTRAIN_VIRTUALENV_PREFIX=๐Ÿ +fi + +# NVM +if [ ! -n "${BULLETTRAIN_NVM_SHOW+1}" ]; then + BULLETTRAIN_NVM_SHOW=false +fi +if [ ! -n "${BULLETTRAIN_NVM_BG+1}" ]; then + BULLETTRAIN_NVM_BG=green +fi +if [ ! -n "${BULLETTRAIN_NVM_FG+1}" ]; then + BULLETTRAIN_NVM_FG=white +fi +if [ ! -n "${BULLETTRAIN_NVM_PREFIX+1}" ]; then + BULLETTRAIN_NVM_PREFIX="โฌก " +fi + +# RMV +if [ ! -n "${BULLETTRAIN_RVM_SHOW+1}" ]; then + BULLETTRAIN_RVM_SHOW=true +fi +if [ ! -n "${BULLETTRAIN_RVM_BG+1}" ]; then + BULLETTRAIN_RVM_BG=magenta +fi +if [ ! -n "${BULLETTRAIN_RVM_FG+1}" ]; then + BULLETTRAIN_RVM_FG=white +fi +if [ ! -n "${BULLETTRAIN_RVM_PREFIX+1}" ]; then + BULLETTRAIN_RVM_PREFIX=โ™ฆ๏ธ +fi + +# DIR +if [ ! -n "${BULLETTRAIN_DIR_SHOW+1}" ]; then + BULLETTRAIN_DIR_SHOW=true +fi +if [ ! -n "${BULLETTRAIN_DIR_BG+1}" ]; then + BULLETTRAIN_DIR_BG=blue +fi +if [ ! -n "${BULLETTRAIN_DIR_FG+1}" ]; then + BULLETTRAIN_DIR_FG=white +fi +if [ ! -n "${BULLETTRAIN_DIR_CONTEXT_SHOW+1}" ]; then + BULLETTRAIN_DIR_CONTEXT_SHOW=false +fi +if [ ! -n "${BULLETTRAIN_DIR_EXTENDED+1}" ]; then + BULLETTRAIN_DIR_EXTENDED=1 +fi + +# GIT +if [ ! -n "${BULLETTRAIN_GIT_SHOW+1}" ]; then + BULLETTRAIN_GIT_SHOW=true +fi +if [ ! -n "${BULLETTRAIN_GIT_BG+1}" ]; then + BULLETTRAIN_GIT_BG=white +fi +if [ ! -n "${BULLETTRAIN_GIT_FG+1}" ]; then + BULLETTRAIN_GIT_FG=black +fi +if [ ! -n "${BULLETTRAIN_GIT_EXTENDED+1}" ]; then + BULLETTRAIN_GIT_EXTENDED=true +fi + +# CONTEXT +if [ ! -n "${BULLETTRAIN_CONTEXT_SHOW+1}" ]; then + BULLETTRAIN_CONTEXT_SHOW=false +fi +if [ ! -n "${BULLETTRAIN_CONTEXT_BG+1}" ]; then + BULLETTRAIN_CONTEXT_BG=black +fi +if [ ! -n "${BULLETTRAIN_CONTEXT_FG+1}" ]; then + BULLETTRAIN_CONTEXT_FG=default +fi + +# GIT PROMPT +if [ ! -n "${BULLETTRAIN_GIT_PREFIX+1}" ]; then + ZSH_THEME_GIT_PROMPT_PREFIX=" \ue0a0 " +else + ZSH_THEME_GIT_PROMPT_PREFIX=$BULLETTRAIN_GIT_PREFIX +fi +if [ ! -n "${BULLETTRAIN_GIT_SUFFIX+1}" ]; then + ZSH_THEME_GIT_PROMPT_SUFFIX="" +else + ZSH_THEME_GIT_PROMPT_SUFFIX=$BULLETTRAIN_GIT_SUFFIX +fi +if [ ! -n "${BULLETTRAIN_GIT_DIRTY+1}" ]; then + ZSH_THEME_GIT_PROMPT_DIRTY=" โœ˜" +else + ZSH_THEME_GIT_PROMPT_DIRTY=$BULLETTRAIN_GIT_DIRTY +fi +if [ ! -n "${BULLETTRAIN_GIT_CLEAN+1}" ]; then + ZSH_THEME_GIT_PROMPT_CLEAN=" โœ”" +else + ZSH_THEME_GIT_PROMPT_CLEAN=$BULLETTRAIN_GIT_CLEAN +fi +if [ ! -n "${BULLETTRAIN_GIT_ADDED+1}" ]; then + ZSH_THEME_GIT_PROMPT_ADDED=" %F{green}โœš%F{black}" +else + ZSH_THEME_GIT_PROMPT_ADDED=$BULLETTRAIN_GIT_ADDED +fi +if [ ! -n "${BULLETTRAIN_GIT_MODIFIED+1}" ]; then + ZSH_THEME_GIT_PROMPT_MODIFIED=" %F{blue}โœน%F{black}" +else + ZSH_THEME_GIT_PROMPT_MODIFIED=$BULLETTRAIN_GIT_MODIFIED +fi +if [ ! -n "${BULLETTRAIN_GIT_DELETED+1}" ]; then + ZSH_THEME_GIT_PROMPT_DELETED=" %F{red}โœ–%F{black}" +else + ZSH_THEME_GIT_PROMPT_DELETED=$BULLETTRAIN_GIT_DELETED +fi +if [ ! -n "${BULLETTRAIN_GIT_UNTRACKED+1}" ]; then + ZSH_THEME_GIT_PROMPT_UNTRACKED=" %F{yellow}โœญ%F{black}" +else + ZSH_THEME_GIT_PROMPT_UNTRACKED=$BULLETTRAIN_GIT_UNTRACKED +fi +if [ ! -n "${BULLETTRAIN_GIT_RENAMED+1}" ]; then + ZSH_THEME_GIT_PROMPT_RENAMED=" โžœ" +else + ZSH_THEME_GIT_PROMPT_RENAMED=$BULLETTRAIN_GIT_RENAMED +fi +if [ ! -n "${BULLETTRAIN_GIT_UNMERGED+1}" ]; then + ZSH_THEME_GIT_PROMPT_UNMERGED=" โ•" +else + ZSH_THEME_GIT_PROMPT_UNMERGED=$BULLETTRAIN_GIT_UNMERGED +fi +if [ ! -n "${BULLETTRAIN_GIT_AHEAD+1}" ]; then + ZSH_THEME_GIT_PROMPT_AHEAD=" โฌ†" +else + ZSH_THEME_GIT_PROMPT_AHEAD=$BULLETTRAIN_GIT_AHEAD +fi +if [ ! -n "${BULLETTRAIN_GIT_BEHIND+1}" ]; then + ZSH_THEME_GIT_PROMPT_BEHIND=" โฌ‡" +else + ZSH_THEME_GIT_PROMPT_BEHIND=$BULLETTRAIN_GIT_BEHIND +fi +if [ ! -n "${BULLETTRAIN_GIT_DIVERGED+1}" ]; then + ZSH_THEME_GIT_PROMPT_DIVERGED=" โฌ" +else + ZSH_THEME_GIT_PROMPT_DIVERGED=$BULLETTRAIN_GIT_PROMPT_DIVERGED +fi + +# ------------------------------------------------------------------------------ +# SEGMENT DRAWING +# A few functions to make it easy and re-usable to draw segmented prompts +# ------------------------------------------------------------------------------ + +CURRENT_BG='NONE' +SEGMENT_SEPARATOR='๎‚ฐ' + +# Begin a segment +# Takes two arguments, background and foreground. Both can be omitted, +# rendering default background/foreground. +prompt_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 " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} " + else + echo -n "%{$bg%}%{$fg%} " + fi + CURRENT_BG=$1 + [[ -n $3 ]] && echo -n $3 +} + +# End the prompt, closing any open segments +prompt_end() { + if [[ -n $CURRENT_BG ]]; then + echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR" + else + echo -n "%{%k%}" + fi + echo -n "%{%f%}" + CURRENT_BG='' +} + +# ------------------------------------------------------------------------------ +# PROMPT COMPONENTS +# Each component will draw itself, and hide itself if no information needs +# to be shown +# ------------------------------------------------------------------------------ + +# Context: user@hostname (who am I and where am I) +context() { + local user="$(whoami)" + [[ "$user" != "$BULLETTRAIN_CONTEXT_DEFAULT_USER" || -n "$BULLETTRAIN_IS_SSH_CLIENT" ]] && echo -n "${user}@%m" +} +prompt_context() { + [[ $BULLETTRAIN_CONTEXT_SHOW == false ]] && return + + local _context="$(context)" + [[ -n "$_context" ]] && prompt_segment $BULLETTRAIN_CONTEXT_BG $BULLETTRAIN_CONTEXT_FG "$_context" +} + +# Git +prompt_git() { + if [[ $BULLETTRAIN_GIT_SHOW == false ]] then + return + fi + + local ref dirty mode repo_path + repo_path=$(git rev-parse --git-dir 2>/dev/null) + + if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then + prompt_segment $BULLETTRAIN_GIT_BG $BULLETTRAIN_GIT_FG + + if [[ $BULLETTRAIN_GIT_EXTENDED == true ]] then + echo -n $(git_prompt_info)$(git_prompt_status) + else + echo -n $(git_prompt_info) + fi + fi +} + +prompt_hg() { + local rev status + if $(hg id >/dev/null 2>&1); then + if $(hg prompt >/dev/null 2>&1); then + if [[ $(hg prompt "{status|unknown}") = "?" ]]; then + # if files are not added + prompt_segment red white + st='ยฑ' + elif [[ -n $(hg prompt "{status|modified}") ]]; then + # if any modification + prompt_segment yellow black + st='ยฑ' + else + # if working copy is clean + prompt_segment green black + fi + echo -n $(hg prompt "โ˜ฟ {rev}@{branch}") $st + else + st="" + rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g') + branch=$(hg id -b 2>/dev/null) + if $(hg st | grep -Eq "^\?"); then + prompt_segment red black + st='ยฑ' + elif $(hg st | grep -Eq "^(M|A)"); then + prompt_segment yellow black + st='ยฑ' + else + prompt_segment green black + fi + echo -n "โ˜ฟ $rev@$branch" $st + fi + fi +} + +# Dir: current working directory +prompt_dir() { + if [[ $BULLETTRAIN_DIR_SHOW == false ]] then + return + fi + + local dir='' + local _context="$(context)" + [[ $BULLETTRAIN_DIR_CONTEXT_SHOW == true && -n "$_context" ]] && dir="${dir}${_context}:" + + if [[ $BULLETTRAIN_DIR_EXTENDED == 0 ]]; then + #short directories + dir="${dir}%1~" + elif [[ $BULLETTRAIN_DIR_EXTENDED == 2 ]]; then + #long directories + dir="${dir}%0~" + else + #medium directories (default case) + dir="${dir}%4(c:...:)%3c" + fi + + prompt_segment $BULLETTRAIN_DIR_BG $BULLETTRAIN_DIR_FG $dir +} + +# RVM: only shows RVM info if on a gemset that is not the default one +prompt_rvm() { + if [[ $BULLETTRAIN_RVM_SHOW == false ]] then + return + fi + + if which rvm-prompt &> /dev/null; then + if [[ ! -n $(rvm gemset list | grep "=> (default)") ]] + then + prompt_segment $BULLETTRAIN_RVM_BG $BULLETTRAIN_RVM_FG $BULLETTRAIN_RVM_PREFIX" $(rvm-prompt i v g)" + fi + fi +} + +# Virtualenv: current working virtualenv +prompt_virtualenv() { + if [[ $BULLETTRAIN_VIRTUALENV_SHOW == false ]] then + return + fi + + local virtualenv_path="$VIRTUAL_ENV" + if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then + prompt_segment $BULLETTRAIN_VIRTUALENV_BG $BULLETTRAIN_VIRTUALENV_FG $BULLETTRAIN_VIRTUALENV_PREFIX" $(basename $virtualenv_path)" + fi +} + +# NVM: Node version manager +prompt_nvm() { + if [[ $BULLETTRAIN_NVM_SHOW == false ]] then + return + fi + + $(type nvm >/dev/null 2>&1) || return + + local nvm_prompt + nvm_prompt=$(node -v 2>/dev/null) + [[ "${nvm_prompt}x" == "x" ]] && return + nvm_prompt=${nvm_prompt:1} + prompt_segment $BULLETTRAIN_NVM_BG $BULLETTRAIN_NVM_FG $BULLETTRAIN_NVM_PREFIX$nvm_prompt +} + +prompt_time() { + if [[ $BULLETTRAIN_TIME_SHOW == false ]] then + return + fi + + if [[ $BULLETTRAIN_TIME_12HR == true ]] then + prompt_segment $BULLETTRAIN_TIME_BG $BULLETTRAIN_TIME_FG %D{%r} + else + prompt_segment $BULLETTRAIN_TIME_BG $BULLETTRAIN_TIME_FG %D{%X} + fi +} + +# Status: +# - was there an error +# - am I root +# - are there background jobs? +prompt_status() { + if [[ $BULLETTRAIN_STATUS_SHOW == false ]] then + return + fi + + local symbols + symbols=() + [[ $RETVAL -ne 0 && $BULLETTRAIN_STATUS_EXIT_SHOW != true ]] && symbols+="โœ˜" + [[ $RETVAL -ne 0 && $BULLETTRAIN_STATUS_EXIT_SHOW == true ]] && symbols+="โœ˜ $RETVAL" + [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}โšก%f" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="โš™" + + if [[ -n "$symbols" && $RETVAL -ne 0 ]] then + prompt_segment $BULLETTRAIN_STATUS_ERROR_BG $BULLETTRAIN_STATUS_FG "$symbols" + elif [[ -n "$symbols" ]] then + prompt_segment $BULLETTRAIN_STATUS_BG $BULLETTRAIN_STATUS_FG "$symbols" + fi + +} + +# Prompt Character +prompt_char() { + local bt_prompt_char + + if [[ ${#BULLETTRAIN_PROMPT_CHAR} -eq 1 ]] then + bt_prompt_char="${BULLETTRAIN_PROMPT_CHAR}" + fi + + if [[ $BULLETTRAIN_PROMPT_ROOT == true ]] then + bt_prompt_char="%(!.%F{red}#.%F{green}${bt_prompt_char}%f)" + fi + + echo -n $bt_prompt_char +} + +# ------------------------------------------------------------------------------ +# MAIN +# Entry point +# ------------------------------------------------------------------------------ + +build_prompt() { + RETVAL=$? + prompt_time + prompt_status + prompt_rvm + prompt_virtualenv + prompt_nvm + prompt_context + prompt_dir + prompt_git + # prompt_hg + prompt_end +} + +PROMPT=' +%{%f%b%k%}$(build_prompt) +%{${fg_bold[default]}%}$(prompt_char) %{$reset_color%}' diff --git a/themes/powerlevel9k b/themes/powerlevel9k new file mode 160000 index 000000000..1390fbdea --- /dev/null +++ b/themes/powerlevel9k @@ -0,0 +1 @@ +Subproject commit 1390fbdea5b278474eafe889da327979654c0d99 diff --git a/themes/powerlevel9k.zsh-theme b/themes/powerlevel9k.zsh-theme new file mode 100644 index 000000000..cfcecdef2 --- /dev/null +++ b/themes/powerlevel9k.zsh-theme @@ -0,0 +1,655 @@ +# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 +################################################################ +# powerlevel9k Theme +# https://github.com/bhilburn/powerlevel9k +# +# This theme was inspired by agnoster's Theme: +# https://gist.github.com/3712874 +# +# The `vcs_info` hooks in this file are from Tom Upton: +# https://github.com/tupton/dotfiles/blob/master/zsh/zshrc +################################################################ + +################################################################ +# Please see the README file located in the source repository for full docs. +# What follows is a brief list of the settings variables used by this theme. +# You should define these variables in your `~/.zshrc`. +# +# Customize which segments appear in which prompts (below is also the default): +# POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs) +# POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status history time) +# +# Set your Amazon Web Services profile for the `aws` segment: +# export AWS_DEFAULT_PROFILE= +# +# Set your username for the `context` segment: +# export DEFAULT_USER= +# +# Customize the format of the time segment. Example of reverse format: +# POWERLEVEL9K_TIME_FORMAT='%D{%S:%M:%H}' +# +# Show the hash/changeset string in the `vcs` segment: +# POWERLEVEL9K_SHOW_CHANGESET=true +# Set the length of the hash/changeset if enabled in the `vcs` segment: +# POWERLEVEL9K_CHANGESET_HASH_LENGTH=6 +# +# Make powerlevel9k a double-lined prompt: +# POWERLEVEL9K_PROMPT_ON_NEWLINE=true +# +# Set the colorscheme: +# POWERLEVEL9K_COLOR_SCHEME='light' +################################################################ + +## Debugging +#zstyle ':vcs_info:*+*:*' debug true +#set -o xtrace + +# These characters require the Powerline fonts to work properly. If see boxes or +# bizarre characters below, your fonts are not correctly installed. If you +# do not want to install a special font, you can set `POWERLEVEL9K_MODE` to +# `compatible`. This shows all icons in regular symbols. +case $POWERLEVEL9K_MODE in + 'flat') + # Awesome-Patched Font required! + # See https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched + LEFT_SEGMENT_SEPARATOR='' + RIGHT_SEGMENT_SEPARATOR='' + ROOT_ICON="\uE801" # ๎  + RUBY_ICON="\uE847" # ๎ก‡ + AWS_ICON="\uE895" # ๎ข• + BACKGROUND_JOBS_ICON="\uE82F " # ๎ ฏ + TEST_ICON="\uE891" # ๎ข‘ + OK_ICON="\u2713" # โœ“ + FAIL_ICON="\u2718" # โœ˜ + SYMFONY_ICON="SF" + VCS_UNTRACKED_ICON="\uE16C" # ๎…ฌ + VCS_UNSTAGED_ICON="\uE17C" # ๎…ผ + VCS_STAGED_ICON="\uE168" # ๎…จ + VCS_STASH_ICON="\uE133 " # ๎„ณ + #VCS_INCOMING_CHANGES="\uE1EB " # ๎‡ซ + #VCS_INCOMING_CHANGES="\uE80D " # ๎  + VCS_INCOMING_CHANGES="\uE131 " # ๎„ฑ + #VCS_OUTGOING_CHANGES="\uE1EC " # ๎‡ฌ + #VCS_OUTGOING_CHANGES="\uE80E " # ๎ Ž + VCS_OUTGOING_CHANGES="\uE132 " # ๎„ฒ + VCS_TAG_ICON="\uE817 " # ๎ — + VCS_BOOKMARK_ICON="\uE87B" # ๎กป + VCS_COMMIT_ICON="\uE821 " # ๎ ก + VCS_BRANCH_ICON="\uE220" # ๎ˆ  + VCS_REMOTE_BRANCH_ICON=" \uE804 " # ๎ „ + VCS_GIT_ICON="\uE20E " # ๎ˆŽ + VCS_HG_ICON="\uE1C3 " # ๎‡ƒ + ;; + 'compatible') + LEFT_SEGMENT_SEPARATOR="\u2B80" # โฎ€ + RIGHT_SEGMENT_SEPARATOR="\u2B82" # โฎ‚ + ROOT_ICON="\u26A1" # โšก + RUBY_ICON='' + AWS_ICON="AWS:" + BACKGROUND_JOBS_ICON="\u2699" # โš™ + TEST_ICON='' + OK_ICON="\u2713" # โœ“ + FAIL_ICON="\u2718" # โœ˜ + SYMFONY_ICON="SF" + VCS_UNTRACKED_ICON='?' + VCS_UNSTAGED_ICON="\u25CF" # โ— + VCS_STAGED_ICON="\u271A" # โœš + VCS_STASH_ICON="\u235F" # โŸ + VCS_INCOMING_CHANGES="\u2193" # โ†“ + VCS_OUTGOING_CHANGES="\u2191" # โ†‘ + VCS_TAG_ICON='' + VCS_BOOKMARK_ICON="\u263F" # โ˜ฟ + VCS_COMMIT_ICON='' + VCS_BRANCH_ICON='@' + VCS_REMOTE_BRANCH_ICON="\u2192" # โ†’ + VCS_GIT_ICON='Git' + VCS_HG_ICON='HG' + ;; + 'awesome-patched') + # Awesome-Patched Font required! + # See https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched + LEFT_SEGMENT_SEPARATOR="\uE0B0" # ๎‚ฐ + RIGHT_SEGMENT_SEPARATOR="\uE0B2" # ๎‚ฒ + ROOT_ICON="\u26A1" # โšก + RUBY_ICON="\uE847" # ๎ก‡ + AWS_ICON="\uE895" # ๎ข• + BACKGROUND_JOBS_ICON="\uE82F " # ๎ ฏ + TEST_ICON="\uE891" # ๎ข‘ + OK_ICON="\u2713" # โœ“ + FAIL_ICON="\u2718" # โœ˜ + SYMFONY_ICON="SF" + VCS_UNTRACKED_ICON="\uE16C" # ๎…ฌ + VCS_UNSTAGED_ICON="\uE17C" # ๎…ผ + VCS_STAGED_ICON="\uE168" # ๎…จ + VCS_STASH_ICON="\uE133 " # ๎„ณ + #VCS_INCOMING_CHANGES="\uE1EB " # ๎‡ซ + #VCS_INCOMING_CHANGES="\uE80D " # ๎  + VCS_INCOMING_CHANGES="\uE131 " # ๎„ฑ + #VCS_OUTGOING_CHANGES="\uE1EC " # ๎‡ฌ + #VCS_OUTGOING_CHANGES="\uE80E " # ๎ Ž + VCS_OUTGOING_CHANGES="\uE132 " # ๎„ฒ + VCS_TAG_ICON="\uE817 " # ๎ — + VCS_BOOKMARK_ICON="\uE87B" # ๎กป + VCS_COMMIT_ICON="\uE821 " # ๎ ก + VCS_BRANCH_ICON="\uE220" # ๎ˆ  + VCS_REMOTE_BRANCH_ICON=" \uE804 " # ๎ „ + VCS_GIT_ICON="\uE20E " # ๎ˆŽ + VCS_HG_ICON="\uE1C3 " # ๎‡ƒ + ;; + *) + # Powerline-Patched Font required! + # See https://github.com/Lokaltog/powerline-fonts + LEFT_SEGMENT_SEPARATOR="\uE0B0" # ๎‚ฐ + RIGHT_SEGMENT_SEPARATOR="\uE0B2" # ๎‚ฒ + ROOT_ICON="\u26A1" # โšก + RUBY_ICON='' + AWS_ICON="AWS:" + BACKGROUND_JOBS_ICON="\u2699" # โš™ + TEST_ICON='' + OK_ICON="\u2713" # โœ“ + FAIL_ICON="\u2718" # โœ˜ + SYMFONY_ICON="SF" + VCS_UNTRACKED_ICON='?' + VCS_UNSTAGED_ICON="\u25CF" # โ— + VCS_STAGED_ICON="\u271A" # โœš + VCS_STASH_ICON="\u235F" # โŸ + VCS_INCOMING_CHANGES="\u2193" # โ†“ + VCS_OUTGOING_CHANGES="\u2191" # โ†‘ + VCS_TAG_ICON='' + VCS_BOOKMARK_ICON="\u263F" # โ˜ฟ + VCS_COMMIT_ICON='' + VCS_BRANCH_ICON="\uE0A0 " # ๎‚  + VCS_REMOTE_BRANCH_ICON="\u2192" # โ†’ + VCS_GIT_ICON="" + VCS_HG_ICON="" + ;; +esac + +if [[ "$POWERLEVEL9K_HIDE_BRANCH_ICON" == true ]]; then + VCS_BRANCH_ICON='' +fi + +################################################################ +# color scheme +################################################################ + +if [[ "$POWERLEVEL9K_COLOR_SCHEME" == "light" ]]; then + DEFAULT_COLOR=white + DEFAULT_COLOR_INVERTED=black + DEFAULT_COLOR_DARK="252" +else + DEFAULT_COLOR=black + DEFAULT_COLOR_INVERTED=white + DEFAULT_COLOR_DARK="236" +fi + +VCS_FOREGROUND_COLOR=$DEFAULT_COLOR +VCS_FOREGROUND_COLOR_DARK=$DEFAULT_COLOR_DARK + +# If user has defined custom colors for the `vcs` segment, override the defaults +if [[ -n $POWERLEVEL9K_VCS_FOREGROUND ]]; then + VCS_FOREGROUND_COLOR=$POWERLEVEL9K_VCS_FOREGROUND +fi +if [[ -n $POWERLEVEL9K_VCS_DARK_FOREGROUND ]]; then + VCS_FOREGROUND_COLOR_DARK=$POWERLEVEL9K_VCS_DARK_FOREGROUND +fi + +################################################################ +# VCS Information Settings +################################################################ + +setopt prompt_subst +autoload -Uz vcs_info + +VCS_WORKDIR_DIRTY=false +VCS_CHANGESET_PREFIX='' +if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then + # Default: Just display the first 12 characters of our changeset-ID. + local VCS_CHANGESET_HASH_LENGTH=12 + if [[ -n "$POWERLEVEL9K_CHANGESET_HASH_LENGTH" ]]; then + VCS_CHANGESET_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH" + fi + + VCS_CHANGESET_PREFIX="%F{$VCS_FOREGROUND_COLOR_DARK}$VCS_COMMIT_ICON%0.$VCS_CHANGESET_HASH_LENGTH""i%f " +fi + +zstyle ':vcs_info:*' enable git hg +zstyle ':vcs_info:*' check-for-changes true + +VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%F{$VCS_FOREGROUND_COLOR}%b%c%u%m%f" +zstyle ':vcs_info:git*:*' formats "%F{$VCS_FOREGROUND_COLOR}$VCS_GIT_ICON%f$VCS_DEFAULT_FORMAT" +zstyle ':vcs_info:hg*:*' formats "%F{$VCS_FOREGROUND_COLOR}$VCS_HG_ICON%f$VCS_DEFAULT_FORMAT" + +zstyle ':vcs_info:*' actionformats "%b %F{red}| %a%f" + +zstyle ':vcs_info:*' stagedstr " %F{$VCS_FOREGROUND_COLOR}$VCS_STAGED_ICON%f" +zstyle ':vcs_info:*' unstagedstr " %F{$VCS_FOREGROUND_COLOR}$VCS_UNSTAGED_ICON%f" + +zstyle ':vcs_info:git*+set-message:*' hooks vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname +zstyle ':vcs_info:hg*+set-message:*' hooks vcs-detect-changes + +# For Hg, only show the branch name +zstyle ':vcs_info:hg*:*' branchformat "$VCS_BRANCH_ICON%b" +# The `get-revision` function must be turned on for dirty-check to work for Hg +zstyle ':vcs_info:hg*:*' get-revision true +zstyle ':vcs_info:hg*:*' get-bookmarks true +zstyle ':vcs_info:hg*+gen-hg-bookmark-string:*' hooks hg-bookmarks + +if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then + zstyle ':vcs_info:*' get-revision true +fi + +################################################################ +# Prompt Segment Constructors +################################################################ + +# Begin a left prompt segment +# Takes four arguments: +# * $1: Name of the function that was orginally invoked (mandatory). +# Necessary, to make the dynamic color-overwrite mechanism work. +# * $2: Background color +# * $3: Foreground color +# * $4: The segment content +# The latter three can be omitted, +left_prompt_segment() { + # Overwrite given background-color by user defined variable for this segment. + # We get as first Parameter the function name, which called this function. + # From the given function name, we strip the "prompt_"-prefix and uppercase it. + # This is, prefixed with "POWERLEVEL9K_" and suffixed with either "_BACKGROUND" + # of "_FOREGROUND", our variable name. So each new Segment should automatically + # be overwritable by a variable following this naming convention. + local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND + local BG_COLOR_MODIFIER=${(P)BACKGROUND_USER_VARIABLE} + [[ -n $BG_COLOR_MODIFIER ]] && 2=$BG_COLOR_MODIFIER + + # Overwrite given foreground-color by user defined variable for this segment. + local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_FOREGROUND + local FG_COLOR_MODIFIER=${(P)FOREGROUND_USER_VARIABLE} + [[ -n $FG_COLOR_MODIFIER ]] && 3=$FG_COLOR_MODIFIER + + local bg fg + [[ -n $2 ]] && bg="%K{$2}" || bg="%k" + [[ -n $3 ]] && fg="%F{$3}" || fg="%f" + if [[ $CURRENT_BG != 'NONE' && $2 != $CURRENT_BG ]]; then + # Middle segment + echo -n "%{$bg%F{$CURRENT_BG}%}$LEFT_SEGMENT_SEPARATOR%{$fg%} " + else + # First segment + echo -n "%{$bg%}%{$fg%} " + fi + CURRENT_BG=$2 + [[ -n $4 ]] && echo -n "$4 " +} + +# End the left prompt, closing any open segments +left_prompt_end() { + if [[ -n $CURRENT_BG ]]; then + echo -n "%{%k%F{$CURRENT_BG}%}$LEFT_SEGMENT_SEPARATOR" + else + echo -n "%{%k%}" + fi + echo -n "%{%f%} " + CURRENT_BG='' +} + +# Begin a right prompt segment +# Takes four arguments: +# * $1: Name of the function that was orginally invoked (mandatory). +# Necessary, to make the dynamic color-overwrite mechanism work. +# * $2: Background color +# * $3: Foreground color +# * $4: The segment content +# No ending for the right prompt segment is needed (unlike the left prompt, above). +right_prompt_segment() { + # Overwrite given background-color by user defined variable for this segment. + local BACKGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_BACKGROUND + local BG_COLOR_MODIFIER=${(P)BACKGROUND_USER_VARIABLE} + [[ -n $BG_COLOR_MODIFIER ]] && 2=$BG_COLOR_MODIFIER + + # Overwrite given foreground-color by user defined variable for this segment. + local FOREGROUND_USER_VARIABLE=POWERLEVEL9K_${(U)1#prompt_}_FOREGROUND + local FG_COLOR_MODIFIER=${(P)FOREGROUND_USER_VARIABLE} + [[ -n $FG_COLOR_MODIFIER ]] && 3=$FG_COLOR_MODIFIER + + local bg fg + [[ -n $2 ]] && bg="%K{$2}" || bg="%k" + [[ -n $3 ]] && fg="%F{$3}" || fg="%f" + echo -n "%f%F{$2}$RIGHT_SEGMENT_SEPARATOR%f%{$bg%}%{$fg%} " + [[ -n $4 ]] && echo -n "$4 " +} + +################################################################ +# The 'vcs' Segment and VCS_INFO hooks / helper functions +################################################################ +prompt_vcs() { + local vcs_prompt="${vcs_info_msg_0_}" + + if [[ -n "$vcs_prompt" ]]; then + if [[ "$VCS_WORKDIR_DIRTY" == true ]]; then + $1_prompt_segment "$0_MODIFIED" "yellow" "$DEFAULT_COLOR" + else + $1_prompt_segment "$0" "green" "$DEFAULT_COLOR" + fi + + echo -n "$vcs_prompt " + fi +} + +function +vi-git-untracked() { + if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' && \ + ${$(git ls-files --others --exclude-standard | sed q | wc -l)// /} != 0 ]]; then + hook_com[unstaged]+=" %F{$VCS_FOREGROUND_COLOR}$VCS_UNTRACKED_ICON%f" + fi +} + +function +vi-git-aheadbehind() { + local ahead behind branch_name + local -a gitstatus + + branch_name=${$(git symbolic-ref --short HEAD 2>/dev/null)} + + # for git prior to 1.7 + # ahead=$(git rev-list origin/${branch_name}..HEAD | wc -l) + ahead=$(git rev-list ${branch_name}@{upstream}..HEAD 2>/dev/null | wc -l) + (( $ahead )) && gitstatus+=( " %F{$VCS_FOREGROUND_COLOR}$VCS_OUTGOING_CHANGES${ahead// /}%f" ) + + # for git prior to 1.7 + # behind=$(git rev-list HEAD..origin/${branch_name} | wc -l) + behind=$(git rev-list HEAD..${branch_name}@{upstream} 2>/dev/null | wc -l) + (( $behind )) && gitstatus+=( " %F{$VCS_FOREGROUND_COLOR}$VCS_INCOMING_CHANGES${behind// /}%f" ) + + hook_com[misc]+=${(j::)gitstatus} +} + +function +vi-git-remotebranch() { + local remote branch_name + + # Are we on a remote-tracking branch? + remote=${$(git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/} + branch_name=${$(git symbolic-ref --short HEAD 2>/dev/null)} + + hook_com[branch]="%F{$VCS_FOREGROUND_COLOR}$VCS_BRANCH_ICON${hook_com[branch]}%f" + # Always show the remote + #if [[ -n ${remote} ]] ; then + # Only show the remote if it differs from the local + if [[ -n ${remote} && ${remote#*/} != ${branch_name} ]] ; then + hook_com[branch]+="%F{$VCS_FOREGROUND_COLOR}$VCS_REMOTE_BRANCH_ICON%f%F{$VCS_FOREGROUND_COLOR}${remote// /}%f" + fi +} + +function +vi-git-tagname() { + local tag + + tag=$(git describe --tags --exact-match HEAD 2>/dev/null) + [[ -n "${tag}" ]] && hook_com[branch]=" %F{$VCS_FOREGROUND_COLOR}$VCS_TAG_ICON${tag}%f" +} + +# Show count of stashed changes +# Port from https://github.com/whiteinge/dotfiles/blob/5dfd08d30f7f2749cfc60bc55564c6ea239624d9/.zsh_shouse_prompt#L268 +function +vi-git-stash() { + local -a stashes + + if [[ -s $(git rev-parse --git-dir)/refs/stash ]] ; then + stashes=$(git stash list 2>/dev/null | wc -l) + hook_com[misc]+=" %F{$VCS_FOREGROUND_COLOR}$VCS_STASH_ICON${stashes// /}%f" + fi +} + +function +vi-hg-bookmarks() { + if [[ -n "${hgbmarks[@]}" ]]; then + hook_com[hg-bookmark-string]=" %F{$VCS_FOREGROUND_COLOR}$VCS_BOOKMARK_ICON${hgbmarks[@]}%f" + + # And to signal, that we want to use the sting we just generated, + # set the special variable `ret' to something other than the default + # zero: + ret=1 + return 0 + fi +} + +function +vi-vcs-detect-changes() { + if [[ -n "${hook_com[staged]}" ]] || [[ -n "${hook_com[unstaged]}" ]]; then + VCS_WORKDIR_DIRTY=true + else + VCS_WORKDIR_DIRTY=false + fi +} + +################################################################ +# Prompt Segments +################################################################ + +# The `CURRENT_BG` variable is used to remember what the last BG color used was +# when building the left-hand prompt. Because the RPROMPT is created from +# right-left but reads the opposite, this isn't necessary for the other side. +CURRENT_BG='NONE' + +# AWS Profile +prompt_aws() { + local aws_profile="$AWS_DEFAULT_PROFILE" + if [[ -n "$aws_profile" ]]; + then + $1_prompt_segment "$0" red white "$AWS_ICON $aws_profile" + fi +} + +# Context: user@hostname (who am I and where am I) +# Note that if $DEFAULT_USER is not set, this prompt segment will always print +prompt_context() { + if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then + if [[ $(print -P "%#") == '#' ]]; then + # Shell runs as root + $1_prompt_segment "$0_ROOT" "$DEFAULT_COLOR" "yellow" "$USER@%m" + else + $1_prompt_segment "$0_DEFAULT" "$DEFAULT_COLOR" "011" "$USER@%m" + fi + fi +} + +# Dir: current working directory +prompt_dir() { + local current_path='%~' + if [[ -n "$POWERLEVEL9K_SHORTEN_DIR_LENGTH" ]]; then + # shorten path to $POWERLEVEL9K_SHORTEN_DIR_LENGTH + current_path="%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:.../:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c" + fi + + $1_prompt_segment "$0" "blue" "$DEFAULT_COLOR" "$current_path" +} + +# Command number (in local history) +prompt_history() { + $1_prompt_segment "$0" "244" "$DEFAULT_COLOR" '%h' +} + +# Right Status: (return code, root status, background jobs) +# This creates a status segment for the *right* prompt. Exact same thing as +# above - just other side. +prompt_longstatus() { + local symbols bg + symbols=() + + if [[ "$RETVAL" -ne 0 ]]; then + symbols+="%F{226}%? โ†ต" + bg="009" + else + symbols+="%{%F{"046"}%}$OK_ICON" + bg="008" + fi + + [[ "$UID" -eq 0 ]] && symbols+="%{%F{yellow}%} $ROOT_ICON" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$BACKGROUND_JOBS_ICON" + + [[ -n "$symbols" ]] && $1_prompt_segment "$0" "$bg" "$DEFAULT_COLOR" "$symbols" +} + +# Node version +prompt_node_version() { + local nvm_prompt=$(node -v 2>/dev/null) + [[ -z "${nvm_prompt}" ]] && return + NODE_ICON=$'\u2B22' # โฌข + + $1_prompt_segment "$0" "green" "white" "${nvm_prompt:1} $NODE_ICON" +} + +# rbenv information +prompt_rbenv() { + if [[ -n "$RBENV_VERSION" ]]; then + $1_prompt_segment "$0" "red" "$DEFAULT_COLOR" "$RBENV_VERSION" + fi +} + +# RSpec test ratio +prompt_rspec_stats() { + if [[ (-d app && -d spec) ]]; then + local code_amount=$(ls -1 app/**/*.rb | wc -l) + local tests_amount=$(ls -1 spec/**/*.rb | wc -l) + + build_test_stats "$1" $0 "$code_amount" $tests_amount "RSpec $TEST_ICON" + fi +} + +# Ruby Version Manager information +prompt_rvm() { + local rvm_prompt + rvm_prompt=`rvm-prompt` + if [ "$rvm_prompt" != "" ]; then + $1_prompt_segment "$0" "240" "$DEFAULT_COLOR" "$rvm_prompt $RUBY_ICON " + fi +} + +# Left Status: (return code, root status, background jobs) +# This creates a status segment for the *left* prompt +prompt_status() { + local symbols + symbols=() + [[ "$RETVAL" -ne 0 ]] && symbols+="%{%F{red}%}$FAIL_ICON" + [[ "$UID" -eq 0 ]] && symbols+="%{%F{yellow}%} $ROOT_ICON" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$BACKGROUND_JOBS_ICON" + + [[ -n "$symbols" ]] && $1_prompt_segment "$0" "$DEFAULT_COLOR" "default" "$symbols" +} + +# Symfony2-PHPUnit test ratio +prompt_symfony2_tests() { + if [[ (-d src && -d app && -f app/AppKernel.php) ]]; then + local code_amount=$(ls -1 src/**/*.php | grep -v Tests | wc -l) + local tests_amount=$(ls -1 src/**/*.php | grep Tests | wc -l) + + build_test_stats "$1" "$0" "$code_amount" "$tests_amount" "SF2 $TEST_ICON" + fi +} + +# Symfony2-Version +prompt_symfony2_version() { + if [[ -f app/bootstrap.php.cache ]]; then + local symfony2_version=$(grep " VERSION " app/bootstrap.php.cache | sed -e 's/[^.0-9]*//g') + $1_prompt_segment "$0" "240" "$DEFAULT_COLOR" "$SYMFONY_ICON $symfony2_version" + fi +} + +# Show a ratio of tests vs code +build_test_stats() { + local code_amount="$3" + local tests_amount="$4"+0.00001 + local headline="$5" + + # Set float precision to 2 digits: + typeset -F 2 ratio + local ratio=$(( (tests_amount/code_amount) * 100 )) + + [[ ratio -ge 0.75 ]] && $1_prompt_segment "${2}_GOOD" "cyan" "$DEFAULT_COLOR" "$headline: $ratio%%" + [[ ratio -ge 0.5 && ratio -lt 0.75 ]] && $1_prompt_segment "$2_AVG" "yellow" "$DEFAULT_COLOR" "$headline: $ratio%%" + [[ ratio -lt 0.5 ]] && $1_prompt_segment "$2_BAD" "red" "$DEFAULT_COLOR" "$headline: $ratio%%" +} + +# System time +prompt_time() { + local time_format="%D{%H:%M:%S}" + if [[ -n "$POWERLEVEL9K_TIME_FORMAT" ]]; then + time_format="$POWERLEVEL9K_TIME_FORMAT" + fi + + $1_prompt_segment "$0" "$DEFAULT_COLOR_INVERTED" "$DEFAULT_COLOR" "$time_format" +} + +# Virtualenv: current working virtualenv +# More information on virtualenv (Python): +# https://virtualenv.pypa.io/en/latest/ +prompt_virtualenv() { + local virtualenv_path="$VIRTUAL_ENV" + if [[ -n "$virtualenv_path" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then + $1_prompt_segment "$0" "blue" "$DEFAULT_COLOR" "(`basename $virtualenv_path`)" + fi +} + +################################################################ +# Prompt processing and drawing +################################################################ + +# Main prompt +build_left_prompt() { + RETVAL=$? + + if [[ "${#POWERLEVEL9K_LEFT_PROMPT_ELEMENTS}" == 0 ]]; then + POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context dir rbenv vcs) + fi + + for element in $POWERLEVEL9K_LEFT_PROMPT_ELEMENTS; do + prompt_$element "left" + done + + left_prompt_end +} + +# Right prompt +build_right_prompt() { + RETVAL=$? + + if [[ "${#POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS}" == 0 ]]; then + POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(longstatus history time) + fi + + for element in $POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS; do + prompt_$element "right" + done +} + +powerlevel9k_init() { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # initialize colors + autoload -U colors && colors + + # initialize VCS + autoload -Uz add-zsh-hook + + add-zsh-hook precmd vcs_info + + if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then + [[ -n $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX ]] || POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="โ•ญโ”€" + [[ -n $POWERLEVEL9K_MULTILINE_SECOND_PROMPT_PREFIX ]] || POWERLEVEL9K_MULTILINE_SECOND_PROMPT_PREFIX="โ•ฐโ”€ " + + PROMPT="$POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX%{%f%b%k%}"'$(build_left_prompt)'" +$POWERLEVEL9K_MULTILINE_SECOND_PROMPT_PREFIX" + # The right prompt should be on the same line as the first line of the left + # prompt. To do so, there is just a quite ugly workaround: Before zsh draws + # the RPROMPT, we advise it, to go one line up. At the end of RPROMPT, we + # advise it to go one line down. See: + # http://superuser.com/questions/357107/zsh-right-justify-in-ps1 + RPROMPT_PREFIX='%{'$'\e[1A''%}' # one line up + RPROMPT_SUFFIX='%{'$'\e[1B''%}' # one line down + else + PROMPT="%{%f%b%k%}"'$(build_left_prompt)' + RPROMPT_PREFIX='' + RPROMPT_SUFFIX='' + fi + + if [[ "$POWERLEVEL9K_DISABLE_RPROMPT" != true ]]; then + RPROMPT=$RPROMPT_PREFIX"%{%f%b%k%}"'$(build_right_prompt)'"%{$reset_color%}"$RPROMPT_SUFFIX + fi +} + +powerlevel9k_init "$@"