diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | README.md | 16 | ||||
-rw-r--r-- | functions/colors.zsh | 267 | ||||
-rw-r--r-- | functions/icons.zsh | 81 | ||||
-rw-r--r-- | functions/vcs.zsh | 2 | ||||
-rwxr-xr-x | powerlevel9k.zsh-theme | 94 | ||||
-rwxr-xr-x | test/segments/command_execution_time.spec | 12 | ||||
-rwxr-xr-x | test/segments/go_version.spec | 2 | ||||
-rwxr-xr-x | test/segments/kubecontext.spec | 38 | ||||
-rwxr-xr-x | test/segments/rust_version.spec | 2 |
10 files changed, 446 insertions, 69 deletions
@@ -1,2 +1,3 @@ test-vm/.vagrant *.swp +.idea
\ No newline at end of file @@ -140,6 +140,7 @@ The segments that are currently available are: * `aws_eb_env` - The current Elastic Beanstalk Environment. * `docker_machine` - The current Docker Machine. * `kubecontext` - The current context of your `kubectl` configuration. +* `dropbox` - Indicates Dropbox directory and syncing status using `dropbox-cli` **Other:** * [`custom_command`](#custom_command) - Create a custom segment to display the @@ -186,6 +187,7 @@ your `~/.zshrc`: | Variable | Default Value | Description | |----------|---------------|-------------| |`POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE`|`true`|If there is more than one background job, this segment will show the number of jobs. Set this to `false` to turn this feature off.| +`POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS`|`false`|Always show the jobs count (even if it's zero).| ##### battery @@ -243,7 +245,7 @@ battery level. This will override the following variables: `POWERLEVEL9K_BATTERY_DISCONNECTED`, and `POWERLEVEL9K_BATTERY_LOW_COLOR`. In order to do this, define a color array, from low to high, as shown below: ```zsh -POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND=(196 202 208 214 220 226 190 154 118 82 46) +POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND=(red1 orangered1 darkorange orange1 gold1 yellow1 yellow2 greenyellow chartreuse1 chartreuse2 green1) ``` As with the battery stages, you can use any number of colors and Powerlevel9k @@ -251,9 +253,9 @@ will automatically use all of them appropriately. Some example settings: |Brightness|Possible Array| -|Bright Colors|(196 202 208 214 220 226 190 154 118 82 46)| -|Normal Colors|(124 130 136 142 148 112 76 40 34 28 22)| -|Subdued Colors|( 88 94 100 106 70 34 28 22)| +|Bright Colors|(red1 orangered1 darkorange orange1 gold1 yellow1 yellow2 greenyellow chartreuse1 chartreuse2 green1)| +|Normal Colors|(red3 darkorange3 darkgoldenrod gold3 yellow3 chartreuse2 mediumspringgreen green3 green3 green4 darkgreen)| +|Subdued Colors|(darkred orange4 yellow4 yellow4 chartreuse3 green3 green4 darkgreen)| ##### command_execution_time @@ -509,7 +511,11 @@ This segment shows the version of Ruby being used when using `rbenv` to change y It figures out the version being used by taking the output of the `rbenv version-name` command. * If `rbenv` is not in $PATH, nothing will be shown. -* If the current Ruby version is the same as the global Ruby version, nothing will be shown. +* By default, if the current local Ruby version is the same as the global Ruby version, nothing will be shown. See the configuration variable, below, to modify this behavior. + +Variable | Default Value | Description | +|----------|---------------|-------------| +|`POWERLEVEL9K_RBENV_ALWAYS`|'false'|Always show the `rbenv` segment, even if the local version matches the global.| ##### rspec_stats diff --git a/functions/colors.zsh b/functions/colors.zsh index c82af9ea..8d75e670 100644 --- a/functions/colors.zsh +++ b/functions/colors.zsh @@ -22,14 +22,264 @@ function getColorCode() { else typeset -A codes codes=( - 'black' '000' - 'red' '001' - 'green' '002' - 'yellow' '003' - 'blue' '004' - 'magenta' '005' - 'cyan' '006' - 'white' '007' + # https://jonasjacek.github.io/colors/ + # use color names by default to allow dark/light themes to adjust colors based on names + 'black' '000' + 'maroon' '001' + 'green' '002' + 'olive' '003' + 'navy' '004' + 'purple' '005' + 'teal' '006' + 'silver' '007' + 'grey' '008' + 'red' '009' + 'lime' '010' + 'yellow' '011' + 'blue' '012' + 'fuchsia' '013' + 'aqua' '014' + 'white' '015' + 'grey0' '016' + 'navyblue' '017' + 'darkblue' '018' + 'blue3' '019' + 'blue3' '020' + 'blue1' '021' + 'darkgreen' '022' + 'deepskyblue4' '023' + 'deepskyblue4' '024' + 'deepskyblue4' '025' + 'dodgerblue3' '026' + 'dodgerblue2' '027' + 'green4' '028' + 'springgreen4' '029' + 'turquoise4' '030' + 'deepskyblue3' '031' + 'deepskyblue3' '032' + 'dodgerblue1' '033' + 'green3' '034' + 'springgreen3' '035' + 'darkcyan' '036' + 'lightseagreen' '037' + 'deepskyblue2' '038' + 'deepskyblue1' '039' + 'green3' '040' + 'springgreen3' '041' + 'springgreen2' '042' + 'cyan3' '043' + 'darkturquoise' '044' + 'turquoise2' '045' + 'green1' '046' + 'springgreen2' '047' + 'springgreen1' '048' + 'mediumspringgreen' '049' + 'cyan2' '050' + 'cyan1' '051' + 'darkred' '052' + 'deeppink4' '053' + 'purple4' '054' + 'purple4' '055' + 'purple3' '056' + 'blueviolet' '057' + 'orange4' '058' + 'grey37' '059' + 'mediumpurple4' '060' + 'slateblue3' '061' + 'slateblue3' '062' + 'royalblue1' '063' + 'chartreuse4' '064' + 'darkseagreen4' '065' + 'paleturquoise4' '066' + 'steelblue' '067' + 'steelblue3' '068' + 'cornflowerblue' '069' + 'chartreuse3' '070' + 'darkseagreen4' '071' + 'cadetblue' '072' + 'cadetblue' '073' + 'skyblue3' '074' + 'steelblue1' '075' + 'chartreuse3' '076' + 'palegreen3' '077' + 'seagreen3' '078' + 'aquamarine3' '079' + 'mediumturquoise' '080' + 'steelblue1' '081' + 'chartreuse2' '082' + 'seagreen2' '083' + 'seagreen1' '084' + 'seagreen1' '085' + 'aquamarine1' '086' + 'darkslategray2' '087' + 'darkred' '088' + 'deeppink4' '089' + 'darkmagenta' '090' + 'darkmagenta' '091' + 'darkviolet' '092' + 'purple' '093' + 'orange4' '094' + 'lightpink4' '095' + 'plum4' '096' + 'mediumpurple3' '097' + 'mediumpurple3' '098' + 'slateblue1' '099' + 'yellow4' '100' + 'wheat4' '101' + 'grey53' '102' + 'lightslategrey' '103' + 'mediumpurple' '104' + 'lightslateblue' '105' + 'yellow4' '106' + 'darkolivegreen3' '107' + 'darkseagreen' '108' + 'lightskyblue3' '109' + 'lightskyblue3' '110' + 'skyblue2' '111' + 'chartreuse2' '112' + 'darkolivegreen3' '113' + 'palegreen3' '114' + 'darkseagreen3' '115' + 'darkslategray3' '116' + 'skyblue1' '117' + 'chartreuse1' '118' + 'lightgreen' '119' + 'lightgreen' '120' + 'palegreen1' '121' + 'aquamarine1' '122' + 'darkslategray1' '123' + 'red3' '124' + 'deeppink4' '125' + 'mediumvioletred' '126' + 'magenta3' '127' + 'darkviolet' '128' + 'purple' '129' + 'darkorange3' '130' + 'indianred' '131' + 'hotpink3' '132' + 'mediumorchid3' '133' + 'mediumorchid' '134' + 'mediumpurple2' '135' + 'darkgoldenrod' '136' + 'lightsalmon3' '137' + 'rosybrown' '138' + 'grey63' '139' + 'mediumpurple2' '140' + 'mediumpurple1' '141' + 'gold3' '142' + 'darkkhaki' '143' + 'navajowhite3' '144' + 'grey69' '145' + 'lightsteelblue3' '146' + 'lightsteelblue' '147' + 'yellow3' '148' + 'darkolivegreen3' '149' + 'darkseagreen3' '150' + 'darkseagreen2' '151' + 'lightcyan3' '152' + 'lightskyblue1' '153' + 'greenyellow' '154' + 'darkolivegreen2' '155' + 'palegreen1' '156' + 'darkseagreen2' '157' + 'darkseagreen1' '158' + 'paleturquoise1' '159' + 'red3' '160' + 'deeppink3' '161' + 'deeppink3' '162' + 'magenta3' '163' + 'magenta3' '164' + 'magenta2' '165' + 'darkorange3' '166' + 'indianred' '167' + 'hotpink3' '168' + 'hotpink2' '169' + 'orchid' '170' + 'mediumorchid1' '171' + 'orange3' '172' + 'lightsalmon3' '173' + 'lightpink3' '174' + 'pink3' '175' + 'plum3' '176' + 'violet' '177' + 'gold3' '178' + 'lightgoldenrod3' '179' + 'tan' '180' + 'mistyrose3' '181' + 'thistle3' '182' + 'plum2' '183' + 'yellow3' '184' + 'khaki3' '185' + 'lightgoldenrod2' '186' + 'lightyellow3' '187' + 'grey84' '188' + 'lightsteelblue1' '189' + 'yellow2' '190' + 'darkolivegreen1' '191' + 'darkolivegreen1' '192' + 'darkseagreen1' '193' + 'honeydew2' '194' + 'lightcyan1' '195' + 'red1' '196' + 'deeppink2' '197' + 'deeppink1' '198' + 'deeppink1' '199' + 'magenta2' '200' + 'magenta1' '201' + 'orangered1' '202' + 'indianred1' '203' + 'indianred1' '204' + 'hotpink' '205' + 'hotpink' '206' + 'mediumorchid1' '207' + 'darkorange' '208' + 'salmon1' '209' + 'lightcoral' '210' + 'palevioletred1' '211' + 'orchid2' '212' + 'orchid1' '213' + 'orange1' '214' + 'sandybrown' '215' + 'lightsalmon1' '216' + 'lightpink1' '217' + 'pink1' '218' + 'plum1' '219' + 'gold1' '220' + 'lightgoldenrod2' '221' + 'lightgoldenrod2' '222' + 'navajowhite1' '223' + 'mistyrose1' '224' + 'thistle1' '225' + 'yellow1' '226' + 'lightgoldenrod1' '227' + 'khaki1' '228' + 'wheat1' '229' + 'cornsilk1' '230' + 'grey100' '231' + 'grey3' '232' + 'grey7' '233' + 'grey11' '234' + 'grey15' '235' + 'grey19' '236' + 'grey23' '237' + 'grey27' '238' + 'grey30' '239' + 'grey35' '240' + 'grey39' '241' + 'grey42' '242' + 'grey46' '243' + 'grey50' '244' + 'grey54' '245' + 'grey58' '246' + 'grey62' '247' + 'grey66' '248' + 'grey70' '249' + 'grey74' '250' + 'grey78' '251' + 'grey82' '252' + 'grey85' '253' + 'grey89' '254' + 'grey93' '255' ) # Strip eventual "bg-" prefixes @@ -53,4 +303,3 @@ function isSameColor() { return $(( color1 != color2 )) } - diff --git a/functions/icons.zsh b/functions/icons.zsh index 7124386b..6ec07379 100644 --- a/functions/icons.zsh +++ b/functions/icons.zsh @@ -87,6 +87,7 @@ case $POWERLEVEL9K_MODE in SSH_ICON '(ssh)' VPN_ICON '(vpn)' KUBERNETES_ICON $'\U2388' # ⎈ + DROPBOX_ICON $'\UF16B' # ) ;; 'awesome-fontconfig') @@ -158,6 +159,84 @@ case $POWERLEVEL9K_MODE in SSH_ICON '(ssh)' VPN_ICON $'\uF023' KUBERNETES_ICON $'\U2388' # ⎈ + DROPBOX_ICON $'\UF16B' # + ) + ;; + '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 # + 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 # + 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 # ) ;; 'nerdfont-complete'|'nerdfont-fontconfig') @@ -229,6 +308,7 @@ case $POWERLEVEL9K_MODE in SSH_ICON $'\uF489' # VPN_ICON '(vpn)' KUBERNETES_ICON $'\U2388' # ⎈ + DROPBOX_ICON $'\UF16B' # ) ;; *) @@ -300,6 +380,7 @@ case $POWERLEVEL9K_MODE in SSH_ICON '(ssh)' VPN_ICON '(vpn)' KUBERNETES_ICON $'\U2388' # ⎈ + DROPBOX_ICON 'Dropbox' ) ;; esac diff --git a/functions/vcs.zsh b/functions/vcs.zsh index 89f04143..e2e9f3a3 100644 --- a/functions/vcs.zsh +++ b/functions/vcs.zsh @@ -116,6 +116,8 @@ function +vi-vcs-detect-changes() { 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 diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index 97e99f43..07c504fe 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -305,6 +305,7 @@ prompt_aws_eb_env() { # Segment to indicate background jobs with an icon. set_default POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE true +set_default POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS false prompt_background_jobs() { local background_jobs_number=${$(jobs -l | wc -l)// /} local wrong_lines=`jobs -l | awk '/pwd now/{ count++ } END {print count}'` @@ -313,7 +314,7 @@ prompt_background_jobs() { fi if [[ background_jobs_number -gt 0 ]]; then local background_jobs_number_print="" - if [[ "$POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE" == "true" ]] && [[ "$background_jobs_number" -gt 1 ]]; then + if [[ "$POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE" == "true" ]] && ([[ "$background_jobs_number" -gt 1 ]] || [[ "$POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE_ALWAYS" == "true" ]]); then background_jobs_number_print="$background_jobs_number" fi "$1_prompt_segment" "$0" "$2" "$DEFAULT_COLOR" "cyan" "$background_jobs_number_print" 'BACKGROUND_JOBS_ICON' @@ -569,7 +570,7 @@ prompt_context() { typeset -AH context_states context_states=( "ROOT" "yellow" - "DEFAULT" "011" + "DEFAULT" "yellow" ) local content="" @@ -612,7 +613,7 @@ prompt_user() { "STATE" "DEFAULT" "CONTENT" "$(whoami)" "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "011" + "FOREGROUND_COLOR" "yellow" "VISUAL_IDENTIFIER" "USER_ICON" ) fi @@ -639,7 +640,7 @@ prompt_host() { "STATE" "LOCAL" "CONTENT" "${POWERLEVEL9K_HOST_TEMPLATE}" "BACKGROUND_COLOR" "${DEFAULT_COLOR}" - "FOREGROUND_COLOR" "011" + "FOREGROUND_COLOR" "yellow" "VISUAL_IDENTIFIER" "HOST_ICON" ) fi @@ -686,7 +687,7 @@ prompt_command_execution_time() { fi if (( _P9K_COMMAND_DURATION >= POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD )); then - "$1_prompt_segment" "$0" "$2" "red" "226" "${humanReadableDuration}" 'EXECUTION_TIME_ICON' + "$1_prompt_segment" "$0" "$2" "red" "yellow1" "${humanReadableDuration}" 'EXECUTION_TIME_ICON' fi } @@ -704,10 +705,10 @@ prompt_dir() { case "$POWERLEVEL9K_SHORTEN_STRATEGY" in truncate_middle) - current_path=$(pwd | sed -e "s,^$HOME,~," | sed $SED_EXTENDED_REGEX_PARAMETER "s/([^/]{$POWERLEVEL9K_SHORTEN_DIR_LENGTH})[^/]+([^/]{$POWERLEVEL9K_SHORTEN_DIR_LENGTH})\//\1$POWERLEVEL9K_SHORTEN_DELIMITER\2\//g") + current_path=$(echo "$current_path" | sed $SED_EXTENDED_REGEX_PARAMETER "s/([^/]{$POWERLEVEL9K_SHORTEN_DIR_LENGTH})[^/]+([^/]{$POWERLEVEL9K_SHORTEN_DIR_LENGTH})\//\1$POWERLEVEL9K_SHORTEN_DELIMITER\2\//g") ;; truncate_from_right) - current_path=$(truncatePathFromRight "$(pwd | sed -e "s,^$HOME,~,")" ) + current_path=$(truncatePathFromRight "$current_path" ) ;; truncate_with_package_name) local name repo_path package_path current_dir zero @@ -757,8 +758,12 @@ prompt_dir() { # Instead of printing out the full path, print out the name of the package # from the package.json and append the current subdirectory current_path="`echo $packageName | tr -d '"'`$subdirectory_path" + if [[ "${POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER}" == "true" ]]; then + # add space before the packageName to allow for removing the "first" character, without messing up the package name. + current_path=" ${current_path}" + fi else - current_path=$(truncatePathFromRight "$(pwd | sed -e "s,^$HOME,~,")" ) + current_path=$(truncatePathFromRight "$current_path" ) fi ;; truncate_with_folder_marker) @@ -861,13 +866,13 @@ prompt_go_version() { go_path=$(go env GOPATH 2>/dev/null) if [[ -n "$go_version" && "${PWD##$go_path}" != "$PWD" ]]; then - "$1_prompt_segment" "$0" "$2" "green" "255" "$go_version" "GO_ICON" + "$1_prompt_segment" "$0" "$2" "green" "grey93" "$go_version" "GO_ICON" fi } # Command number (in local history) prompt_history() { - "$1_prompt_segment" "$0" "$2" "244" "$DEFAULT_COLOR" '%h' + "$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" '%h' } # Detection for virtualization (systemd based systems only) @@ -1029,7 +1034,7 @@ prompt_nodeenv() { # print a little OS icon prompt_os_icon() { - "$1_prompt_segment" "$0" "$2" "black" "255" "$OS_ICON" + "$1_prompt_segment" "$0" "$2" "black" "white" "$OS_ICON" } # print PHP version number @@ -1038,7 +1043,7 @@ prompt_php_version() { php_version=$(php -v 2>&1 | grep -oe "^PHP\s*[0-9.]*") if [[ -n "$php_version" ]]; then - "$1_prompt_segment" "$0" "$2" "013" "255" "$php_version" + "$1_prompt_segment" "$0" "$2" "fuchsia" "grey93" "$php_version" fi } @@ -1066,17 +1071,17 @@ prompt_ram() { } # rbenv information +set_default POWERLEVEL9K_RBENV_ALWAYS false prompt_rbenv() { if which rbenv 2>/dev/null >&2; then local rbenv_version_name="$(rbenv version-name)" local rbenv_global="$(rbenv global)" - # Don't show anything if the current Ruby is the same as the global Ruby. - if [[ $rbenv_version_name == $rbenv_global ]]; then - return + # Don't show anything if the current Ruby is the same as the global Ruby + # unless `POWERLEVEL9K_RBENV_ALWAYS` is set. + if [[ $POWERLEVEL9K_RBENV_ALWAYS == true || $rbenv_version_name != $rbenv_global ]];then + "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "$rbenv_version_name" 'RUBY_ICON' fi - - "$1_prompt_segment" "$0" "$2" "red" "$DEFAULT_COLOR" "$rbenv_version_name" 'RUBY_ICON' fi } @@ -1104,7 +1109,7 @@ prompt_rust_version() { rust_version=$(rustc --version 2>&1 | grep -oe "^rustc\s*[^ ]*" | grep -o '[0-9.a-z\\\-]*$') if [[ -n "$rust_version" ]]; then - "$1_prompt_segment" "$0" "$2" "208" "$DEFAULT_COLOR" "Rust $rust_version" 'RUST_ICON' + "$1_prompt_segment" "$0" "$2" "darkorange" "$DEFAULT_COLOR" "Rust $rust_version" 'RUST_ICON' fi } # RSpec test ratio @@ -1123,7 +1128,7 @@ prompt_rvm() { local version_and_gemset=${rvm_env_string/ruby-} if [[ -n "$version_and_gemset" ]]; then - "$1_prompt_segment" "$0" "$2" "240" "$DEFAULT_COLOR" "$version_and_gemset" 'RUBY_ICON' + "$1_prompt_segment" "$0" "$2" "grey35" "$DEFAULT_COLOR" "$version_and_gemset" 'RUBY_ICON' fi } @@ -1153,7 +1158,7 @@ exit_code_or_status() { else local sig=$(( ec - 128 )) local idx=$(( sig + 1 )) - echo "${signals[$idx]}(-${sig})" + echo "SIG${signals[$idx]}(${sig})" fi } @@ -1179,7 +1184,7 @@ prompt_status() { if (( ec_sum > 0 )); then if [[ "$POWERLEVEL9K_STATUS_CROSS" == false && "$POWERLEVEL9K_STATUS_VERBOSE" == true ]]; then - "$1_prompt_segment" "$0_ERROR" "$2" "red" "226" "$ec_text" 'CARRIAGE_RETURN_ICON' + "$1_prompt_segment" "$0_ERROR" "$2" "red" "yellow1" "$ec_text" 'CARRIAGE_RETURN_ICON' else "$1_prompt_segment" "$0_ERROR" "$2" "$DEFAULT_COLOR" "red" "" 'FAIL_ICON' fi @@ -1228,7 +1233,7 @@ prompt_symfony2_version() { if [[ -f app/bootstrap.php.cache ]]; then local symfony2_version symfony2_version=$(grep " VERSION " app/bootstrap.php.cache | sed -e 's/[^.0-9]*//g') - "$1_prompt_segment" "$0" "$2" "240" "$DEFAULT_COLOR" "$symfony2_version" 'SYMFONY_ICON' + "$1_prompt_segment" "$0" "$2" "grey35" "$DEFAULT_COLOR" "$symfony2_version" 'SYMFONY_ICON' fi } @@ -1262,7 +1267,7 @@ prompt_todo() { if $(hash todo.sh 2>&-); then count=$(todo.sh ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }') if [[ "$count" = <-> ]]; then - "$1_prompt_segment" "$0" "$2" "244" "$DEFAULT_COLOR" "$count" 'TODO_ICON' + "$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" "$count" 'TODO_ICON' fi fi } @@ -1401,38 +1406,53 @@ prompt_swift_version() { # dir_writable: Display information about the user's permission to write in the current directory prompt_dir_writable() { if [[ ! -w "$PWD" ]]; then - "$1_prompt_segment" "$0_FORBIDDEN" "$2" "red" "226" "" 'LOCK_ICON' + "$1_prompt_segment" "$0_FORBIDDEN" "$2" "red" "yellow1" "" 'LOCK_ICON' fi } -# Kubernetes Current Context +# Kubernetes Current Context/Namespace prompt_kubecontext() { local kubectl_version="$(kubectl version --client 2>/dev/null)" if [[ -n "$kubectl_version" ]]; then - # Get the current Kubernetes config context's namespaece - local k8s_namespace=$(kubectl config get-contexts --no-headers | grep '*' | awk '{print $5}') # Get the current Kuberenetes context - local k8s_context=$(kubectl config current-context) - - if [[ -z "$k8s_namespace" ]]; then - k8s_namespace="default" + local cur_ctx=$(kubectl config view -o=jsonpath='{.current-context}') + cur_namespace="$(kubectl config view -o=jsonpath="{.contexts[?(@.name==\"${cur_ctx}\")].context.namespace}")" + # If the namespace comes back empty set it default. + if [[ -z "${cur_namespace}" ]]; then + cur_namespace="default" fi - + local k8s_final_text="" - if [[ "$k8s_context" == "k8s_namespace" ]]; then + if [[ "$cur_ctx" == "cur_namespace" ]]; then # No reason to print out the same identificator twice - k8s_final_text="$k8s_context" + k8s_final_text="$cur_ctx" else - k8s_final_text="$k8s_context/$k8s_namespace" + k8s_final_text="$cur_ctx/$cur_namespace" fi - - + "$1_prompt_segment" "$0" "$2" "magenta" "white" "$k8s_final_text" "KUBERNETES_ICON" fi } +# Dropbox status +prompt_dropbox() { + # The first column is just the directory, so cut it + local dropbox_status="$(dropbox-cli filestatus . | cut -d\ -f2-)" + + # Only show if the folder is tracked and dropbox is running + if [[ "$dropbox_status" != 'unwatched' && "$dropbox_status" != "isn't running!" ]]; then + # If "up to date", only show the icon + if [[ "$dropbox_status" =~ 'up to date' ]]; then + dropbox_status="" + fi + + "$1_prompt_segment" "$0" "$2" "white" "blue" "$dropbox_status" "DROPBOX_ICON" + fi + +} + ################################################################ # Prompt processing and drawing diff --git a/test/segments/command_execution_time.spec b/test/segments/command_execution_time.spec index 09738859..e8be508f 100755 --- a/test/segments/command_execution_time.spec +++ b/test/segments/command_execution_time.spec @@ -28,7 +28,7 @@ function testCommandExecutionTimeThresholdCouldBeChanged() { POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1 _P9K_COMMAND_DURATION=2.03 - assertEquals "%K{red} %F{226%}Dur%f %F{226}2.03 %k%F{red}%f " "$(build_left_prompt)" + assertEquals "%K{red} %F{yellow1%}Dur%f %F{yellow1}2.03 %k%F{red}%f " "$(build_left_prompt)" unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unset _P9K_COMMAND_DURATION @@ -40,7 +40,7 @@ function testCommandExecutionTimeThresholdCouldBeSetToZero() { POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0 _P9K_COMMAND_DURATION=0.03 - assertEquals "%K{red} %F{226%}Dur%f %F{226}0.03 %k%F{red}%f " "$(build_left_prompt)" + assertEquals "%K{red} %F{yellow1%}Dur%f %F{yellow1}0.03 %k%F{red}%f " "$(build_left_prompt)" unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unset _P9K_COMMAND_DURATION @@ -53,7 +53,7 @@ function testCommandExecutionTimePrecisionCouldBeChanged() { POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=4 _P9K_COMMAND_DURATION=0.0001 - assertEquals "%K{red} %F{226%}Dur%f %F{226}0.0001 %k%F{red}%f " "$(build_left_prompt)" + assertEquals "%K{red} %F{yellow1%}Dur%f %F{yellow1}0.0001 %k%F{red}%f " "$(build_left_prompt)" unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unset _P9K_COMMAND_DURATION @@ -66,7 +66,7 @@ function testCommandExecutionTimePrecisionCouldBeSetToZero() { POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 _P9K_COMMAND_DURATION=23.5001 - assertEquals "%K{red} %F{226%}Dur%f %F{226}23 %k%F{red}%f " "$(build_left_prompt)" + assertEquals "%K{red} %F{yellow1%}Dur%f %F{yellow1}23 %k%F{red}%f " "$(build_left_prompt)" unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unset _P9K_COMMAND_DURATION @@ -77,7 +77,7 @@ function testCommandExecutionTimeIsFormattedHumandReadbleForMinuteLongCommand() POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time) _P9K_COMMAND_DURATION=180 - assertEquals "%K{red} %F{226%}Dur%f %F{226}03:00 %k%F{red}%f " "$(build_left_prompt)" + assertEquals "%K{red} %F{yellow1%}Dur%f %F{yellow1}03:00 %k%F{red}%f " "$(build_left_prompt)" unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unset _P9K_COMMAND_DURATION @@ -87,7 +87,7 @@ function testCommandExecutionTimeIsFormattedHumandReadbleForHourLongCommand() { POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time) _P9K_COMMAND_DURATION=7200 - assertEquals "%K{red} %F{226%}Dur%f %F{226}02:00:00 %k%F{red}%f " "$(build_left_prompt)" + assertEquals "%K{red} %F{yellow1%}Dur%f %F{yellow1}02:00:00 %k%F{red}%f " "$(build_left_prompt)" unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unset _P9K_COMMAND_DURATION diff --git a/test/segments/go_version.spec b/test/segments/go_version.spec index 2aac460b..347ba4c0 100755 --- a/test/segments/go_version.spec +++ b/test/segments/go_version.spec @@ -40,7 +40,7 @@ function testGo() { PWD="$HOME/go/src/github.com/bhilburn/powerlevel9k" - assertEquals "%K{green} %F{255%}%f %F{255}go1.5.3 %k%F{green}%f " "$(build_left_prompt)" + assertEquals "%K{green} %F{grey93%}%f %F{grey93}go1.5.3 %k%F{green}%f " "$(build_left_prompt)" unset POWERLEVEL9K_GO_ICON unset PWD diff --git a/test/segments/kubecontext.spec b/test/segments/kubecontext.spec index eaaa2300..4f1d2c5e 100755 --- a/test/segments/kubecontext.spec +++ b/test/segments/kubecontext.spec @@ -18,11 +18,19 @@ function mockKubectl() { ;; 'config') case "$2" in - 'current-context') - echo 'minikube' - ;; - 'get-contexts') - echo '* minikube minikube minikube ' + 'view') + case "$3" in + '-o=jsonpath={.current-context}') + echo 'minikube' + ;; + '-o=jsonpath={.contexts'*) + echo '' + ;; + *) + echo "Mock value missed" + exit 1 + ;; + esac ;; esac ;; @@ -36,11 +44,21 @@ function mockKubectlOtherNamespace() { ;; 'config') case "$2" in - 'current-context') - echo 'minikube' - ;; - 'get-contexts') - echo '* minikube minikube minikube kube-system' + 'view') + case "$3" in + # Get Current Context + '-o=jsonpath={.current-context}') + echo 'minikube' + ;; + # Get current namespace + '-o=jsonpath={.contexts'*) + echo 'kube-system' + ;; + *) + echo "Mock value missed" + exit 1 + ;; + esac ;; esac ;; diff --git a/test/segments/rust_version.spec b/test/segments/rust_version.spec index 49b06bcf..8eea31dc 100755 --- a/test/segments/rust_version.spec +++ b/test/segments/rust_version.spec @@ -19,7 +19,7 @@ function testRust() { alias rustc=mockRust POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(rust_version) - assertEquals "%K{208} %F{black}Rust 0.4.1a-alpha %k%F{208}%f " "$(build_left_prompt)" + assertEquals "%K{darkorange} %F{black}Rust 0.4.1a-alpha %k%F{darkorange}%f " "$(build_left_prompt)" unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS unalias rustc |