diff options
| author | Craig Jennings <c@cjennings.net> | 2026-01-26 17:36:38 -0600 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-01-26 17:36:38 -0600 |
| commit | dada2f255daaa2fb493ec8c7d47e2a8123aea494 (patch) | |
| tree | 0c0eeb84bb7b6e66a2d7f41cdfd061b25f80cc14 /dotfiles/common/.local/bin/dab | |
| parent | d50e5955837788fc69b4d5bc74cb574b859ed31a (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-x | dotfiles/common/.local/bin/dab | 72 |
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 + |
