Files

83 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
#
# Armbian MOTD: Tips (compact + robust)
#
THIS_SCRIPT="tips"
MOTD_DISABLE=""
safe_source() { [[ -f "$1" ]] && . "$1"; }
safe_source /etc/default/armbian-motd
for f in ${MOTD_DISABLE}; do
[[ "${f}" == "${THIS_SCRIPT}" ]] && exit 0
done
# --- helpers ---
_has_prev_output() {
[[ -e /run/armbian-motd/.after_header.printed ]] \
|| [[ -e "${XDG_RUNTIME_DIR:-/tmp}/armbian-motd/.after_header.printed" ]]
}
# extract field from a tiny JSON object; prefer jq, fallback to sed
_json_get() {
local key="$1" json="$2"
if command -v jq >/dev/null 2>&1; then
jq -r --arg k "$key" '.[$k] // empty' <<<"$json" 2>/dev/null
else
printf '%s\n' "$json" | sed -n -E "s/.*\"$key\":\"([^\"]*)\".*/\1/p"
fi
}
# --- collect content ---
lines=()
# 1) Optional quote: /etc/update-motd.d/quotes.txt lines like: YYYY-MM-DD|Some text...
quotes="/etc/update-motd.d/quotes.txt"
if [[ -f "$quotes" ]]; then
total=$(wc -l < "$quotes")
if [[ "$total" -gt 0 ]]; then
rline=$(( RANDOM % total + 1 ))
raw=$(sed -n "${rline}p" "$quotes")
due="${raw%%|*}"
qtext="${raw#*|}"
# show only if not expired or due is empty
today=$(date +%Y-%m-%d)
if [[ -z "$due" || "$today" < "$(date -d "$due" +%Y-%m-%d 2>/dev/null || echo 9999-12-31)" ]]; then
[[ -n "$qtext" ]] && lines+=("$qtext")
fi
fi
fi
# 2) One non-expired recommend_message (if defined)
if [[ "$(declare -p recommend_messages 2>/dev/null)" == "declare -a"* ]]; then
today=$(date +%Y-%m-%d)
valid=()
for item in "${recommend_messages[@]}"; do
exp=$(_json_get expiration "$item")
[[ -z "$exp" || "$today" < "$exp" ]] && valid+=("$item")
done
if ((${#valid[@]})); then
pick=${valid[$RANDOM % ${#valid[@]}]}
msg=$(_json_get message "$pick")
url=$(_json_get url "$pick")
[[ -n "$msg" ]] && lines+=("$msg")
[[ -n "$url" ]] && lines+=("$url")
fi
fi
# --- print (only if we actually have something to say) ---
if ((${#lines[@]})); then
# One blank line ONLY if something printed earlier
_has_prev_output && echo ""
printf "\e[0;90m Tips:\x1B[0m\n\n"
for l in "${lines[@]}"; do
printf "%s\n" " $l"
done
fi
exit 0