# shellcheck shell=bash _mem_available=$(awk '/MemAvailable/ { printf "%.1f \n", $2/1024/1024 }' /proc/meminfo) _package_status_cache="${XDG_CACHE_HOME:-$HOME/.cache}/package-status/status" _package_status_attempt="${XDG_CACHE_HOME:-$HOME/.cache}/package-status/last-attempt" _package_status_max_age=3600 _package_status_retry_delay=300 _package_status_version="" _package_status_checked_at="" _package_status_pacman_log_signature="" _updates_available="0" _orphans_available="0" if [[ -r "$_package_status_cache" ]]; then while IFS='=' read -r _package_status_key _package_status_value; do case "$_package_status_key" in version) _package_status_version="$_package_status_value" ;; updates) _updates_available="$_package_status_value" ;; orphans) _orphans_available="$_package_status_value" ;; checked_at) _package_status_checked_at="$_package_status_value" ;; pacman_log_signature) _package_status_pacman_log_signature="$_package_status_value" ;; esac done < "$_package_status_cache" fi _package_status_now=$(date +%s) _package_status_current_pacman_log_signature=$(stat -c '%Y:%s:%i' /var/log/pacman.log 2>/dev/null || echo '0:0:0') if ! [[ "$_package_status_version" == "1" \ && "$_updates_available" =~ ^[0-9]+$ \ && "$_orphans_available" =~ ^[0-9]+$ \ && "$_package_status_checked_at" =~ ^[0-9]+$ \ && "$_package_status_pacman_log_signature" =~ ^[0-9]+:[0-9]+:[0-9]+$ \ && $_package_status_now -ge $_package_status_checked_at \ && $((_package_status_now - _package_status_checked_at)) -le $_package_status_max_age \ && "$_package_status_pacman_log_signature" == "$_package_status_current_pacman_log_signature" ]]; then _updates_available="0" _orphans_available="0" _package_status_attempt_time=$(stat -c %Y "$_package_status_attempt" 2>/dev/null || echo 0) if ! [[ "$_package_status_attempt_time" =~ ^[0-9]+$ \ && $_package_status_now -ge $_package_status_attempt_time \ && $((_package_status_now - _package_status_attempt_time)) -lt $_package_status_retry_delay ]]; then systemctl --user start --no-block package-status-refresh.service >/dev/null 2>&1 || true fi fi if declare -F _command_reminder >/dev/null 2>&1; then printf '%s\n' 'Remember commands:' printf '%b' "$_WHITE" _command_reminder printf '%b\n\n' "$_NC" fi if [[ ${_mem_available%.*} -lt 5 ]]; then printf 'Memory available: %b' "$_YELLOW" [[ ${_mem_available%.*} -lt 3 ]] && printf '%b' "$_RED" printf '%sGB%b\n' "$_mem_available" "$_NC" fi if [[ $_updates_available -gt 0 ]]; then update_color="$_BRIGHT_WHITE" if [[ $_updates_available -gt 29 ]]; then update_color="$_RED" elif [[ $_updates_available -gt 15 ]]; then update_color="$_YELLOW" fi printf 'Updates available: %b%s%b [ update with: %bupdate%b ]\n' \ "$update_color" "$_updates_available" "$_NC" "$update_color" "$_NC" fi if [[ $_orphans_available -gt 0 ]]; then orphan_color="$_BRIGHT_WHITE" if [[ $_orphans_available -gt 9 ]]; then orphan_color="$_RED" elif [[ $_orphans_available -gt 4 ]]; then orphan_color="$_YELLOW" fi printf 'Orphaned packages: %b%s%b [ remove with: %bsudo pacman -Rns $(pacman -Qdtq)%b ]\n' \ "$orphan_color" "$_orphans_available" "$_NC" "$orphan_color" "$_NC" fi printf '\nRemember "%bTODO.md%b" (%bet%b) and "%bautonote.md%b" (%bea%b) files have content automatically displayed.\n\n' \ "$_BLUE" "$_NC" "$_BLUE" "$_NC" "$_BLUE" "$_NC" "$_BLUE" "$_NC" unset _mem_available _updates_available _orphans_available update_color orphan_color unset _package_status_cache _package_status_attempt _package_status_max_age unset _package_status_retry_delay _package_status_attempt_time _package_status_version unset _package_status_checked_at _package_status_pacman_log_signature _package_status_now unset _package_status_current_pacman_log_signature _package_status_key _package_status_value