summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrjorgenson <rjorgenson@gmail.com>2016-12-31 00:04:18 +0300
committerrjorgenson <rjorgenson@gmail.com>2016-12-31 00:04:18 +0300
commit29233c1963ce85241972e7962b92c73535e4a1d6 (patch)
treed315549d0b782c25d11893781cc3a6bbcf37b7e2
parentc86b4009ce09b1d2f274579373fa53648fd1b362 (diff)
added public IP segment for review/discussion
-rw-r--r--functions/icons.zsh5
-rwxr-xr-xpowerlevel9k.zsh-theme45
2 files changed, 49 insertions, 1 deletions
diff --git a/functions/icons.zsh b/functions/icons.zsh
index 06d6ab20..b13e3463 100644
--- a/functions/icons.zsh
+++ b/functions/icons.zsh
@@ -76,6 +76,7 @@ case $POWERLEVEL9K_MODE in
RUST_ICON ''
PYTHON_ICON $'\U1F40D' # 🐍
SWIFT_ICON ''
+ PUBLIC_IP_ICON ''
)
;;
'awesome-fontconfig')
@@ -131,9 +132,10 @@ 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 $'\U1F40D' # 🐍
SWIFT_ICON ''
+ PUBLIC_IP_ICON ''
)
;;
*)
@@ -192,6 +194,7 @@ case $POWERLEVEL9K_MODE in
RUST_ICON ''
PYTHON_ICON ''
SWIFT_ICON 'Swift'
+ PUBLIC_IP_ICON ''
)
;;
esac
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index 9ea12aa7..34d1f640 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -426,6 +426,51 @@ prompt_battery() {
fi
}
+prompt_public_ip() {
+ # set default values for segment
+ set_default POWERLEVEL9K_PUBLIC_IP_TIMOUT "300"
+ 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
+ timediff=$(($(date +%s) - $(date -r $POWERLEVEL9K_PUBLIC_IP_FILE +%s)))
+ [[ $timediff -gt '500' ]] && refresh_ip=TRUE
+ # this will run the IP refresh with each new prompt while disconnected
+ # but will get a new IP immediately once reconnected rather than waiting
+ # for the timeout, not sure if this is ideal behavior or not
+ [[ -z $(cat $POWERLEVEL9K_PUBLIC_IP_FILE) ]] && 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 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
+ [[ -n $fresh_ip ]] && echo $fresh_ip > $POWERLEVEL9K_PUBLIC_IP_FILE
+ fi
+
+ # write IP to tmp file
+ local public_ip=$(cat $POWERLEVEL9K_PUBLIC_IP_FILE)
+
+ if [[ -n $public_ip ]]; then
+ $1_prompt_segment "$0" "$2" "black" "249" "${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() {