summaryrefslogtreecommitdiff
path: root/functions
diff options
context:
space:
mode:
Diffstat (limited to 'functions')
-rwxr-xr-x[-rw-r--r--]functions/colors.zsh363
-rwxr-xr-x[-rw-r--r--]functions/icons.zsh208
-rwxr-xr-x[-rw-r--r--]functions/utilities.zsh139
-rwxr-xr-x[-rw-r--r--]functions/vcs.zsh53
4 files changed, 715 insertions, 48 deletions
diff --git a/functions/colors.zsh b/functions/colors.zsh
index c82af9ea..e98bfd4f 100644..100755
--- a/functions/colors.zsh
+++ b/functions/colors.zsh
@@ -6,6 +6,66 @@
# https://github.com/bhilburn/powerlevel9k
################################################################
+function termColors() {
+ if [[ $POWERLEVEL9K_IGNORE_TERM_COLORS == true ]]; then
+ return
+ fi
+
+ local term_colors
+
+ if which tput &>/dev/null; then
+ term_colors=$(tput colors)
+ else
+ term_colors=$(echotc Co)
+ fi
+ if (( ! $? && ${term_colors:-0} < 256 )); then
+ print -P "%F{red}WARNING!%f Your terminal appears to support fewer than 256 colors!"
+ print -P "If your terminal supports 256 colors, please export the appropriate environment variable"
+ print -P "_before_ loading this theme in your \~\/.zshrc. In most terminal emulators, putting"
+ print -P "%F{blue}export TERM=\"xterm-256color\"%f at the top of your \~\/.zshrc is sufficient."
+ fi
+}
+
+# get the proper color code if it does not exist as a name.
+function getColor() {
+ # no need to check numerical values
+ if [[ "$1" = <-> ]]; then
+ if [[ "$1" = <8-15> ]]; then
+ 1=$(($1 - 8))
+ fi
+ else
+ # named color added to parameter expansion print -P to test if the name exists in terminal
+ local named="%K{$1}"
+ # https://misc.flogisoft.com/bash/tip_colors_and_formatting
+ local default="$'\033'\[49m"
+ # http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html
+ local quoted=$(printf "%q" $(print -P "$named"))
+ if [[ $quoted = "$'\033'\[49m" && $1 != "black" ]]; then
+ # color not found, so try to get the code
+ 1=$(getColorCode $1)
+ fi
+ fi
+ echo -n "$1"
+}
+
+# empty paramenter resets (stops) background color
+function backgroundColor() {
+ if [[ -z $1 ]]; then
+ echo -n "%k"
+ else
+ echo -n "%K{$(getColor $1)}"
+ fi
+}
+
+# empty paramenter resets (stops) foreground color
+function foregroundColor() {
+ if [[ -z $1 ]]; then
+ echo -n "%f"
+ else
+ echo -n "%F{$(getColor $1)}"
+ fi
+}
+
# Get numerical color codes. That way we translate ANSI codes
# into ZSH-Style color codes.
function getColorCode() {
@@ -15,30 +75,292 @@ function getColorCode() {
# and "background" colors. We don't need to do that,
# as ZSH uses a 256 color space anyway.
if [[ "$1" = <8-15> ]]; then
- echo $(($1 - 8))
+ echo -n $(($1 - 8))
else
- echo "$1"
+ echo -n "$1"
fi
else
typeset -A codes
- codes=(
- 'black' '000'
- 'red' '001'
- 'green' '002'
- 'yellow' '003'
- 'blue' '004'
- 'magenta' '005'
- 'cyan' '006'
- 'white' '007'
- )
-
- # Strip eventual "bg-" prefixes
- 1=${1#bg-}
- # Strip eventual "fg-" prefixes
- 1=${1#fg-}
- # Strip eventual "br" prefixes ("bright" colors)
- 1=${1#br}
- echo $codes[$1]
+ # https://jonasjacek.github.io/colors/
+ # use color names by default to allow dark/light themes to adjust colors based on names
+ codes[black]=000
+ codes[maroon]=001
+ codes[green]=002
+ codes[olive]=003
+ codes[navy]=004
+ codes[purple]=005
+ codes[teal]=006
+ codes[silver]=007
+ codes[grey]=008
+ codes[red]=009
+ codes[lime]=010
+ codes[yellow]=011
+ codes[blue]=012
+ codes[fuchsia]=013
+ codes[aqua]=014
+ codes[white]=015
+ codes[grey0]=016
+ codes[navyblue]=017
+ codes[darkblue]=018
+ codes[blue3]=019
+ codes[blue3]=020
+ codes[blue1]=021
+ codes[darkgreen]=022
+ codes[deepskyblue4]=023
+ codes[deepskyblue4]=024
+ codes[deepskyblue4]=025
+ codes[dodgerblue3]=026
+ codes[dodgerblue2]=027
+ codes[green4]=028
+ codes[springgreen4]=029
+ codes[turquoise4]=030
+ codes[deepskyblue3]=031
+ codes[deepskyblue3]=032
+ codes[dodgerblue1]=033
+ codes[green3]=034
+ codes[springgreen3]=035
+ codes[darkcyan]=036
+ codes[lightseagreen]=037
+ codes[deepskyblue2]=038
+ codes[deepskyblue1]=039
+ codes[green3]=040
+ codes[springgreen3]=041
+ codes[springgreen2]=042
+ codes[cyan3]=043
+ codes[darkturquoise]=044
+ codes[turquoise2]=045
+ codes[green1]=046
+ codes[springgreen2]=047
+ codes[springgreen1]=048
+ codes[mediumspringgreen]=049
+ codes[cyan2]=050
+ codes[cyan1]=051
+ codes[darkred]=052
+ codes[deeppink4]=053
+ codes[purple4]=054
+ codes[purple4]=055
+ codes[purple3]=056
+ codes[blueviolet]=057
+ codes[orange4]=058
+ codes[grey37]=059
+ codes[mediumpurple4]=060
+ codes[slateblue3]=061
+ codes[slateblue3]=062
+ codes[royalblue1]=063
+ codes[chartreuse4]=064
+ codes[darkseagreen4]=065
+ codes[paleturquoise4]=066
+ codes[steelblue]=067
+ codes[steelblue3]=068
+ codes[cornflowerblue]=069
+ codes[chartreuse3]=070
+ codes[darkseagreen4]=071
+ codes[cadetblue]=072
+ codes[cadetblue]=073
+ codes[skyblue3]=074
+ codes[steelblue1]=075
+ codes[chartreuse3]=076
+ codes[palegreen3]=077
+ codes[seagreen3]=078
+ codes[aquamarine3]=079
+ codes[mediumturquoise]=080
+ codes[steelblue1]=081
+ codes[chartreuse2]=082
+ codes[seagreen2]=083
+ codes[seagreen1]=084
+ codes[seagreen1]=085
+ codes[aquamarine1]=086
+ codes[darkslategray2]=087
+ codes[darkred]=088
+ codes[deeppink4]=089
+ codes[darkmagenta]=090
+ codes[darkmagenta]=091
+ codes[darkviolet]=092
+ codes[purple]=093
+ codes[orange4]=094
+ codes[lightpink4]=095
+ codes[plum4]=096
+ codes[mediumpurple3]=097
+ codes[mediumpurple3]=098
+ codes[slateblue1]=099
+ codes[yellow4]=100
+ codes[wheat4]=101
+ codes[grey53]=102
+ codes[lightslategrey]=103
+ codes[mediumpurple]=104
+ codes[lightslateblue]=105
+ codes[yellow4]=106
+ codes[darkolivegreen3]=107
+ codes[darkseagreen]=108
+ codes[lightskyblue3]=109
+ codes[lightskyblue3]=110
+ codes[skyblue2]=111
+ codes[chartreuse2]=112
+ codes[darkolivegreen3]=113
+ codes[palegreen3]=114
+ codes[darkseagreen3]=115
+ codes[darkslategray3]=116
+ codes[skyblue1]=117
+ codes[chartreuse1]=118
+ codes[lightgreen]=119
+ codes[lightgreen]=120
+ codes[palegreen1]=121
+ codes[aquamarine1]=122
+ codes[darkslategray1]=123
+ codes[red3]=124
+ codes[deeppink4]=125
+ codes[mediumvioletred]=126
+ codes[magenta3]=127
+ codes[darkviolet]=128
+ codes[purple]=129
+ codes[darkorange3]=130
+ codes[indianred]=131
+ codes[hotpink3]=132
+ codes[mediumorchid3]=133
+ codes[mediumorchid]=134
+ codes[mediumpurple2]=135
+ codes[darkgoldenrod]=136
+ codes[lightsalmon3]=137
+ codes[rosybrown]=138
+ codes[grey63]=139
+ codes[mediumpurple2]=140
+ codes[mediumpurple1]=141
+ codes[gold3]=142
+ codes[darkkhaki]=143
+ codes[navajowhite3]=144
+ codes[grey69]=145
+ codes[lightsteelblue3]=146
+ codes[lightsteelblue]=147
+ codes[yellow3]=148
+ codes[darkolivegreen3]=149
+ codes[darkseagreen3]=150
+ codes[darkseagreen2]=151
+ codes[lightcyan3]=152
+ codes[lightskyblue1]=153
+ codes[greenyellow]=154
+ codes[darkolivegreen2]=155
+ codes[palegreen1]=156
+ codes[darkseagreen2]=157
+ codes[darkseagreen1]=158
+ codes[paleturquoise1]=159
+ codes[red3]=160
+ codes[deeppink3]=161
+ codes[deeppink3]=162
+ codes[magenta3]=163
+ codes[magenta3]=164
+ codes[magenta2]=165
+ codes[darkorange3]=166
+ codes[indianred]=167
+ codes[hotpink3]=168
+ codes[hotpink2]=169
+ codes[orchid]=170
+ codes[mediumorchid1]=171
+ codes[orange3]=172
+ codes[lightsalmon3]=173
+ codes[lightpink3]=174
+ codes[pink3]=175
+ codes[plum3]=176
+ codes[violet]=177
+ codes[gold3]=178
+ codes[lightgoldenrod3]=179
+ codes[tan]=180
+ codes[mistyrose3]=181
+ codes[thistle3]=182
+ codes[plum2]=183
+ codes[yellow3]=184
+ codes[khaki3]=185
+ codes[lightgoldenrod2]=186
+ codes[lightyellow3]=187
+ codes[grey84]=188
+ codes[lightsteelblue1]=189
+ codes[yellow2]=190
+ codes[darkolivegreen1]=191
+ codes[darkolivegreen1]=192
+ codes[darkseagreen1]=193
+ codes[honeydew2]=194
+ codes[lightcyan1]=195
+ codes[red1]=196
+ codes[deeppink2]=197
+ codes[deeppink1]=198
+ codes[deeppink1]=199
+ codes[magenta2]=200
+ codes[magenta1]=201
+ codes[orangered1]=202
+ codes[indianred1]=203
+ codes[indianred1]=204
+ codes[hotpink]=205
+ codes[hotpink]=206
+ codes[mediumorchid1]=207
+ codes[darkorange]=208
+ codes[salmon1]=209
+ codes[lightcoral]=210
+ codes[palevioletred1]=211
+ codes[orchid2]=212
+ codes[orchid1]=213
+ codes[orange1]=214
+ codes[sandybrown]=215
+ codes[lightsalmon1]=216
+ codes[lightpink1]=217
+ codes[pink1]=218
+ codes[plum1]=219
+ codes[gold1]=220
+ codes[lightgoldenrod2]=221
+ codes[lightgoldenrod2]=222
+ codes[navajowhite1]=223
+ codes[mistyrose1]=224
+ codes[thistle1]=225
+ codes[yellow1]=226
+ codes[lightgoldenrod1]=227
+ codes[khaki1]=228
+ codes[wheat1]=229
+ codes[cornsilk1]=230
+ codes[grey100]=231
+ codes[grey3]=232
+ codes[grey7]=233
+ codes[grey11]=234
+ codes[grey15]=235
+ codes[grey19]=236
+ codes[grey23]=237
+ codes[grey27]=238
+ codes[grey30]=239
+ codes[grey35]=240
+ codes[grey39]=241
+ codes[grey42]=242
+ codes[grey46]=243
+ codes[grey50]=244
+ codes[grey54]=245
+ codes[grey58]=246
+ codes[grey62]=247
+ codes[grey66]=248
+ codes[grey70]=249
+ codes[grey74]=250
+ codes[grey78]=251
+ codes[grey82]=252
+ codes[grey85]=253
+ codes[grey89]=254
+ codes[grey93]=255
+
+ # for testing purposes in terminal
+ if [[ "$1" == "foreground" ]]; then
+ # call via `getColorCode foreground`
+ for i in "${(k@)codes}"; do
+ print -P "$(foregroundColor $i)$(getColor $i) - $i$(foregroundColor)"
+ done
+ elif [[ "$1" == "background" ]]; then
+ # call via `getColorCode background`
+ for i in "${(k@)codes}"; do
+ print -P "$(backgroundColor $i)$(getColor $i) - $i$(backgroundColor)"
+ done
+ else
+ #[[ -n "$1" ]] bg="%K{$1}" || bg="%k"
+ # Strip eventual "bg-" prefixes
+ 1=${1#bg-}
+ # Strip eventual "fg-" prefixes
+ 1=${1#fg-}
+ # Strip eventual "br" prefixes ("bright" colors)
+ 1=${1#br}
+ echo -n $codes[$1]
+ fi
fi
}
@@ -53,4 +375,3 @@ function isSameColor() {
return $(( color1 != color2 ))
}
-
diff --git a/functions/icons.zsh b/functions/icons.zsh
index be507563..1a77c864 100644..100755
--- a/functions/icons.zsh
+++ b/functions/icons.zsh
@@ -27,6 +27,7 @@ case $POWERLEVEL9K_MODE in
RIGHT_SUBSEGMENT_SEPARATOR $'\uE0B3' # 
CARRIAGE_RETURN_ICON $'\u21B5' # ↵
ROOT_ICON $'\uE801' # 
+ SUDO_ICON $'\uF09C' # 
RUBY_ICON $'\uE847 ' # 
AWS_ICON $'\uE895' # 
AWS_EB_ICON $'\U1F331 ' # 🌱
@@ -47,6 +48,24 @@ case $POWERLEVEL9K_MODE in
FREEBSD_ICON $'\U1F608 ' # 😈
ANDROID_ICON $'\uE270' # 
LINUX_ICON $'\uE271' # 
+ LINUX_ARCH_ICON 'Arc'
+ LINUX_DEBIAN_ICON 'Deb'
+ LINUX_UBUNTU_ICON 'Ubu'
+ LINUX_CENTOS_ICON 'Cen'
+ LINUX_COREOS_ICON 'Cor'
+ LINUX_ELEMENTARY_ICON 'Elm'
+ LINUX_MINT_ICON 'LMi'
+ LINUX_FEDORA_ICON 'Fed'
+ LINUX_GENTOO_ICON 'Gen'
+ LINUX_MAGEIA_ICON 'Mag'
+ LINUX_NIXOS_ICON 'Nix'
+ LINUX_MANJARO_ICON 'Man'
+ LINUX_DEVUAN_ICON 'Dev'
+ LINUX_ALPINE_ICON 'Alp'
+ LINUX_AOSC_ICON 'Aos'
+ LINUX_OPENSUSE_ICON 'OSu'
+ LINUX_SABAYON_ICON 'Sab'
+ LINUX_SLACKWARE_ICON 'Sla'
SUNOS_ICON $'\U1F31E ' # 🌞
HOME_ICON $'\uE12C' # 
HOME_SUB_ICON $'\uE18D' # 
@@ -69,7 +88,7 @@ case $POWERLEVEL9K_MODE in
VCS_TAG_ICON $'\uE817 ' # 
VCS_BOOKMARK_ICON $'\uE87B' # 
VCS_COMMIT_ICON $'\uE821 ' # 
- VCS_BRANCH_ICON $'\uE220' # 
+ VCS_BRANCH_ICON $'\uE220 ' # 
VCS_REMOTE_BRANCH_ICON $'\u2192' # →
VCS_GIT_ICON $'\uE20E ' # 
VCS_GIT_GITHUB_ICON $'\uE20E ' #
@@ -87,6 +106,10 @@ case $POWERLEVEL9K_MODE in
SSH_ICON '(ssh)'
VPN_ICON '(vpn)'
KUBERNETES_ICON $'\U2388' # ⎈
+ DROPBOX_ICON $'\UF16B' # 
+ DATE_ICON $'\uE184' # 
+ TIME_ICON $'\uE12E' # 
+ JAVA_ICON $'\U2615' # ☕︎
)
;;
'awesome-fontconfig')
@@ -102,6 +125,7 @@ case $POWERLEVEL9K_MODE in
RIGHT_SUBSEGMENT_SEPARATOR $'\uE0B3' # 
CARRIAGE_RETURN_ICON $'\u21B5' # ↵
ROOT_ICON $'\uF201' # 
+ SUDO_ICON $'\uF09C' # 
RUBY_ICON $'\uF219 ' # 
AWS_ICON $'\uF270' # 
AWS_EB_ICON $'\U1F331 ' # 🌱
@@ -122,6 +146,24 @@ case $POWERLEVEL9K_MODE in
FREEBSD_ICON $'\U1F608 ' # 😈
ANDROID_ICON $'\uE17B' # 
LINUX_ICON $'\uF17C' # 
+ LINUX_ARCH_ICON 'Arc'
+ LINUX_DEBIAN_ICON 'Deb'
+ LINUX_UBUNTU_ICON 'Ubu'
+ LINUX_CENTOS_ICON 'Cen'
+ LINUX_COREOS_ICON 'Cor'
+ LINUX_ELEMENTARY_ICON 'Elm'
+ LINUX_MINT_ICON 'LMi'
+ LINUX_FEDORA_ICON 'Fed'
+ LINUX_GENTOO_ICON 'Gen'
+ LINUX_MAGEIA_ICON 'Mag'
+ LINUX_NIXOS_ICON 'Nix'
+ LINUX_MANJARO_ICON 'Man'
+ LINUX_DEVUAN_ICON 'Dev'
+ LINUX_ALPINE_ICON 'Alp'
+ LINUX_AOSC_ICON 'Aos'
+ LINUX_OPENSUSE_ICON 'OSu'
+ LINUX_SABAYON_ICON 'Sab'
+ LINUX_SLACKWARE_ICON 'Sla'
SUNOS_ICON $'\uF185 ' # 
HOME_ICON $'\uF015' # 
HOME_SUB_ICON $'\uF07C' # 
@@ -140,7 +182,7 @@ case $POWERLEVEL9K_MODE in
VCS_TAG_ICON $'\uF217 ' # 
VCS_BOOKMARK_ICON $'\uF27B' # 
VCS_COMMIT_ICON $'\uF221 ' # 
- VCS_BRANCH_ICON $'\uF126' # 
+ VCS_BRANCH_ICON $'\uF126 ' # 
VCS_REMOTE_BRANCH_ICON $'\u2192' # →
VCS_GIT_ICON $'\uF1D3 ' # 
VCS_GIT_GITHUB_ICON $'\uF113 ' # 
@@ -148,21 +190,125 @@ case $POWERLEVEL9K_MODE in
VCS_GIT_GITLAB_ICON $'\uF296 ' # 
VCS_HG_ICON $'\uF0C3 ' # 
VCS_SVN_ICON '(svn) '
- RUST_ICON $'\uE6A8' # 
+ RUST_ICON $'\uE6A8' # 
PYTHON_ICON $'\ue63c' # 
SWIFT_ICON ''
GO_ICON ''
PUBLIC_IP_ICON ''
- LOCK_ICON $'\UE138' # 
+ LOCK_ICON $'\UF023' # 
EXECUTION_TIME_ICON $'\uF253'
SSH_ICON '(ssh)'
VPN_ICON $'\uF023'
KUBERNETES_ICON $'\U2388' # ⎈
+ DROPBOX_ICON $'\UF16B' # 
+ DATE_ICON $'\uF073 ' # 
+ TIME_ICON $'\uF017 ' # 
+ JAVA_ICON $'\U2615' # ☕︎
+ )
+ ;;
+ 'awesome-mapped-fontconfig')
+ # mapped fontconfig with awesome-font required! See
+ # https://github.com/gabrielelana/awesome-terminal-fonts
+ # don't forget to source the font maps in your startup script
+ # Set the right locale to protect special characters
+ local LC_ALL="" LC_CTYPE="en_US.UTF-8"
+
+ if [ -z "$AWESOME_GLYPHS_LOADED" ]; then
+ echo "Powerlevel9k warning: Awesome-Font mappings have not been loaded.
+ Source a font mapping in your shell config, per the Awesome-Font docs
+ (https://github.com/gabrielelana/awesome-terminal-fonts),
+ Or use a different Powerlevel9k font configuration.";
+ fi
+
+ icons=(
+ LEFT_SEGMENT_SEPARATOR $'\uE0B0' # 
+ RIGHT_SEGMENT_SEPARATOR $'\uE0B2' # 
+ LEFT_SEGMENT_END_SEPARATOR ' ' # Whitespace
+ LEFT_SUBSEGMENT_SEPARATOR $'\uE0B1' # 
+ RIGHT_SUBSEGMENT_SEPARATOR $'\uE0B3' # 
+ CARRIAGE_RETURN_ICON $'\u21B5' # ↵
+ ROOT_ICON '\u'$CODEPOINT_OF_OCTICONS_ZAP # 
+ SUDO_ICON '\u'$CODEPOINT_OF_AWESOME_UNLOCK # 
+ RUBY_ICON '\u'$CODEPOINT_OF_OCTICONS_RUBY' ' # 
+ AWS_ICON '\u'$CODEPOINT_OF_AWESOME_SERVER # 
+ AWS_EB_ICON $'\U1F331 ' # 🌱
+ BACKGROUND_JOBS_ICON '\u'$CODEPOINT_OF_AWESOME_COG' ' # 
+ TEST_ICON '\u'$CODEPOINT_OF_AWESOME_BUG # 
+ TODO_ICON '\u'$CODEPOINT_OF_AWESOME_CHECK_SQUARE_O # 
+ BATTERY_ICON '\U'$CODEPOINT_OF_AWESOME_BATTERY_FULL # 
+ DISK_ICON '\u'$CODEPOINT_OF_AWESOME_HDD_O' ' # 
+ OK_ICON '\u'$CODEPOINT_OF_AWESOME_CHECK # 
+ FAIL_ICON '\u'$CODEPOINT_OF_AWESOME_TIMES # 
+ SYMFONY_ICON 'SF'
+ NODE_ICON $'\u2B22' # ⬢
+ MULTILINE_FIRST_PROMPT_PREFIX $'\u256D'$'\U2500' # ╭─
+ MULTILINE_SECOND_PROMPT_PREFIX $'\u2570'$'\U2500 ' # ╰─
+ APPLE_ICON '\u'$CODEPOINT_OF_AWESOME_APPLE # 
+ FREEBSD_ICON $'\U1F608 ' # 😈
+ LINUX_ICON '\u'$CODEPOINT_OF_AWESOME_LINUX # 
+ LINUX_ARCH_ICON 'Arc'
+ LINUX_DEBIAN_ICON 'Deb'
+ LINUX_UBUNTU_ICON 'Ubu'
+ LINUX_CENTOS_ICON 'Cen'
+ LINUX_COREOS_ICON 'Cor'
+ LINUX_ELEMENTARY_ICON 'Elm'
+ LINUX_MINT_ICON 'LMi'
+ LINUX_FEDORA_ICON 'Fed'
+ LINUX_GENTOO_ICON 'Gen'
+ LINUX_MAGEIA_ICON 'Mag'
+ LINUX_NIXOS_ICON 'Nix'
+ LINUX_MANJARO_ICON 'Man'
+ LINUX_DEVUAN_ICON 'Dev'
+ LINUX_ALPINE_ICON 'Alp'
+ LINUX_AOSC_ICON 'Aos'
+ LINUX_OPENSUSE_ICON 'OSu'
+ LINUX_SABAYON_ICON 'Sab'
+ LINUX_SLACKWARE_ICON 'Sla'
+ SUNOS_ICON '\u'$CODEPOINT_OF_AWESOME_SUN_O' ' # 
+ HOME_ICON '\u'$CODEPOINT_OF_AWESOME_HOME # 
+ HOME_SUB_ICON '\u'$CODEPOINT_OF_AWESOME_FOLDER_OPEN # 
+ FOLDER_ICON '\u'$CODEPOINT_OF_AWESOME_FOLDER_O # 
+ NETWORK_ICON '\u'$CODEPOINT_OF_AWESOME_RSS # 
+ LOAD_ICON '\u'$CODEPOINT_OF_AWESOME_BAR_CHART' ' # 
+ SWAP_ICON '\u'$CODEPOINT_OF_AWESOME_DASHBOARD # 
+ RAM_ICON '\u'$CODEPOINT_OF_AWESOME_DASHBOARD # 
+ SERVER_ICON '\u'$CODEPOINT_OF_AWESOME_SERVER # 
+ VCS_UNTRACKED_ICON '\u'$CODEPOINT_OF_AWESOME_QUESTION_CIRCLE # 
+ VCS_UNSTAGED_ICON '\u'$CODEPOINT_OF_AWESOME_EXCLAMATION_CIRCLE # 
+ VCS_STAGED_ICON '\u'$CODEPOINT_OF_AWESOME_PLUS_CIRCLE # 
+ VCS_STASH_ICON '\u'$CODEPOINT_OF_AWESOME_INBOX' ' # 
+ VCS_INCOMING_CHANGES_ICON '\u'$CODEPOINT_OF_AWESOME_ARROW_CIRCLE_DOWN' ' # 
+ VCS_OUTGOING_CHANGES_ICON '\u'$CODEPOINT_OF_AWESOME_ARROW_CIRCLE_UP' ' # 
+ VCS_TAG_ICON '\u'$CODEPOINT_OF_AWESOME_TAG' ' # 
+ VCS_BOOKMARK_ICON '\u'$CODEPOINT_OF_OCTICONS_BOOKMARK # 
+ VCS_COMMIT_ICON '\u'$CODEPOINT_OF_OCTICONS_GIT_COMMIT' ' # 
+ VCS_BRANCH_ICON '\u'$CODEPOINT_OF_OCTICONS_GIT_BRANCH' ' # 
+ VCS_REMOTE_BRANCH_ICON '\u'$CODEPOINT_OF_OCTICONS_REPO_PUSH # 
+ VCS_GIT_ICON '\u'$CODEPOINT_OF_AWESOME_GIT' ' # 
+ VCS_GIT_GITHUB_ICON '\u'$CODEPOINT_OF_AWESOME_GITHUB_ALT' ' # 
+ VCS_GIT_BITBUCKET_ICON '\u'$CODEPOINT_OF_AWESOME_BITBUCKET' ' # 
+ VCS_GIT_GITLAB_ICON '\u'$CODEPOINT_OF_AWESOME_GITLAB' ' # 
+ VCS_HG_ICON '\u'$CODEPOINT_OF_AWESOME_FLASK' ' # 
+ VCS_SVN_ICON '(svn) '
+ RUST_ICON $'\uE6A8' # 
+ PYTHON_ICON $'\U1F40D' # 🐍
+ SWIFT_ICON $'\uE655' # 
+ PUBLIC_IP_ICON '\u'$CODEPOINT_OF_AWESOME_GLOBE # 
+ LOCK_ICON '\u'$CODEPOINT_OF_AWESOME_LOCK # 
+ EXECUTION_TIME_ICON '\u'$CODEPOINT_OF_AWESOME_HOURGLASS_END # 
+ SSH_ICON '(ssh)'
+ VPN_ICON '\u'$CODEPOINT_OF_AWESOME_LOCK
+ KUBERNETES_ICON $'\U2388' # ⎈
+ DROPBOX_ICON '\u'$CODEPOINT_OF_AWESOME_DROPBOX # 
+ DATE_ICON $'\uF073 ' # 
+ TIME_ICON $'\uF017 ' # 
+ JAVA_ICON $'\U2615' # ☕︎
)
;;
'nerdfont-complete'|'nerdfont-fontconfig')
# nerd-font patched (complete) font required! See
# https://github.com/ryanoasis/nerd-fonts
+ # http://nerdfonts.com/#cheat-sheet
# Set the right locale to protect special characters
local LC_ALL="" LC_CTYPE="en_US.UTF-8"
icons=(
@@ -173,6 +319,7 @@ case $POWERLEVEL9K_MODE in
RIGHT_SUBSEGMENT_SEPARATOR $'\uE0B3' # 
CARRIAGE_RETURN_ICON $'\u21B5' # ↵
ROOT_ICON $'\uE614 ' # 
+ SUDO_ICON $'\uF09C' # 
RUBY_ICON $'\uF219 ' # 
AWS_ICON $'\uF270' # 
AWS_EB_ICON $'\UF1BD ' # 
@@ -190,8 +337,26 @@ case $POWERLEVEL9K_MODE in
MULTILINE_LAST_PROMPT_PREFIX $'\u2570'$'\U2500 ' # ╰─
APPLE_ICON $'\uF179' # 
WINDOWS_ICON $'\uF17A' # 
- FREEBSD_ICON $'\UF30E ' # 
+ FREEBSD_ICON $'\UF30C ' # 
ANDROID_ICON $'\uF17B' # 
+ LINUX_ARCH_ICON $'\uF303' # 
+ LINUX_CENTOS_ICON $'\uF304' # 
+ LINUX_COREOS_ICON $'\uF305' # 
+ LINUX_DEBIAN_ICON $'\uF306' # 
+ LINUX_ELEMENTARY_ICON $'\uF309' # 
+ LINUX_FEDORA_ICON $'\uF30a' # 
+ LINUX_GENTOO_ICON $'\uF30d' # 
+ LINUX_MAGEIA_ICON $'\uF310' # 
+ LINUX_MINT_ICON $'\uF30e' # 
+ LINUX_NIXOS_ICON $'\uF313' # 
+ LINUX_MANJARO_ICON $'\uF312' # 
+ LINUX_DEVUAN_ICON $'\uF307' # 
+ LINUX_ALPINE_ICON $'\uF300' # 
+ LINUX_AOSC_ICON $'\uF301' # 
+ LINUX_OPENSUSE_ICON $'\uF314' # 
+ LINUX_SABAYON_ICON $'\uF317' # 
+ LINUX_SLACKWARE_ICON $'\uF319' # 
+ LINUX_UBUNTU_ICON $'\uF31b' # 
LINUX_ICON $'\uF17C' # 
SUNOS_ICON $'\uF185 ' # 
HOME_ICON $'\uF015' # 
@@ -213,8 +378,8 @@ case $POWERLEVEL9K_MODE in
VCS_COMMIT_ICON $'\uE729 ' # 
VCS_BRANCH_ICON $'\uF126 ' # 
VCS_REMOTE_BRANCH_ICON $'\uE728 ' # 
- VCS_GIT_ICON $'\uF113 ' # 
- VCS_GIT_GITHUB_ICON $'\uE709 ' # 
+ VCS_GIT_ICON $'\uF1D3 ' # 
+ VCS_GIT_GITHUB_ICON $'\uF113 ' # 
VCS_GIT_BITBUCKET_ICON $'\uE703 ' # 
VCS_GIT_GITLAB_ICON $'\uF296 ' # 
VCS_HG_ICON $'\uF0C3 ' # 
@@ -229,6 +394,10 @@ case $POWERLEVEL9K_MODE in
SSH_ICON $'\uF489' # 
VPN_ICON '(vpn)'
KUBERNETES_ICON $'\U2388' # ⎈
+ DROPBOX_ICON $'\UF16B' # 
+ DATE_ICON $'\uF073 ' # 
+ TIME_ICON $'\uF017 ' # 
+ JAVA_ICON $'\U2615' # ☕︎
)
;;
*)
@@ -244,6 +413,7 @@ case $POWERLEVEL9K_MODE in
RIGHT_SUBSEGMENT_SEPARATOR $'\uE0B3' # 
CARRIAGE_RETURN_ICON $'\u21B5' # ↵
ROOT_ICON $'\u26A1' # ⚡
+ SUDO_ICON $'\uE0A2' # 
RUBY_ICON ''
AWS_ICON 'AWS:'
AWS_EB_ICON $'\U1F331 ' # 🌱
@@ -264,6 +434,24 @@ case $POWERLEVEL9K_MODE in
FREEBSD_ICON 'BSD'
ANDROID_ICON 'And'
LINUX_ICON 'Lx'
+ LINUX_ARCH_ICON 'Arc'
+ LINUX_DEBIAN_ICON 'Deb'
+ LINUX_UBUNTU_ICON 'Ubu'
+ LINUX_CENTOS_ICON 'Cen'
+ LINUX_COREOS_ICON 'Cor'
+ LINUX_ELEMENTARY_ICON 'Elm'
+ LINUX_MINT_ICON 'LMi'
+ LINUX_FEDORA_ICON 'Fed'
+ LINUX_GENTOO_ICON 'Gen'
+ LINUX_MAGEIA_ICON 'Mag'
+ LINUX_NIXOS_ICON 'Nix'
+ LINUX_MANJARO_ICON 'Man'
+ LINUX_DEVUAN_ICON 'Dev'
+ LINUX_ALPINE_ICON 'Alp'
+ LINUX_AOSC_ICON 'Aos'
+ LINUX_OPENSUSE_ICON 'OSu'
+ LINUX_SABAYON_ICON 'Sab'
+ LINUX_SLACKWARE_ICON 'Sla'
SUNOS_ICON 'Sun'
HOME_ICON ''
HOME_SUB_ICON ''
@@ -282,7 +470,7 @@ case $POWERLEVEL9K_MODE in
VCS_TAG_ICON ''
VCS_BOOKMARK_ICON $'\u263F' # ☿
VCS_COMMIT_ICON ''
- VCS_BRANCH_ICON $'\uE0A0' # 
+ VCS_BRANCH_ICON $'\uE0A0 ' # 
VCS_REMOTE_BRANCH_ICON $'\u2192' # →
VCS_GIT_ICON ''
VCS_GIT_GITHUB_ICON ''
@@ -300,6 +488,10 @@ case $POWERLEVEL9K_MODE in
SSH_ICON '(ssh)'
VPN_ICON '(vpn)'
KUBERNETES_ICON $'\U2388' # ⎈
+ DROPBOX_ICON 'Dropbox'
+ DATE_ICON ''
+ TIME_ICON ''
+ JAVA_ICON $'\U2615' # ☕︎
)
;;
esac
diff --git a/functions/utilities.zsh b/functions/utilities.zsh
index b4bfb838..9a651a0b 100644..100755
--- a/functions/utilities.zsh
+++ b/functions/utilities.zsh
@@ -39,6 +39,7 @@ printSizeHumanReadable() {
# if the base is not Bytes
if [[ -n $2 ]]; then
+ local idx
for idx in "${extension[@]}"; do
if [[ "$2" == "$idx" ]]; then
break
@@ -103,7 +104,67 @@ case $(uname) in
;;
Linux)
OS='Linux'
- OS_ICON=$(print_icon 'LINUX_ICON')
+ os_release_id="$(grep -E '^ID=([a-zA-Z]*)' /etc/os-release | cut -d '=' -f 2)"
+ case "$os_release_id" in
+ "arch")
+ OS_ICON=$(print_icon 'LINUX_ARCH_ICON')
+ ;;
+ "debian")
+ OS_ICON=$(print_icon 'LINUX_DEBIAN_ICON')
+ ;;
+ "ubuntu")
+ OS_ICON=$(print_icon 'LINUX_UBUNTU_ICON')
+ ;;
+ "elementary")
+ OS_ICON=$(print_icon 'LINUX_ELEMENTARY_ICON')
+ ;;
+ "fedora")
+ OS_ICON=$(print_icon 'LINUX_FEDORA_ICON')
+ ;;
+ "coreos")
+ OS_ICON=$(print_icon 'LINUX_COREOS_ICON')
+ ;;
+ "gentoo")
+ OS_ICON=$(print_icon 'LINUX_GENTOO_ICON')
+ ;;
+ "mageia")
+ OS_ICON=$(print_icon 'LINUX_MAGEIA_ICON')
+ ;;
+ "centos")
+ OS_ICON=$(print_icon 'LINUX_CENTOS_ICON')
+ ;;
+ "opensuse"|"tumbleweed")
+ OS_ICON=$(print_icon 'LINUX_OPENSUSE_ICON')
+ ;;
+ "sabayon")
+ OS_ICON=$(print_icon 'LINUX_SABAYON_ICON')
+ ;;
+ "slackware")
+ OS_ICON=$(print_icon 'LINUX_SLACKWARE_ICON')
+ ;;
+ "linuxmint")
+ OS_ICON=$(print_icon 'LINUX_MINT_ICON')
+ ;;
+ "alpine")
+ OS_ICON=$(print_icon 'LINUX_ALPINE_ICON')
+ ;;
+ "aosc")
+ OS_ICON=$(print_icon 'LINUX_AOSC_ICON')
+ ;;
+ "nixos")
+ OS_ICON=$(print_icon 'LINUX_NIXOS_ICON')
+ ;;
+ "devuan")
+ OS_ICON=$(print_icon 'LINUX_DEVUAN_ICON')
+ ;;
+ "manjaro")
+ OS_ICON=$(print_icon 'LINUX_MANJARO_ICON')
+ ;;
+ *)
+ OS='Linux'
+ OS_ICON=$(print_icon 'LINUX_ICON')
+ ;;
+ esac
# Check if we're running on Android
case $(uname -o 2>/dev/null) in
@@ -213,6 +274,82 @@ function segmentShouldBeJoined() {
fi
}
+################################################################
+# Given a directory path, truncate it according to the settings.
+# Parameters:
+# * $1 Path: string - the directory path to be truncated
+# * $2 Length: integer - length to truncate to
+# * $3 Delimiter: string - the delimiter to use
+# * $4 From: string - "right" | "middle". If omited, assumes right.
+function truncatePath() {
+ # if the current path is not 1 character long (e.g. "/" or "~")
+ if (( ${#1} > 1 )); then
+ # convert $2 from string to integer
+ 2=$(( $2 ))
+ # set $3 to "" if not defined
+ [[ -z $3 ]] && 3="" || 3=$(echo -n $3)
+ # set $4 to "right" if not defined
+ [[ -z $4 ]] && 4="right"
+ # create a variable for the truncated path.
+ local trunc_path
+ # if the path is in the home folder, add "~/" to the start otherwise "/"
+ [[ $1 == "~"* ]] && trunc_path='~/' || trunc_path='/'
+ # split the path into an array using "/" as the delimiter
+ local paths=$1
+ paths=(${(s:/:)${paths//"~\/"/}})
+ # declare locals for the directory being tested and its length
+ local test_dir test_dir_length
+ # do the needed truncation
+ case $4 in
+ right)
+ # include the delimiter length in the threshhold
+ local threshhold=$(( $2 + ${#3} ))
+ # loop through the paths
+ for (( i=1; i<${#paths}; i++ )); do
+ # get the current directory value
+ test_dir=$paths[$i]
+ test_dir_length=${#test_dir}
+ # only truncate if the resulting truncation will be shorter than
+ # the truncation + delimiter length and at least 3 characters
+ if (( $test_dir_length > $threshhold )) && (( $test_dir_length > 3 )); then
+ # use the first $2 characters and the delimiter
+ trunc_path+="${test_dir:0:$2}$3/"
+ else
+ # use the full path
+ trunc_path+="${test_dir}/"
+ fi
+ done
+ ;;
+ middle)
+ # we need double the length for start and end truncation + delimiter length
+ local threshhold=$(( $2 * 2 ))
+ # create a variable for the start of the end truncation
+ local last_pos
+ # loop through the paths
+ for (( i=1; i<${#paths}; i++ )); do
+ # get the current directory value
+ test_dir=$paths[$i]
+ test_dir_length=${#test_dir}
+ # only truncate if the resulting truncation will be shorter than
+ # the truncation + delimiter length
+ if (( $test_dir_length > $threshhold )); then
+ # use the first $2 characters, the delimiter and the last $2 characters
+ last_pos=$(( $test_dir_length - $2 ))
+ trunc_path+="${test_dir:0:$2}$3${test_dir:$last_pos:$test_dir_length}/"
+ else
+ # use the full path
+ trunc_path+="${test_dir}/"
+ fi
+ done
+ ;;
+ esac
+ # return the truncated path + the current directory
+ echo $trunc_path${1:t}
+ else # current path is 1 character long (e.g. "/" or "~")
+ echo $1
+ fi
+}
+
# Given a directory path, truncate it according to the settings for
# `truncate_from_right`
function truncatePathFromRight() {
diff --git a/functions/vcs.zsh b/functions/vcs.zsh
index c3e507b9..b99e7c86 100644..100755
--- a/functions/vcs.zsh
+++ b/functions/vcs.zsh
@@ -16,8 +16,8 @@ function +vi-git-untracked() {
FLAGS+='--ignore-submodules=dirty'
fi
- if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' && \
- -n $(git status ${FLAGS} | grep -E '^\?\?' 2> /dev/null | tail -n1) ]]; then
+ if [[ $(command git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' && \
+ -n $(command git status ${FLAGS} | \grep -E '^\?\?' 2> /dev/null | tail -n1) ]]; then
hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')"
VCS_WORKDIR_HALF_DIRTY=true
else
@@ -29,16 +29,16 @@ function +vi-git-aheadbehind() {
local ahead behind branch_name
local -a gitstatus
- branch_name=$(git symbolic-ref --short HEAD 2>/dev/null)
+ branch_name=$(command 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=$(command git rev-list origin/${branch_name}..HEAD | wc -l)
+ ahead=$(command git rev-list "${branch_name}"@{upstream}..HEAD 2>/dev/null | wc -l)
(( ahead )) && gitstatus+=( " $(print_icon 'VCS_OUTGOING_CHANGES_ICON')${ahead// /}" )
# 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=$(command git rev-list HEAD..origin/${branch_name} | wc -l)
+ behind=$(command git rev-list HEAD.."${branch_name}"@{upstream} 2>/dev/null | wc -l)
(( behind )) && gitstatus+=( " $(print_icon 'VCS_INCOMING_CHANGES_ICON')${behind// /}" )
hook_com[misc]+=${(j::)gitstatus}
@@ -48,8 +48,23 @@ 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)
+ remote=${$(command git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/}
+ branch_name=$(command git symbolic-ref --short HEAD 2>/dev/null)
+
+ if [[ -n "$POWERLEVEL9K_VCS_SHORTEN_LENGTH" ]] && [[ -n "$POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH" ]]; then
+ set_default POWERLEVEL9K_VCS_SHORTEN_DELIMITER $'\U2026'
+
+ if [ ${#hook_com[branch]} -gt $POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH ] && [ ${#hook_com[branch]} -gt $POWERLEVEL9K_VCS_SHORTEN_LENGTH ]; then
+ case "$POWERLEVEL9K_VCS_SHORTEN_STRATEGY" in
+ truncate_middle)
+ hook_com[branch]="$(echo "${branch_name:0:$POWERLEVEL9K_VCS_SHORTEN_LENGTH}")$POWERLEVEL9K_VCS_SHORTEN_DELIMITER$(echo "${branch_name: -$POWERLEVEL9K_VCS_SHORTEN_LENGTH}")"
+ ;;
+ truncate_from_right)
+ hook_com[branch]="$(echo "${branch_name:0:$POWERLEVEL9K_VCS_SHORTEN_LENGTH}")$POWERLEVEL9K_VCS_SHORTEN_DELIMITER"
+ ;;
+ esac
+ fi
+ fi
hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}"
# Always show the remote
@@ -65,18 +80,18 @@ function +vi-git-tagname() {
if [[ "$POWERLEVEL9K_VCS_HIDE_TAGS" == "false" ]]; then
# If we are on a tag, append the tagname to the current branch string.
local tag
- tag=$(git describe --tags --exact-match HEAD 2>/dev/null)
+ tag=$(command git describe --tags --exact-match HEAD 2>/dev/null)
if [[ -n "${tag}" ]] ; then
# There is a tag that points to our current commit. Need to determine if we
# are also on a branch, or are in a DETACHED_HEAD state.
- if [[ -z $(git symbolic-ref HEAD 2>/dev/null) ]]; then
+ if [[ -z $(command git symbolic-ref HEAD 2>/dev/null) ]]; then
# DETACHED_HEAD state. We want to append the tag name to the commit hash
# and print it. Unfortunately, `vcs_info` blows away the hash when a tag
# exists, so we have to manually retrieve it and clobber the branch
# string.
local revision
- revision=$(git rev-list -n 1 --abbrev-commit --abbrev=${POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH} HEAD)
+ revision=$(command git rev-list -n 1 --abbrev-commit --abbrev=${POWERLEVEL9K_VCS_INTERNAL_HASH_LENGTH} HEAD)
hook_com[branch]="$(print_icon 'VCS_BRANCH_ICON')${revision} $(print_icon 'VCS_TAG_ICON')${tag}"
else
# We are on both a tag and a branch; print both by appending the tag name.
@@ -91,8 +106,8 @@ function +vi-git-tagname() {
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)
+ if [[ -s $(command git rev-parse --git-dir)/refs/stash ]] ; then
+ stashes=$(command git stash list 2>/dev/null | wc -l)
hook_com[misc]+=" $(print_icon 'VCS_STASH_ICON')${stashes// /}"
fi
}
@@ -111,11 +126,13 @@ function +vi-hg-bookmarks() {
function +vi-vcs-detect-changes() {
if [[ "${hook_com[vcs]}" == "git" ]]; then
- local remote=$(git ls-remote --get-url 2> /dev/null)
+ local remote=$(command git ls-remote --get-url 2> /dev/null)
if [[ "$remote" =~ "github" ]] then
vcs_visual_identifier='VCS_GIT_GITHUB_ICON'
elif [[ "$remote" =~ "bitbucket" ]] then
vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON'
+ elif [[ "$remote" =~ "stash" ]] then
+ vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON'
elif [[ "$remote" =~ "gitlab" ]] then
vcs_visual_identifier='VCS_GIT_GITLAB_ICON'
else
@@ -137,15 +154,15 @@ function +vi-vcs-detect-changes() {
function +vi-svn-detect-changes() {
local svn_status="$(svn status)"
- if [[ -n "$(echo "$svn_status" | grep \^\?)" ]]; then
+ if [[ -n "$(echo "$svn_status" | \grep \^\?)" ]]; then
hook_com[unstaged]+=" $(print_icon 'VCS_UNTRACKED_ICON')"
VCS_WORKDIR_HALF_DIRTY=true
fi
- if [[ -n "$(echo "$svn_status" | grep \^\M)" ]]; then
+ if [[ -n "$(echo "$svn_status" | \grep \^\M)" ]]; then
hook_com[unstaged]+=" $(print_icon 'VCS_UNSTAGED_ICON')"
VCS_WORKDIR_DIRTY=true
fi
- if [[ -n "$(echo "$svn_status" | grep \^\A)" ]]; then
+ if [[ -n "$(echo "$svn_status" | \grep \^\A)" ]]; then
hook_com[staged]+=" $(print_icon 'VCS_STAGED_ICON')"
VCS_WORKDIR_DIRTY=true
fi