From 01257ea68f3828d8f5c798c8f7bc3e07c14aca46 Mon Sep 17 00:00:00 2001 From: kj_sh604 Date: Sat, 17 Jan 2026 20:36:54 -0500 Subject: feat: add a paru/pacman clean-up script --- .local/bin/parucache-clean-up | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 .local/bin/parucache-clean-up (limited to '.local/bin/parucache-clean-up') diff --git a/.local/bin/parucache-clean-up b/.local/bin/parucache-clean-up new file mode 100755 index 0000000..ec96aa2 --- /dev/null +++ b/.local/bin/parucache-clean-up @@ -0,0 +1,119 @@ +#!/bin/sh + +script_name=$(basename "$0") + +show_help() { + cat <&2 + exit 130 +} + +trap handle_interrupt INT + +error_exit() { + printf "%s: error: %s\n" "$script_name" "$1" >&2 + exit 1 +} + +check_privilege() { + if [ "$(id -u)" -eq 0 ]; then + return 0 + fi + if ! command -v sudo >/dev/null 2>&1; then + error_exit "sudo is required but not found" + fi +} + +# run command with elevated privileges only if needed +run_privileged() { + if [ "$(id -u)" -eq 0 ]; then + "$@" + else + sudo "$@" + fi +} + +# clean pacman cache +clean_pacman_cache() { + printf "cleaning pacman cache...\n" + run_privileged paccache --remove --keep 0 || error_exit "failed to clean pacman cache" +} + +# clean paru cache +clean_aur_cache() { + cache_dir="$HOME/.cache/paru/clone" + + printf "cleaning paru cache...\n" + if [ -d "$cache_dir" ]; then + rm -rf "$cache_dir" || error_exit "failed to clean paru cache" + else + printf "warning: paru cache directory not found: %s\n" "$cache_dir" + fi + + printf "regenerating paru database...\n" + paru --gendb || error_exit "failed to regenerate paru database" +} + +# default values +clean_pacman=1 +clean_aur=1 + +# parse args +while [ $# -gt 0 ]; do + case "$1" in + -h|--help) + show_help + exit 0 + ;; + --only-pacman) + clean_aur=0 + ;; + --only-aur) + clean_pacman=0 + ;; + *) + printf "%s: error: unknown option: %s\n" "$script_name" "$1" >&2 + printf "try '%s --help' for more information\n" "$script_name" >&2 + exit 1 + ;; + esac + shift +done + +# checks +if [ "$clean_pacman" -eq 0 ] && [ "$clean_aur" -eq 0 ]; then + error_exit "cannot use --only-pacman and --only-aur together" +fi + +if [ "$clean_pacman" -eq 1 ]; then + command -v paccache >/dev/null 2>&1 || error_exit "paccache is required but not found (install pacman-contrib)" + check_privilege +fi + +if [ "$clean_aur" -eq 1 ]; then + command -v paru >/dev/null 2>&1 || error_exit "paru is required but not found" +fi + +# clean relevant caches +[ "$clean_pacman" -eq 1 ] && clean_pacman_cache +[ "$clean_aur" -eq 1 ] && clean_aur_cache + +printf "cleanup complete!\n" \ No newline at end of file -- cgit v1.2.3