From 95f57618b1e55b910d143fa6d188323a1cc4484f Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Fri, 22 May 2026 17:38:56 -0500 Subject: feat(make): add an interactive remove target with fzf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit make remove is the granular counterpart to make uninstall, which removes everything. remove.sh lists every rulesets-managed symlink under ~/.claude/ — only links whose target resolves into the repo, so foreign symlinks are left alone — pipes them through fzf --multi, and rm's the picked links. The repo's own files stay put, and make install re-creates anything removed. It's split into --list and --remove-selected modes so the logic is testable without fzf. 5 bats cases cover the listing, the foreign-link exclusion, removal, report-and-continue on a missing target, and the empty no-op. The removal loop runs without set -e and without rm -f, so a vanished target reports visibly and the rest still process. shellcheck clean, make test green. --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 44431dc..2ade6e1 100644 --- a/Makefile +++ b/Makefile @@ -75,7 +75,7 @@ $(if $(shell command -v pacman 2>/dev/null),sudo pacman -S --noconfirm $(1),\ $(error No supported package manager found (brew/apt-get/pacman))))) endef -.PHONY: help install uninstall list install-hooks uninstall-hooks \ +.PHONY: help install uninstall remove list install-hooks uninstall-hooks \ install-lang install-elisp install-python list-languages \ install-mcp diff lint doctor test deps @@ -290,6 +290,9 @@ uninstall: ## Remove global symlinks from ~/.claude/ @echo "" @echo "done" +remove: ## Interactively pick installed rulesets entries to remove (fzf) + @bash scripts/remove.sh + list: ## Show global install status @echo "Skills:" @for skill in $(SKILLS); do \ -- cgit v1.2.3