aboutsummaryrefslogtreecommitdiff
path: root/powerlevel9k.zsh-theme
diff options
context:
space:
mode:
Diffstat (limited to 'powerlevel9k.zsh-theme')
-rw-r--r--powerlevel9k.zsh-theme172
1 files changed, 157 insertions, 15 deletions
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index 792d86b4..50911e27 100644
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -32,6 +32,18 @@ function defined() {
typeset -p "$varname" > /dev/null 2>&1
}
+# Given the name of a variable and a default value, sets the variable
+# value to the default only if it has not been defined.
+#
+# Typeset cannot set the value for an array, so this will only work
+# for scalar values.
+function set_default() {
+ local varname="$1"
+ local default_value="$2"
+
+ defined "$varname" || typeset -g "$varname"="$default_value"
+}
+
# Safety function for printing icons
# Prints the named icon, or if that icon is undefined, the string name.
function print_icon() {
@@ -45,16 +57,52 @@ function print_icon() {
fi
}
-# Given the name of a variable and a default value, sets the variable
-# value to the default only if it has not been defined.
-#
-# Typeset cannot set the value for an array, so this will only work
-# for scalar values.
-function set_default() {
- local varname="$1"
- local default_value="$2"
+printSizeHumanReadable() {
+ local size=$1
+ local extension
+ extension=(B K M G T P E Z Y)
+ local index=1
+
+ # if the base is not Bytes
+ if [[ -n $2 ]]; then
+ for idx in ${extension}; do
+ if [[ "$2" == "$idx" ]]; then
+ break
+ fi
+ index=$(( $index + 1 ))
+ done
+ fi
- defined "$varname" || typeset -g "$varname"="$default_value"
+ while (( ($size / 1024) > 0 )); do
+ size=$(( $size / 1024 ))
+ index=$(( $index + 1 ))
+ done
+
+ echo $size${extension[$index]}
+}
+
+# Gets the first value out of a list of items that is not empty.
+# The items are examined by a callback-function.
+# Takes two arguments:
+# * $list - A list of items
+# * $callback - A callback function to examine if the item is
+# worthy. The callback function has access to
+# the inner variable $item.
+function getRelevantItem() {
+ setopt shwordsplit # We need to split the words in $interfaces
+
+ local list callback
+ list=$1
+ callback=$2
+
+ for item in $list; do
+ # The first non-empty item wins
+ try=$(eval $callback)
+ if [[ -n "$try" ]]; then
+ echo $try
+ break;
+ fi
+ done
}
get_icon_names() {
@@ -92,11 +140,15 @@ case $POWERLEVEL9K_MODE in
NODE_ICON $'\U2B22' # ⬢
MULTILINE_FIRST_PROMPT_PREFIX $'\U256D'$'\U2500'
MULTILINE_SECOND_PROMPT_PREFIX $'\U2570'$'\U2500 '
- APPLE_ICON $'\UF8FF' # 
+ APPLE_ICON $'\UE26E' # 
FREEBSD_ICON $'\U1F608 ' # 😈
- LINUX_ICON $'\U1F427 ' # 🐧
+ LINUX_ICON $'\UE271' # 
SUNOS_ICON $'\U1F31E ' # 🌞
- HOME_ICON $'\UE12C' # 
+ HOME_ICON $'\UE12C ' # 
+ NETWORK_ICON $'\UE1AD ' # 
+ LOAD_ICON $'\UE190 ' # 
+ #RAM_ICON $'\UE87D' # 
+ RAM_ICON $'\UE1E2 ' # 
VCS_UNTRACKED_ICON "\UE16C" # 
VCS_UNSTAGED_ICON "\UE17C" # 
VCS_STAGED_ICON "\UE168" # 
@@ -138,6 +190,9 @@ case $POWERLEVEL9K_MODE in
LINUX_ICON 'Lx'
SUNOS_ICON 'Sun'
HOME_ICON ''
+ NETWORK_ICON 'IP'
+ LOAD_ICON 'L'
+ RAM_ICON 'RAM'
VCS_UNTRACKED_ICON '?'
VCS_UNSTAGED_ICON "\u25CF" # ●
VCS_STAGED_ICON "\u271A" # ✚
@@ -258,7 +313,7 @@ VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%F{$POWERLEVEL9K_VCS_FOREGROUND}%b%c%u%
zstyle ':vcs_info:git*:*' formats "%F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_GIT_ICON')%f$VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:hg*:*' formats "%F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_HG_ICON')%f$VCS_DEFAULT_FORMAT"
-zstyle ':vcs_info:*' actionformats " %b %F{red}| %a%f"
+zstyle ':vcs_info:*' actionformats "%b %F{red}| %a%f"
zstyle ':vcs_info:*' stagedstr " %F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_STAGED_ICON')%f"
zstyle ':vcs_info:*' unstagedstr " %F{$POWERLEVEL9K_VCS_FOREGROUND}$(print_icon 'VCS_UNSTAGED_ICON')%f"
@@ -377,7 +432,7 @@ prompt_vcs() {
$1_prompt_segment "$0" "green" "$DEFAULT_COLOR"
fi
- echo -n "%F{$POWERLEVEL9K_VCS_FOREGROUND}%f$vcs_prompt "
+ echo -n "$vcs_prompt "
fi
}
@@ -510,7 +565,7 @@ prompt_dir() {
fi
- $1_prompt_segment "$0" "blue" "$DEFAULT_COLOR" "$(print_icon 'HOME_ICON') $current_path"
+ $1_prompt_segment "$0" "blue" "$DEFAULT_COLOR" "$(print_icon 'HOME_ICON')$current_path"
}
# Command number (in local history)
@@ -528,6 +583,75 @@ prompt_icons_test() {
done
}
+prompt_ip() {
+ if [[ "$OS" == "OSX" ]]; then
+ if defined POWERLEVEL9K_IP_INTERFACE; then
+ # Get the IP address of the specified interface.
+ ip=$(ipconfig getifaddr $POWERLEVEL9K_IP_INTERFACE)
+ else
+ local interfaces callback
+ # Get network interface names ordered by service precedence.
+ interfaces=$(networksetup -listnetworkserviceorder | grep -o "Device:\s*[a-z0-9]*" | grep -o -E '[a-z0-9]*$')
+ callback='ipconfig getifaddr $item'
+
+ ip=$(getRelevantItem $interfaces $callback)
+ fi
+ else
+ if defined POWERLEVEL9K_IP_INTERFACE; then
+ # Get the IP address of the specified interface.
+ ip=$(ip -4 a show $POWERLEVEL9K_IP_INTERFACE | grep -o "inet\s*[0-9.]*" | grep -o "[0-9.]*")
+ else
+ local interfaces callback
+ # Get all network interface names that are up
+ interfaces=$(ip link ls up | grep -o -E ":\s+[a-z0-9]+:" | grep -v "lo" | grep -o "[a-z0-9]*")
+ callback='ip -4 a show $item | grep -o "inet\s*[0-9.]*" | grep -o "[0-9.]*"'
+
+ ip=$(getRelevantItem $interfaces $callback)
+ fi
+ fi
+
+ $1_prompt_segment "$0" "cyan" "$DEFAULT_COLOR" "$(print_icon 'NETWORK_ICON') $ip"
+}
+
+set_default POWERLEVEL9K_LOAD_SHOW_FREE_RAM true
+prompt_load() {
+ if [[ "$OS" == "OSX" ]]; then
+ load_avg_5min=$(sysctl vm.loadavg | grep -o -E '[0-9]+(\.|,)[0-9]+' | head -n 1)
+ if [[ "$POWERLEVEL9K_LOAD_SHOW_FREE_RAM" == true ]]; then
+ ramfree=$(vm_stat | grep "Pages free" | grep -o -E '[0-9]+')
+ # Convert pages into Bytes
+ ramfree=$(( $ramfree * 4096 ))
+ base=''
+ fi
+ else
+ load_avg_5min=$(grep -o "[0-9.]*" /proc/loadavg | head -n 1)
+ if [[ "$POWERLEVEL9K_LOAD_SHOW_FREE_RAM" == true ]]; then
+ ramfree=$(grep -o -E "MemFree:\s+[0-9]+" /proc/meminfo | grep -o "[0-9]*")
+ base=K
+ fi
+ fi
+
+ # Replace comma
+ load_avg_5min=${load_avg_5min//,/.}
+
+ if [[ "$load_avg_5min" -gt 10 ]]; then
+ BACKGROUND_COLOR="red"
+ FUNCTION_SUFFIX="_CRITICAL"
+ elif [[ "$load_avg_5min" -gt 3 ]]; then
+ BACKGROUND_COLOR="yellow"
+ FUNCTION_SUFFIX="_WARNING"
+ else
+ BACKGROUND_COLOR="green"
+ FUNCTION_SUFFIX="_NORMAL"
+ fi
+
+ $1_prompt_segment "$0$FUNCTION_SUFFIX" $BACKGROUND_COLOR "$DEFAULT_COLOR" "$(print_icon 'LOAD_ICON') $load_avg_5min"
+
+ if [[ "$POWERLEVEL9K_LOAD_SHOW_FREE_RAM" == true ]]; then
+ echo -n "$(print_icon 'RAM_ICON') $(printSizeHumanReadable $ramfree $base) "
+ fi
+}
+
# 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.
@@ -562,6 +686,16 @@ prompt_os_icon() {
$1_prompt_segment "$0" "008" "255" "$OS_ICON"
}
+# print PHP version number
+prompt_php_version() {
+ local php_version
+ php_version=$(php -v 2>&1 | grep -oe "^PHP\s*[0-9.]*")
+
+ if [[ -n "$php_version" ]]; then
+ $1_prompt_segment "$0" "013" "255" "$php_version"
+ fi
+}
+
# rbenv information
prompt_rbenv() {
if [[ -n "$RBENV_VERSION" ]]; then
@@ -682,6 +816,14 @@ build_right_prompt() {
}
powerlevel9k_init() {
+ # Display a warning if the terminal does not support 256 colors
+ local term_colors
+ term_colors=$(tput colors)
+ if (( $term_colors < 256 )); then
+ print -P "%F{red}WARNING!%f Your terminal supports less than 256 colors!"
+ print "You should set TERM=xterm-256colors in your ~/.zshrc"
+ fi
+
setopt LOCAL_OPTIONS
unsetopt XTRACE KSH_ARRAYS
prompt_opts=(cr percent subst)