diff --git a/1.6.md b/1.6.md
index f33826e0..f7dbdb61 100644
--- a/1.6.md
+++ b/1.6.md
@@ -104,6 +104,10 @@ This is much faster than the default method.
**Birthday**
- Fix stray `+` sign in output.
+**Public IP**
+- Each source now has a timeout to avoid a hang.
+- If the IP detection fails we try another method.
+
### Image
diff --git a/neofetch b/neofetch
index 1040f515..ede5f7e5 100755
--- a/neofetch
+++ b/neofetch
@@ -1629,13 +1629,15 @@ getlocalip () {
getpublicip () {
if type -p dig >/dev/null 2>&1; then
- publicip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
+ publicip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com 2>/dev/null)"
+ fi
- elif type -p curl >/dev/null 2>&1; then
- publicip="$(curl -w '\n' "$public_ip_host")"
+ if [ -z "$publicip" ] && type -p curl >/dev/null 2>&1; then
+ publicip="$(curl --max-time 10 -w '\n' "$public_ip_host" 2>/dev/null)"
+ fi
- elif type -p wget >/dev/null 2>&1; then
- publicip="$(wget -qO- "$public_ip_host"; printf "%s")"
+ if [ -z "$publicip" ] && type -p wget >/dev/null 2>&1; then
+ publicip="$(wget -T 10 -qO- "$public_ip_host" 2>/dev/null; printf "%s")"
fi
}