From dada2f255daaa2fb493ec8c7d47e2a8123aea494 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Mon, 26 Jan 2026 17:36:38 -0600 Subject: refactor(dotfiles): rename system/ to common/ and remove unused configs Rename dotfiles/system to dotfiles/common for clarity - indicates shared dotfiles used across all desktop environments (DWM, Hyprland). Removed config directories for uninstalled applications: - ghostty (using different terminal) - lf (using ranger instead) - mopidy (using mpd instead) - nitrogen (X11-only, obsolete for Wayland) - pychess (not installed) - JetBrains (not installed via archsetup) - youtube-dl (using yt-dlp with different config location) Kept audacious config for potential future use. Updated all references in archsetup, CLAUDE.md, todo.org, and validation.sh. Co-Authored-By: Claude Opus 4.5 --- dotfiles/common/.local/bin/dab | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 dotfiles/common/.local/bin/dab (limited to 'dotfiles/common/.local/bin/dab') diff --git a/dotfiles/common/.local/bin/dab b/dotfiles/common/.local/bin/dab new file mode 100755 index 0000000..e7d0fae --- /dev/null +++ b/dotfiles/common/.local/bin/dab @@ -0,0 +1,72 @@ +#!/bin/env bash +# dab - delete all but +# Craig Jennings +# deletes all files in current directory that are NOT of a specific extension + +# default switch values +recurse="" +del_dirs="" + +# help function +show_help() { + echo "Usage: $0 [extension] [OPTION]" + echo "Deletes all files that do not match the given extension from the current directory." + echo "" + echo "Options:" + echo "-r Delete files in directories recursively." + echo "-d Delete directories if they become empty after deletions." + echo "-h Display this help message and exit." + echo "" + echo "Example: $0 txt -r -d" + echo "This would delete all non-text files in the current directory and subdirectories. Any directories emptied by this process will also be deleted." + echo "" + echo "Note: Directories that were previously empty will remain untouched." +} + +# if help was requested, show it and exit +if [[ $1 = "-h" ]] || [[ $2 = "-h" ]] || [[ $3 = "-h" ]]; then + show_help + exit +fi + +# error if nothing or * was passed +if [[ -z $1 ]] || [[ $1 = "*" ]]; then + echo "ERROR: No file extension was provided or invalid extension ('*')." + show_help + exit +fi + +# identify rest of arguments +ext=$1 +if [[ $2 == *"-r"* ]] || [[ $3 == *"-r"* ]]; then + recurse="-R" +fi + +if [[ $2 == *"-d"* ]] || [[ $3 == *"-d"* ]]; then + del_dirs="true" +fi + +# Save empty directories into an array before deleting the files +empty_dirs=() +while IFS= read -r -d $'\0'; do + empty_dirs+=("$REPLY") +done < <(find . -type d -empty -print0) + +shopt -s globstar nullglob extglob + +# remove non-matching files +for file in **; do + if [[ -f "$file" ]] && [[ "$file" != *".$ext" ]]; then + rm "$file" + fi +done + +# remove directories emptied by this operation +if [[ $del_dirs == "true" ]]; then + for dir in **/; do + if [[ ! -n "$(ls -A $dir)" ]] && [[ ! "${empty_dirs[*]}" =~ $dir ]]; then + rmdir "$dir" + fi + done +fi + -- cgit v1.2.3