Makefile

 1SKILL_DIR ?= $(HOME)/.config/crush/skills
 2SKILLS := $(patsubst skills/%/,%,$(wildcard skills/*/))
 3
 4UNINSTALL_TARGETS := $(addprefix uninstall-,$(SKILLS))
 5
 6.PHONY: list all uninstall $(SKILLS) $(UNINSTALL_TARGETS)
 7
 8list:
 9	@echo "Available skills:"
10	@printf "  %s\n" $(SKILLS)
11	@echo ""
12	@echo "Install with: make <skill-name> [SKILL_DIR=path]"
13	@echo "Default target: $(SKILL_DIR)"
14
15all: $(SKILLS)
16
17$(SKILLS):
18	@mkdir -p "$(SKILL_DIR)"
19	@ln -sfn "$(CURDIR)/skills/$@" "$(SKILL_DIR)/$@"
20	@echo "Installed $@$(SKILL_DIR)/$@"
21
22$(UNINSTALL_TARGETS):
23	$(eval SKILL := $(patsubst uninstall-%,%,$@))
24	@if [ -e "$(SKILL_DIR)/$(SKILL)" ]; then \
25		rm -f "$(SKILL_DIR)/$(SKILL)"; \
26		echo "Uninstalled $(SKILL) from $(SKILL_DIR)"; \
27	else \
28		echo "Warning: $(SKILL) not found in $(SKILL_DIR)" >&2; \
29	fi
30
31uninstall:
32	@for skill in $(SKILLS); do \
33		if [ -e "$(SKILL_DIR)/$$skill" ]; then \
34			rm -f "$(SKILL_DIR)/$$skill"; \
35			echo "Uninstalled $$skill from $(SKILL_DIR)"; \
36		fi; \
37	done