summaryrefslogtreecommitdiff
path: root/dotfiles/common/.local/bin/dab
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-01-26 17:36:38 -0600
committerCraig Jennings <c@cjennings.net>2026-01-26 17:36:38 -0600
commitdada2f255daaa2fb493ec8c7d47e2a8123aea494 (patch)
tree0c0eeb84bb7b6e66a2d7f41cdfd061b25f80cc14 /dotfiles/common/.local/bin/dab
parentd50e5955837788fc69b4d5bc74cb574b859ed31a (diff)
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 <noreply@anthropic.com>
Diffstat (limited to 'dotfiles/common/.local/bin/dab')
-rwxr-xr-xdotfiles/common/.local/bin/dab72
1 files changed, 72 insertions, 0 deletions
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 <c@cjennings.net>
+# 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
+