aboutsummaryrefslogtreecommitdiffstats
path: root/bin/cache-sample.sh
blob: cac8911391d59299d1c46998da2d6c3c56e98a7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
# Sample ~/.cache sizes into a cache file, for widgets/cache.lua.
#
# du walks the tree and costs about 100ms warm, which is fine every 15 minutes
# and unthinkable on a 2-second draw. The old conky config used the same
# interval for the same reason.

set -u

CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/udt"
CACHE="$CACHE_DIR/cachesize.txt"
TARGET="${XDG_CACHE_HOME:-$HOME/.cache}"

mkdir -p "$CACHE_DIR"

TMP="$CACHE.tmp.$$"
trap 'rm -f "$TMP"' EXIT
umask 077

# Total first, then the four largest children. `sort -h` compares human sizes
# numerically; the Lua side converts them again because it needs the ratio to
# the total, not just the order.
{
    du -sh "$TARGET" 2>/dev/null
    du -sh "$TARGET"/* 2>/dev/null | sort -hr | head -4
} > "$TMP"

if [ ! -s "$TMP" ]; then
    echo "cache-sample: du produced nothing" >&2
    exit 1
fi

mv -f "$TMP" "$CACHE"