Compare commits

...

2 Commits

Author SHA1 Message Date
Jonas H
7d34751695 wezterm: fix broken package structure 2026-02-28 00:10:28 +01:00
Jonas H
4759dc4d5f dot-add: guard against dotfiles self-reference, clean empty dirs after move 2026-02-28 00:09:41 +01:00
3 changed files with 16 additions and 0 deletions

16
dot-add
View File

@@ -20,6 +20,8 @@ fi
PACKAGE="$1" PACKAGE="$1"
shift shift
MOVED_PARENTS=()
add_one() { add_one() {
local FILE local FILE
FILE="$(realpath "$1")" FILE="$(realpath "$1")"
@@ -34,17 +36,31 @@ add_one() {
return 1 return 1
fi fi
# Prevent adding files that are already inside the dotfiles repo
if [[ "$FILE" == "$DOTFILES_DIR/"* ]]; then
echo "Error: '$1' resolves into the dotfiles repo (via symlink?) — skipping" >&2
return 1
fi
local REL="${FILE#$HOME/}" local REL="${FILE#$HOME/}"
local DEST="$DOTFILES_DIR/$PACKAGE/$REL" local DEST="$DOTFILES_DIR/$PACKAGE/$REL"
mkdir -p "$(dirname "$DEST")" mkdir -p "$(dirname "$DEST")"
mv "$FILE" "$DEST" mv "$FILE" "$DEST"
echo "Moved: $FILE -> $DEST" echo "Moved: $FILE -> $DEST"
MOVED_PARENTS+=("$(dirname "$FILE")")
} }
for PATH_ARG in "$@"; do for PATH_ARG in "$@"; do
add_one "$PATH_ARG" add_one "$PATH_ARG"
done done
# Remove any empty source directories so stow can create clean symlinks
for dir in "${MOVED_PARENTS[@]}"; do
if [[ -d "$dir" && -z "$(ls -A "$dir")" ]]; then
rmdir "$dir"
fi
done
stow --dir="$DOTFILES_DIR" --target="$HOME" --restow "$PACKAGE" stow --dir="$DOTFILES_DIR" --target="$HOME" --restow "$PACKAGE"
echo "Stowed: $PACKAGE" echo "Stowed: $PACKAGE"