add dot-remove
This commit is contained in:
45
dot-remove
Executable file
45
dot-remove
Executable file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# dot-remove: Unstow a package and move its files back to their original locations.
|
||||||
|
#
|
||||||
|
# Usage: dot-remove <package>
|
||||||
|
#
|
||||||
|
# Example: dot-remove oh-my-zsh
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
DOTFILES_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
|
||||||
|
if [[ $# -ne 1 ]]; then
|
||||||
|
echo "Usage: dot-remove <package>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PACKAGE="$1"
|
||||||
|
PACKAGE_DIR="$DOTFILES_DIR/$PACKAGE"
|
||||||
|
|
||||||
|
if [[ ! -d "$PACKAGE_DIR" ]]; then
|
||||||
|
echo "Error: package '$PACKAGE' not found in $DOTFILES_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove symlinks first
|
||||||
|
stow --dir="$DOTFILES_DIR" --target="$HOME" --delete "$PACKAGE"
|
||||||
|
echo "Unstowed: $PACKAGE"
|
||||||
|
|
||||||
|
# Move files back to their original locations
|
||||||
|
while IFS= read -r -d '' FILE; do
|
||||||
|
REL="${FILE#$PACKAGE_DIR/}"
|
||||||
|
DEST="$HOME/$REL"
|
||||||
|
mkdir -p "$(dirname "$DEST")"
|
||||||
|
mv "$FILE" "$DEST"
|
||||||
|
echo "Restored: $DEST"
|
||||||
|
done < <(find "$PACKAGE_DIR" -type f -print0)
|
||||||
|
|
||||||
|
# Remove now-empty package directory
|
||||||
|
rm -rf "$PACKAGE_DIR"
|
||||||
|
echo "Removed: $PACKAGE_DIR"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo " cd ~/dotfiles"
|
||||||
|
echo " git rm -r $PACKAGE"
|
||||||
|
echo " git commit -m 'remove $PACKAGE'"
|
||||||
Reference in New Issue
Block a user