summaryrefslogtreecommitdiff
path: root/powerlevel9k.zsh-theme
diff options
context:
space:
mode:
authorBen Hilburn <bhilburn@gmail.com>2017-01-21 04:32:20 +0300
committerGitHub <noreply@github.com>2017-01-21 04:32:20 +0300
commit4f21b6215aece0039c46281673f01d27e29d2187 (patch)
tree88ba8115f746cf199516e046ea5f41946415becf /powerlevel9k.zsh-theme
parentc5909e71ea873542a053531012ee62a5af3a57b8 (diff)
parent6321dd99c5e6050b24598cca8b37d54f520a6ffd (diff)
Merge pull request #368 from rjorgenson/public_ip_segment
Public ip segment
Diffstat (limited to 'powerlevel9k.zsh-theme')
-rwxr-xr-xpowerlevel9k.zsh-theme73
1 files changed, 73 insertions, 0 deletions
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index 9e89f68d..95a2a5ea 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -426,6 +426,79 @@ prompt_battery() {
fi
}
+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"
+
+ # Do we need a fresh IP?
+ local refresh_ip=false
+ if [[ -f $POWERLEVEL9K_PUBLIC_IP_FILE ]]; then
+ typeset -i timediff
+ # if saved IP is more than
+ timediff=$(($(date +%s) - $(date -r $POWERLEVEL9K_PUBLIC_IP_FILE +%s)))
+ [[ $timediff -gt $POWERLEVEL9K_PUBLIC_IP_TIMEOUT ]] && refresh_ip=true
+ # If tmp file is empty get a fresh IP
+ [[ -z $(cat $POWERLEVEL9K_PUBLIC_IP_FILE) ]] && refresh_ip=true
+ [[ -n $POWERLEVEL9K_PUBLIC_IP_NONE ]] && [[ $(cat $POWERLEVEL9K_PUBLIC_IP_FILE) =~ "$POWERLEVEL9K_PUBLIC_IP_NONE" ]] && refresh_ip=true
+ else
+ touch $POWERLEVEL9K_PUBLIC_IP_FILE && refresh_ip=true
+ fi
+
+ # grab a fresh IP if needed
+ 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
+ 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
+ ;;
+ '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
+ ;;
+ '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
+ ;;
+ 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)"
+ 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
+
+ # 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
+ fi
+
+ # read public IP saved to tmp file
+ local public_ip=$(cat $POWERLEVEL9K_PUBLIC_IP_FILE)
+
+ if [[ -n $public_ip ]]; then
+ $1_prompt_segment "$0" "$2" "$DEFAULT_COLOR" "$DEFAULT_COLOR_INVERTED" "${public_ip}" 'PUBLIC_IP_ICON'
+ 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() {