better structure
This commit is contained in:
40
config/eww/Main/scripts/cava
Executable file
40
config/eww/Main/scripts/cava
Executable file
@@ -0,0 +1,40 @@
|
||||
#! /bin/bash
|
||||
|
||||
|
||||
bar="▁▂▃▄▅▆▇█"
|
||||
dict="s/;//g;"
|
||||
|
||||
# creating "dictionary" to replace char with bar
|
||||
i=0
|
||||
while [ $i -lt ${#bar} ]
|
||||
do
|
||||
dict="${dict}s/$i/${bar:$i:1}/g;"
|
||||
i=$((i=i+1))
|
||||
done
|
||||
|
||||
# make sure to clean pipe
|
||||
pipe="/tmp/cava.fifo"
|
||||
if [ -p $pipe ]; then
|
||||
unlink $pipe
|
||||
fi
|
||||
mkfifo $pipe
|
||||
|
||||
# write cava config
|
||||
config_file="/tmp/waybar_cava_config"
|
||||
echo "
|
||||
[general]
|
||||
bars = 30
|
||||
[output]
|
||||
method = raw
|
||||
raw_target = $pipe
|
||||
data_format = ascii
|
||||
ascii_max_range = 7
|
||||
" > $config_file
|
||||
|
||||
# run cava in the background
|
||||
cava -p $config_file &
|
||||
|
||||
# reading data from fifo
|
||||
while read -r cmd; do
|
||||
echo $cmd | sed $dict
|
||||
done < $pipe
|
||||
28
config/eww/Main/scripts/details
Executable file
28
config/eww/Main/scripts/details
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ $1 == "--image" ]]; then
|
||||
FILE=$HOME/.face
|
||||
if [[ -f "$FILE" ]]; then
|
||||
echo "../../.face"
|
||||
else
|
||||
echo "Main/images/profile.png"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [[ $1 == "--name" ]]; then
|
||||
fullname=$(getent passwd "$(whoami)" | cut -d ':' -f 5 | cut -d ',' -f 1 | tr -d "\n")
|
||||
if [ -z "$fullname" ]; then
|
||||
echo "$(whoami)@$(hostnamectl | awk 'FNR==1 {print $3}')"
|
||||
else
|
||||
echo "$fullname"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $1 == "--kernel" ]]; then
|
||||
echo "$(uname -r)"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--os" ]]; then
|
||||
echo "$(cat /etc/os-release | awk 'NR==1'| awk -F '"' '{print $2}')"
|
||||
fi
|
||||
92
config/eww/Main/scripts/fortune-split
Executable file
92
config/eww/Main/scripts/fortune-split
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
|
||||
def wrap(text, width, height):
|
||||
lines = []
|
||||
|
||||
paragraphs = text.split('\n')
|
||||
|
||||
for paragraph in paragraphs:
|
||||
if len(lines) >= height:
|
||||
return []
|
||||
|
||||
# Skip empty paragraphs
|
||||
if not paragraph.strip():
|
||||
lines.append('')
|
||||
continue
|
||||
|
||||
current_line = ''
|
||||
words = paragraph.split()
|
||||
|
||||
for word in words:
|
||||
if current_line:
|
||||
test_line = current_line + ' ' + word
|
||||
else:
|
||||
test_line = word
|
||||
|
||||
if len(test_line) <= width:
|
||||
current_line = test_line
|
||||
else:
|
||||
if current_line:
|
||||
lines.append(current_line)
|
||||
current_line = word
|
||||
else:
|
||||
while len(word) > width:
|
||||
lines.append(word[:width])
|
||||
word = word[width:]
|
||||
current_line = word
|
||||
|
||||
if current_line:
|
||||
lines.append(current_line)
|
||||
|
||||
return lines
|
||||
|
||||
|
||||
RETRY_LIMIT = 10
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: fortune.py <width> <height>")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
width = int(sys.argv[1])
|
||||
if width <= 0:
|
||||
raise ValueError()
|
||||
height = int(sys.argv[2])
|
||||
if height <= 0:
|
||||
raise ValueError()
|
||||
except ValueError:
|
||||
print("Invalid argument.")
|
||||
sys.exit(1)
|
||||
|
||||
i = 0
|
||||
while True:
|
||||
if i >= RETRY_LIMIT:
|
||||
print("Failed to get fortune after multiple attempts.")
|
||||
sys.exit(1)
|
||||
i += 1
|
||||
|
||||
try:
|
||||
buffer = subprocess.check_output(['fortune', '-s'], text=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"Error running fortune: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
lines = wrap(buffer, width, height)
|
||||
|
||||
if lines:
|
||||
break
|
||||
else:
|
||||
print("retrying...")
|
||||
|
||||
for line in lines:
|
||||
print(line)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
32
config/eww/Main/scripts/music-album
Executable file
32
config/eww/Main/scripts/music-album
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ album }}"
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="No Album"
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "No Album"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "No Alnum" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
45
config/eww/Main/scripts/music-art
Executable file
45
config/eww/Main/scripts/music-art
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
|
||||
tmp_dir="$HOME/.cache/eww/music-art"
|
||||
art_path=$tmp_dir/temp.png
|
||||
art_blur_path="$tmp_dir/temp-blur.png"
|
||||
cache_path="$tmp_dir/cache.conf"
|
||||
cache_blur_path="$tmp_dir/cache-blur.conf"
|
||||
log_path="$tmp_dir/log.txt"
|
||||
default_path="$HOME/.config/eww/Main/images/default-music.svg"
|
||||
default_blur_path="$HOME/.config/eww/Main/images/default-music-blur.png"
|
||||
|
||||
mkdir -p "$tmp_dir"
|
||||
|
||||
artlink="$(playerctl metadata mpris:artUrl)"
|
||||
[ -f "$cache_path" ] && . "$cache_path"
|
||||
|
||||
# avoid unnecessary downloads
|
||||
if [ -z "$artlink" ]; then
|
||||
art_path="$default_path"
|
||||
art_blur_path="$default_blur_path"
|
||||
elif [[ "$cachedlink" != "$artlink" ]]; then
|
||||
echo "cachedlink=\"$artlink\"" > "$cache_path"
|
||||
echo "Updating music art: $artlink" >> "$log_path"
|
||||
|
||||
if [[ "$artlink" == "file://"* ]]; then
|
||||
# Handle local file URLs
|
||||
local_file_path="${artlink#file://}"
|
||||
if [[ -f "$local_file_path" ]]; then
|
||||
magick "$local_file_path" "$art_path" || exit 1
|
||||
fi
|
||||
magick "$art_path" -blur 0x8 "$art_blur_path"
|
||||
elif [[ "$artlink" =~ ^https?:// ]]; then
|
||||
# Handle HTTP/HTTPS URLs
|
||||
curl -s "$artlink" --output "$art_path"_orig || exit 1
|
||||
magick "$art_path"_orig "$art_path" || exit 1
|
||||
magick "$art_path" -blur 0x8 "$art_blur_path"
|
||||
else
|
||||
echo "Unknown art link format: $artlink" >> "$log_path"
|
||||
art_path="$default_path"
|
||||
art_blur_path="$default_blur_path"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "path=\"$art_blur_path\"" > "$cache_blur_path"
|
||||
echo "$art_path"
|
||||
8
config/eww/Main/scripts/music-art-blur
Executable file
8
config/eww/Main/scripts/music-art-blur
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
tmp_dir="$HOME/.cache/eww/music-art"
|
||||
cache_blur_path="$tmp_dir/cache-blur.conf"
|
||||
|
||||
. "$cache_blur_path"
|
||||
|
||||
echo "$path"
|
||||
32
config/eww/Main/scripts/music-artist
Executable file
32
config/eww/Main/scripts/music-artist
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ artist }}"
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="No Artist"
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "No Artist"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "No Artist" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
32
config/eww/Main/scripts/music-length
Executable file
32
config/eww/Main/scripts/music-length
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ duration(position) }} / {{ duration(mpris:length) }}"
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="--:-- / --:--"
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "--:-- / --:--"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "--:-- / --:--" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
32
config/eww/Main/scripts/music-length-info
Executable file
32
config/eww/Main/scripts/music-length-info
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ duration(mpris:length) }}"
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="--:--"
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "--:--"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "--:--" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
4
config/eww/Main/scripts/music-position
Executable file
4
config/eww/Main/scripts/music-position
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
POS=$(playerctl -p spotify position)
|
||||
python -c "print(float($POS*1000000))"
|
||||
43
config/eww/Main/scripts/music-title
Executable file
43
config/eww/Main/scripts/music-title
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ title }}"
|
||||
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="Nothing is playing"
|
||||
fi
|
||||
|
||||
if [ "$1" == "--status" ]; then
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "Nothing is playing"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "Nothing is playing" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$1" == "--icon" ]; then
|
||||
if [[ $STATUS == "Playing" ]]; then
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
57
config/eww/Main/scripts/player
Executable file
57
config/eww/Main/scripts/player
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ $1 == "--length" ]]; then
|
||||
playerctl -p spotify metadata mpris:length
|
||||
fi
|
||||
|
||||
if [[ $1 == "--open" ]]; then
|
||||
URL=$(playerctl -p spotify metadata xesam:url)
|
||||
echo "$URL?go=1&utm_medium=desktop"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--artist" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-artist"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--length-time" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-length"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--length-info" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-length-info"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--cover" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-art"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--album" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-album"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--current-volume" ]]; then
|
||||
VOLUME=$(playerctl -p spotify volume)
|
||||
echo $(python -c "print(float("$VOLUME")*100)")
|
||||
fi
|
||||
|
||||
if [[ $1 == "--volume" ]]; then
|
||||
CURRENT_VOLUME=$2
|
||||
NOW_VOLUME=$(python -c "print(float($CURRENT_VOLUME)/100)")
|
||||
playerctl -p spotify volume "$NOW_VOLUME"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--shuffle" ]]; then
|
||||
if [[ $(playerctl -p spotify shuffle) == "On" ]]; then
|
||||
playerctl -p spotify shuffle off
|
||||
else
|
||||
playerctl -p spotify shuffle On
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $1 == "--current-pos" ]]; then
|
||||
playerctl -p spotify position --format '{{ duration(position) }}'
|
||||
fi
|
||||
|
||||
if [[ $1 == "--launch-lyrics" ]]; then
|
||||
eww open --toggle lyrics
|
||||
fi
|
||||
70
config/eww/Main/scripts/system
Executable file
70
config/eww/Main/scripts/system
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
|
||||
## Files and Data
|
||||
PREV_TOTAL=0
|
||||
PREV_IDLE=0
|
||||
cpuFile="/tmp/.cpu_usage"
|
||||
|
||||
## Get CPU usage
|
||||
get_cpu() {
|
||||
if [[ -f "${cpuFile}" ]]; then
|
||||
fileCont=$(cat "${cpuFile}")
|
||||
PREV_TOTAL=$(echo "${fileCont}" | head -n 1)
|
||||
PREV_IDLE=$(echo "${fileCont}" | tail -n 1)
|
||||
fi
|
||||
|
||||
CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
|
||||
unset CPU[0] # Discard the "cpu" prefix.
|
||||
IDLE=${CPU[4]} # Get the idle CPU time.
|
||||
|
||||
# Calculate the total CPU time.
|
||||
TOTAL=0
|
||||
|
||||
for VALUE in "${CPU[@]:0:4}"; do
|
||||
let "TOTAL=$TOTAL+$VALUE"
|
||||
done
|
||||
|
||||
if [[ "${PREV_TOTAL}" != "" ]] && [[ "${PREV_IDLE}" != "" ]]; then
|
||||
# Calculate the CPU usage since we last checked.
|
||||
let "DIFF_IDLE=$IDLE-$PREV_IDLE"
|
||||
let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
|
||||
let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
|
||||
echo "${DIFF_USAGE}"
|
||||
else
|
||||
echo "?"
|
||||
fi
|
||||
|
||||
# Remember the total and idle CPU times for the next check.
|
||||
echo "${TOTAL}" > "${cpuFile}"
|
||||
echo "${IDLE}" >> "${cpuFile}"
|
||||
}
|
||||
|
||||
## Get Used memory
|
||||
get_mem() {
|
||||
printf "%.0f\n" "$(free -m | grep Mem | awk '{print ($3/$2)*100}')"
|
||||
}
|
||||
|
||||
## Get Volume
|
||||
get_vol() {
|
||||
pamixer --get-volume
|
||||
}
|
||||
|
||||
## Get Brightness
|
||||
get_brightness() {
|
||||
if [ -z "$DISPLAY_DEVICE" ]; then
|
||||
brightnessctl i --machine-readable | tr ',' ' ' | awk '{print $4}' | tr -d '%'
|
||||
else
|
||||
brightnessctl i -d $DISPLAY_DEVICE --machine-readable | tr ',' ' ' | awk '{print $4}' | tr -d '%'
|
||||
fi
|
||||
}
|
||||
|
||||
## Execute accordingly
|
||||
if [[ "$1" == "--cpu" ]]; then
|
||||
get_cpu
|
||||
elif [[ "$1" == "--mem" ]]; then
|
||||
get_mem
|
||||
elif [[ "$1" == "--vol" ]]; then
|
||||
get_vol
|
||||
elif [[ "$1" == "--bri" ]]; then
|
||||
get_brightness
|
||||
fi
|
||||
157
config/eww/Main/scripts/weather
Executable file
157
config/eww/Main/scripts/weather
Executable file
@@ -0,0 +1,157 @@
|
||||
#!/bin/bash
|
||||
|
||||
## Collect data
|
||||
cache_dir="$HOME/.cache/eww/weather"
|
||||
cache_weather_stat=${cache_dir}/weather-stat
|
||||
cache_weather_degree=${cache_dir}/weather-degree
|
||||
cache_weather_hex=${cache_dir}/weather-hex
|
||||
cache_weather_icon=${cache_dir}/weather-icon
|
||||
cache_weather_updatetime=${cache_dir}/weather-updatetime
|
||||
|
||||
if [[ -z "$OPENWEATHER_API_KEY" ]]; then
|
||||
echo "Please set the OPENWEATHER_API_KEY environment variable."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "$OPENWEATHER_LAT" ]]; then
|
||||
echo "Please set the OPENWEATHER_LAT environment variable."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "$OPENWEATHER_LON" ]]; then
|
||||
echo "Please set the OPENWEATHER_LON environment variable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
## Weather data
|
||||
KEY=$OPENWEATHER_API_KEY
|
||||
LAT=$OPENWEATHER_LAT
|
||||
LON=$OPENWEATHER_LON
|
||||
UNITS=metric
|
||||
|
||||
## Make cache dir
|
||||
if [[ ! -d "$cache_dir" ]]; then
|
||||
mkdir -p "${cache_dir}"
|
||||
fi
|
||||
|
||||
## Get data
|
||||
get_weather_data() {
|
||||
weather=$(curl -sf "http://api.openweathermap.org/data/3.0/onecall?lat=${LAT}&lon=${LON}&exclude=minutely,hourly,daily&appid=${KEY}&units=${UNITS}")
|
||||
echo "${weather}" >&2
|
||||
weather=$(echo "$weather" | jq -r ".current")
|
||||
|
||||
if [ -n "$weather" ]; then
|
||||
weather_temp=$(echo "$weather" | jq ".temp" | cut -d "." -f 1)
|
||||
weather_icon_code=$(echo "$weather" | jq -r ".weather[].icon" | head -1)
|
||||
weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1 | sed -e "s/\b\(.\)/\u\1/g")
|
||||
|
||||
#Big long if statement of doom
|
||||
if [ "$weather_icon_code" == "50d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "50n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "01d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#e0af68"
|
||||
elif [ "$weather_icon_code" == "01n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#c0caf5"
|
||||
elif [ "$weather_icon_code" == "02d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "02n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "03d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "03n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "04d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "04n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "09d" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "09n" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "10d" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "10n" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "11d" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#ff9e64"
|
||||
elif [ "$weather_icon_code" == "11n" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#ff9e64"
|
||||
elif [ "$weather_icon_code" == "13d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#c0caf5"
|
||||
elif [ "$weather_icon_code" == "13n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#c0caf5"
|
||||
elif [ "$weather_icon_code" == "40d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "40n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7dcfff"
|
||||
else
|
||||
weather_icon=" "
|
||||
weather_hex="#c0caf5"
|
||||
fi
|
||||
echo "$weather_icon" > "${cache_weather_icon}"
|
||||
echo "$weather_description" > "${cache_weather_stat}"
|
||||
echo "$weather_temp""°C" > "${cache_weather_degree}"
|
||||
echo "$weather_hex" > "${cache_weather_hex}"
|
||||
date "+%Y-%m-%d %H:%M:%S" | tee "${cache_weather_updatetime}" >/dev/null
|
||||
else
|
||||
echo "Weather Unavailable" > "${cache_weather_stat}"
|
||||
echo " " > "${cache_weather_icon}"
|
||||
echo "-" > "${cache_weather_degree}"
|
||||
echo "#adadff" > "${cache_weather_hex}"
|
||||
date "+%Y-%m-%d %H:%M:%S" | tee "${cache_weather_updatetime}" >/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
check_network() {
|
||||
local max=12
|
||||
local cnt=0
|
||||
|
||||
while [ $cnt -lt $max ]; do
|
||||
if ping -c1 8.8.8.8 &>/dev/null || ping -c1 1.1.1.1 &>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
echo "Waiting for network connection... (attempt: $((cnt + 1))/$max)" >&2
|
||||
sleep 5
|
||||
((cnt++))
|
||||
done
|
||||
|
||||
echo "Network connection failed after $max attempts." >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
## Execute
|
||||
if [[ "$1" == "--getdata" ]]; then
|
||||
if check_network; then
|
||||
get_weather_data
|
||||
fi
|
||||
elif [[ "$1" == "--icon" ]]; then
|
||||
cat "${cache_weather_icon}"
|
||||
elif [[ "$1" == "--temp" ]]; then
|
||||
cat "${cache_weather_degree}"
|
||||
elif [[ "$1" == "--hex" ]]; then
|
||||
tail -F "${cache_weather_hex}"
|
||||
elif [[ "$1" == "--stat" ]]; then
|
||||
cat "${cache_weather_stat}"
|
||||
elif [[ "$1" == "--updatetime" ]]; then
|
||||
cat "${cache_weather_updatetime}"
|
||||
fi
|
||||
Reference in New Issue
Block a user