nix-configs

Personal NixOS and home-manager configuration files
Log | Files | Refs

commit 385b665343df31ec1bad53fb1ce2ff2bc0281dfa
parent 3a20364f61d5d29d7c42c2b8405c69461b1fcf03
Author: Peter <peter@minskio.co.uk>
Date:   Wed, 30 Sep 2026 22:14:06 +0100

Buff up my old average-relative script

Lemme update this https://minskio.co.uk/calculating-relative-average-subdirectory-filesizes/ while I'm at it

Diffstat:
Mmachines/ilias.nix | 1+
Ascripts/average-relative.nix | 25+++++++++++++++++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/machines/ilias.nix b/machines/ilias.nix @@ -30,6 +30,7 @@ ../common/user.nix ../common/zerotier.nix ../scripts/audiobook-cleaner.nix + ../scripts/average-relative.nix ../scripts/backup-local.nix ../scripts/blog-music.nix ../scripts/blog-sort-archives.nix diff --git a/scripts/average-relative.nix b/scripts/average-relative.nix @@ -0,0 +1,25 @@ +{ pkgs, ... }: + +let + average-relative = pkgs.writeShellScriptBin "av`erage-relative" '' + dir="${1:-.}" + if [[ ! -d "$dir" ]]; then + echo "Not a directory: $dir" >&2 + exit 1 + fi + shopt -s nullglob + for i in "$dir"/*/; do + i="${i%/}" + size=$(du -sk "$i" | awk '{print $1}') + count=$(find "$i" -type f -size +1M | wc -l) + (( count == 0 )) && continue + echo "$((size / count)) $count $size ''${i##*/}" + done | sort -nr | numfmt -d ' ' --field=1,3 --from-unit=1024 --to=iec --suffix=B | + while read -r avg count total name; do + printf '%8s %7s %8s %s\n' "$avg" "$count" "$total" "$name" + done + ''; +in +{ + environment.systemPackages = [ average-relative ]; +}