diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-17 12:20:39 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-17 12:20:39 +0200 |
| commit | 9a479e198142a486413270c0e5dec8ed4405e023 (patch) | |
| tree | 3d6a8e8282a44516af0d358b29a290e4467942d4 /bin/disks-sample.sh | |
| parent | 518b2969108ed3d728e562614c05e40400129240 (diff) | |
| download | conky-theme-udt-9a479e198142a486413270c0e5dec8ed4405e023.tar.gz conky-theme-udt-9a479e198142a486413270c0e5dec8ed4405e023.zip | |
feat: add the disks and cache samplers
Diffstat (limited to 'bin/disks-sample.sh')
| -rwxr-xr-x | bin/disks-sample.sh | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/bin/disks-sample.sh b/bin/disks-sample.sh new file mode 100755 index 0000000..83b8a62 --- /dev/null +++ b/bin/disks-sample.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Sample filesystem usage into a cache file, for widgets/disks.lua. +# +# This exists so the draw hook never calls statfs on an NFS path. An +# unreachable server blocks that call, and blocking the Cairo draw freezes the +# whole dashboard; here it costs a stale cache and nothing else. +# +# One NFS mount per server: Library and Slackware are the same export on one +# server, shared and backup_danix the same on another, so showing all four +# printed every number twice. + +set -u + +CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/udt" +CACHE="$CACHE_DIR/disks.txt" + +MOUNTS=(/ /home /data /mnt/nfs/Library /mnt/nfs/shared) + +mkdir -p "$CACHE_DIR" + +TMP="$CACHE.tmp.$$" +trap 'rm -f "$TMP"' EXIT +umask 077 + +# /usr/bin/df by absolute path with -P -B1, deliberately: +# - the user's shell aliases df to `df -h`, and an alias or a function would +# hand the parser '1.6G' where it expects an integer +# - -P is the POSIX format, one line per filesystem, mountpoint last +# - -B1 is bytes, so the widget does the formatting and the parser never +# has to interpret a suffix +if ! /usr/bin/df -P -B1 "${MOUNTS[@]}" > "$TMP" 2>/dev/null; then + # A single unreachable mount must not discard the others: df still reports + # the ones it could stat, so keep the output if it has any data rows. + if [ "$(wc -l < "$TMP")" -lt 2 ]; then + echo "disks-sample: df produced nothing usable" >&2 + exit 1 + fi +fi + +mv -f "$TMP" "$CACHE" |
