aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rwxr-xr-xpowerlevel9k.zsh-theme62
l---------prompt_powerlevel9k_setup1
3 files changed, 33 insertions, 32 deletions
diff --git a/README.md b/README.md
index 8f606f6b..df653c45 100644
--- a/README.md
+++ b/README.md
@@ -349,7 +349,7 @@ segment will not be displayed.
|`POWERLEVEL9K_PUBLIC_IP_FILE`|'/tmp/p8k_public_ip'|This is the file your public IP is cached in.|
|`POWERLEVEL9K_PUBLIC_IP_HOST`|'http://ident.me'|This is the default host to get your public IP.|
|`POWERLEVEL9K_PUBLIC_IP_TIMEOUT`|300|The amount of time in seconds between refreshing your cached IP.|
-|`POWERLEVEL9K_PUBLIC_IP_METHOD`|None|You can set this to any of 'dig', 'curl', or 'wget' to only use that method to refresh your IP.|
+|`POWERLEVEL9K_PUBLIC_IP_METHODS`|(dig curl wget)| These methods in that order are used to refresh your IP.|
|`POWERLEVEL9K_PUBLIC_IP_NONE`|None|The string displayed when an IP was not obtained|
##### rbenv
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index b89f390c..7499197b 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -469,12 +469,18 @@ prompt_battery() {
fi
}
+# Public IP segment
+# Parameters:
+# * $1 Alignment: string - left|right
+# * $2 Index: integer
+# * $3 Joined: bool - If the segment should be joined
prompt_public_ip() {
# set default values for segment
set_default POWERLEVEL9K_PUBLIC_IP_TIMEOUT "300"
set_default POWERLEVEL9K_PUBLIC_IP_NONE ""
set_default POWERLEVEL9K_PUBLIC_IP_FILE "/tmp/p9k_public_ip"
set_default POWERLEVEL9K_PUBLIC_IP_HOST "http://ident.me"
+ defined POWERLEVEL9K_PUBLIC_IP_METHODS || POWERLEVEL9K_PUBLIC_IP_METHODS=(dig curl wget)
# Do we need a fresh IP?
local refresh_ip=false
@@ -491,52 +497,39 @@ prompt_public_ip() {
fi
# grab a fresh IP if needed
+ local fresh_ip
if [[ $refresh_ip =~ true && -w $POWERLEVEL9K_PUBLIC_IP_FILE ]]; then
- # if method specified, don't use fallback methods
- if [[ -n $POWERLEVEL9K_PUBLIC_IP_METHOD ]] && [[ $POWERLEVEL9K_PUBLIC_IP_METHOD =~ 'wget|curl|dig' ]]; then
- local method=$POWERLEVEL9K_PUBLIC_IP_METHOD
- fi
- if [[ -n $method ]]; then
+ for method in "${POWERLEVEL9K_PUBLIC_IP_METHODS[@]}"; do
case $method in
'dig')
- if type -p dig >/dev/null; then
- fresh_ip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com 2> /dev/null)"
- [[ "$fresh_ip" =~ ^\; ]] && unset fresh_ip
- fi
+ fresh_ip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com 2> /dev/null)"
+ [[ "$fresh_ip" =~ ^\; ]] && unset fresh_ip
;;
'curl')
- if [[ -z "$fresh_ip" ]] && type -p curl >/dev/null; then
- fresh_ip="$(curl --max-time 10 -w '\n' "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)"
- fi
+ fresh_ip="$(curl --max-time 10 -w '\n' "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)"
;;
'wget')
- if [[ -z "$fresh_ip" ]] && type -p wget >/dev/null; then
- fresh_ip="$(wget -T 10 -qO- "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)"
- fi
+ fresh_ip="$(wget -T 10 -qO- "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)"
;;
esac
- else
- if type -p dig >/dev/null; then
- fresh_ip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com 2> /dev/null)"
- [[ "$fresh_ip" =~ ^\; ]] && unset fresh_ip
- fi
-
- if [[ -z "$fresh_ip" ]] && type -p curl >/dev/null; then
- fresh_ip="$(curl --max-time 10 -w '\n' "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)"
+ # If we found a fresh IP, break loop.
+ if [[ -n "${fresh_ip}" ]]; then
+ break;
fi
-
- if [[ -z "$fresh_ip" ]] && type -p wget >/dev/null; then
- fresh_ip="$(wget -T 10 -qO- "$POWERLEVEL9K_PUBLIC_IP_HOST" 2> /dev/null)"
- fi
- fi
+ done
# write IP to tmp file or clear tmp file if an IP was not retrieved
- [[ -n $fresh_ip ]] && echo $fresh_ip > $POWERLEVEL9K_PUBLIC_IP_FILE || echo $POWERLEVEL9K_PUBLIC_IP_NONE > $POWERLEVEL9K_PUBLIC_IP_FILE
+ # Redirection with `>!`. From the manpage: Same as >, except that the file
+ # is truncated to zero length if it exists, even if CLOBBER is unset.
+ # If the file already exists, and a simple `>` redirection and CLOBBER
+ # unset, ZSH will produce an error.
+ [[ -n "${fresh_ip}" ]] && echo $fresh_ip >! $POWERLEVEL9K_PUBLIC_IP_FILE || echo $POWERLEVEL9K_PUBLIC_IP_NONE >! $POWERLEVEL9K_PUBLIC_IP_FILE
fi
# read public IP saved to tmp file
- local public_ip=$(cat $POWERLEVEL9K_PUBLIC_IP_FILE)
+ local public_ip="$(cat $POWERLEVEL9K_PUBLIC_IP_FILE)"
+ # Draw the prompt segment
if [[ -n $public_ip ]]; then
$1_prompt_segment "$0" "$2" "$DEFAULT_COLOR" "$DEFAULT_COLOR_INVERTED" "${public_ip}" 'PUBLIC_IP_ICON'
fi
@@ -587,7 +580,14 @@ prompt_dir() {
# Get the path of the Git repo, which should have the package.json file
if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == "true" ]]; then
- package_path=$(git rev-parse --show-toplevel)
+ # Get path from the root of the git repository to the current dir
+ local gitPath=$(git rev-parse --show-prefix)
+ # Remove trailing slash from git path, so that we can
+ # remove that git path from the pwd.
+ gitPath=${gitPath%/}
+ package_path=${$(pwd)%%$gitPath}
+ # Remove trailing slash
+ package_path=${package_path%/}
elif [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) == "true" ]]; then
package_path=${$(pwd)%%/.git*}
fi
diff --git a/prompt_powerlevel9k_setup b/prompt_powerlevel9k_setup
new file mode 120000
index 00000000..311575f4
--- /dev/null
+++ b/prompt_powerlevel9k_setup
@@ -0,0 +1 @@
+powerlevel9k.zsh-theme \ No newline at end of file