#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: gc gc -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message EOF } for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done while getopts 'h' flag; do case "$flag" in h) usage help exit ;; *) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) disk() { df -h . | awk 'NR == 2 { printf "%s - %s/%s\n", $4, $3, $2 }' } gc_guix() { pass show velhinho/0-andreh-password | sudo -S guix system delete-generations guix home delete-generations guix gc -d } gc_nohup() { find ~/ -type f -name 'nohup.out' -exec rm -vf "{}" \; } gc_trash() { yes | trash-empty } gc_tmpdir() { find /tmp/ -type f -atime +10 -exec rm -vf "{}" \; ||: } gc_docker() { if command -v docker; then yes | docker system prune -a docker rmi "$(docker images -a -q)" ||: docker rm "$(docker ps -a -f status=exited -q)" ||: docker stop "$(docker ps -a -q)" ||: docker rm "$(docker ps -a -q)" ||: yes | docker volume prune yes | docker container prune fi } gc_email() { notmuch search --output=files --exclude=false tag:killed | xargs -I{} rm -vf "{}" } BEFORE="$(disk)" gc_guix gc_nohup gc_trash gc_tmpdir gc_docker gc_email wait AFTER="$(disk)" printf 'Disk space:\n' printf ' before: %s\n' "$BEFORE" printf ' after: %s\n' "$AFTER"