|
|
|
@ -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() {
|
|
|
|
|