#!/bin/bash # Clean up files according to given parameters typeset -A _clean_map _clean_map=([h]=$XDG_CACHE_HOME [t]=/var/tmp [l]=/var/log [v]=/var/cache) _clean_home=(.ant .autopsy .bundle .cache .cargo .cpanm .docker .electron .electron-gyp .gradle .gradle-kotlin-dsl .hex .java .kscript .konan .m2 .mix .nix-defexpr .node-gyp .node_modules .npm .pnpm-store .nv .openjfx .parallel .stack .surf .texlive .yarn luametatex-cache .lesshst .python_history .rubberband.wisdom.d .yarnrc) [[ $1 =~ "." ]] && local=pwd [[ $1 =~ "i" ]] && i=-i dir="$("$local" 2>/dev/null || echo "$HOME")" df --output="source,avail" -h $(test -n "$local" && echo ".") "$dir" highlight "cleaning home" for f in ${_clean_home[@]} do file="$dir/$f" test -f "$file" || test -d "$file" && echo "Removing superfluous $file" && rm -rf $i "$file" done find "$dir" -maxdepth 2 -not -name ".stfolder" -empty -printf "Removing empty %p\n" -delete find -L -maxdepth 2 -type l -printf "Removing broken symlink %p\n" -delete 2>/dev/null highlight "y :: recursively remove empty folders and files" [[ $1 =~ "y" ]] && find \( -name ".stfolder" -o -name ".*keep" -o -name ".git" \) -prune -o -empty -printf "Removing empty %p\n" -exec rm -d {} + highlight "e :: remove downloaded emacs packages (rebuild takes minutes!)" [[ $1 =~ "e" ]] && find $DOOMLOCALDIR -maxdepth 1 \( -name straight -o -type f \) -printf "Removing %p\n" -exec rm -rf {} + for k in "${!_clean_map[@]}"; do folder="${_clean_map[$k]}" highlight "$k :: delete $folder" [[ $1 =~ "$k" ]] && (test "$k" = "l" && sudo find "$folder" -type f -delete || sudo rm $i -rf "$folder") && echo "Deleted $folder" done highlight "s :: recursively remove logs" [[ $1 =~ "s" ]] && find \( -name ".git" -o -name "src" -o -name "pkg" \) -prune -o \ \( \( -name "logs" -o -name "log" -o -name "crash-reports" -o -name ".auctex-auto" \) -prune -o \ -type f \( -name "*.log.gz" -o -name "*.log.[0-9]" -o -iname "*.log" -o -name "*.tuc" -o -name "*.tua" \) \) \ -print -exec rm -rI {} + highlight "m :: recursively remove mac-files" if [[ $1 =~ "m" ]]; then find -name '__MACOSX' -print -exec rm -r {} + find -iname '.spotlight*' -print -exec rm -rI {} + find -name '*.DS_Store' -delete fi highlight "d :: recursively remove development caches" if [[ $1 =~ "d" ]]; then find -maxdepth 1 \( -name "*.aux" -o -name "*.log" -o -name "*.t[uo]c" -o -name "*.out" \) -print -delete find -name "src" -prune -o \ -type d \( -name 'cache' $(echo $DIRS_GENERATED | sed 's|-x \([^ ]\+\)|-o -name \1|g') \) \ -print -exec rm $i -r {} + -prune echo -n " " && highlight "build directories" find \( -name ".git" -o -path "*/mixxx/build" -o -name "app" -o -name "Leaflet" -o -name "www" -o -name "src" \) \ -prune -o -name "build" -type d \ -print -exec rm -rI {} + -prune # TODO consider gitignore / use git clean fi highlight "g :: clean gradle caches" if [[ $1 =~ "g" ]]; then find "${GRADLE_USER_HOME:-$HOME/.gradle}" -mindepth 1 -maxdepth 1 -type d -print -exec rm $i -r {} + find $PROJECTS -name .gradle -print -exec rm $i -r {} + fi highlight "c :: clean electron caches" [[ $1 =~ "c" ]] && find "$dir$(expr "${XDG_CONFIG_HOME/$HOME}" \| "/.config")" \ -type d -name "*Cache*" -print -exec rm $i -r {} + -prune if test -f "/var/log/apt/history.log"; then aptclean_cur=$(cat "/var/log/apt/history.log" | wc -l) test "$aptclean_cur" -gt "${aptclean_last:--1}" && sudo apt-get clean && sudo apt-get autoremove && echo "Cleaned apt" export aptclean_last=$aptclean_cur fi highlight "o :: optimize space extensively" if [[ $1 =~ "o" ]]; then sudo rm -rf "$XDG_DATA_HOME/baloo" docker image prune which yay &>/dev/null && yay -Sc --noconfirm nix-collect-garbage -d nix-store --optimize fi df --output="source,avail" -h $(test -n "$local" && echo ".") "$dir"