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