#!/bin/bash # Sample Slackware facts into a cache file, for widgets/slackware.lua. # # Conky's Lua has no lfs, so it cannot stat a file for an mtime, and counting # 2800 package files every two seconds would be a directory walk per draw. # Both belong here. set -u CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/udt" CACHE="$CACHE_DIR/slackware.txt" umask 077 mkdir -p "$CACHE_DIR" TMP="$CACHE.tmp.$$" trap 'rm -f "$TMP"' EXIT VERSION=$(cat /etc/slackware-version 2>/dev/null || echo unknown) # /var/log/packages is a symlink to /var/lib/pkgtools/packages. GNU ls follows # it either way, so the trailing slash is belt and braces rather than the load # bearing part; what would break this is adding -d, which lists the link itself # and reports one package. # # The real trap is `ls` being aliased: the user's shell aliases it to `ls -lh`, # and a long-format listing counts a "total" header line as a package. This # script is not interactive so aliases do not apply, but do not move this # counting into anything that is. PACKAGES=$(ls -1 /var/log/packages/ 2>/dev/null | wc -l) # Epochs, never formatted dates. The shell function this replaces rebuilds a # date string from `ls -l` output with the year hardcoded, which breaks every # January and on any file older than six months, when ls prints a year instead # of a time and the field offsets shift. CHANGELOG=$(stat -c %Y /var/lib/slackpkg/ChangeLog.txt 2>/dev/null || echo 0) # Filesystem birth time: the install date. Not every filesystem records it, # and those that do not report 0, which the widget shows as '--'. BIRTH=$(stat -c %W / 2>/dev/null || echo 0) KERNEL=$(uname -r) { echo "version $VERSION" echo "packages $PACKAGES" echo "changelog $CHANGELOG" echo "birth $BIRTH" echo "kernel $KERNEL" } > "$TMP" mv -f "$TMP" "$CACHE"