diff options
| author | Craig Jennings <c@cjennings.net> | 2026-04-19 11:57:23 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-04-19 11:57:23 -0500 |
| commit | 18fcaf9f27d03849487078b30f667c3b574e6554 (patch) | |
| tree | 67e3ede717fbf9fbfe10c46042451e15abeeb91f /Makefile | |
| parent | f8c593791ae051b07dba2606c18f1deb7589825e (diff) | |
| download | rulesets-18fcaf9f27d03849487078b30f667c3b574e6554.tar.gz rulesets-18fcaf9f27d03849487078b30f667c3b574e6554.zip | |
feat: add per-project language bundles + elisp ruleset
Introduces a second install mode alongside the existing global symlinks:
per-project language bundles that copy a language-specific Claude Code
setup (rules, hooks, settings, pre-commit) into a target project.
Layout additions:
languages/elisp/ - Emacs Lisp bundle (rules, hooks, settings, CLAUDE.md)
scripts/install-lang.sh - shared install logic
Makefile additions:
make help - unified help text
make install-lang LANG=<lang> PROJECT=<path> [FORCE=1]
make install-elisp PROJECT=<path> [FORCE=1] (shortcut)
make list-languages - show available bundles
Elisp bundle contents:
- CLAUDE.md template (seed on first install, preserved on update)
- .claude/rules/elisp.md, elisp-testing.md, verification.md
- .claude/hooks/validate-el.sh (check-parens, byte-compile, run matching tests)
- .claude/settings.json (permission allowlist, hook wiring)
- githooks/pre-commit (secret scan + staged-file paren check)
- gitignore-add.txt (append .claude/settings.local.json)
Hooks use \$CLAUDE_PROJECT_DIR with a script-relative fallback, so the
same bundle works on any machine or clone path. Install activates git
hooks via core.hooksPath=githooks automatically. Re-running install is
idempotent; CLAUDE.md is never overwritten without FORCE=1.
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 35 |
1 files changed, 34 insertions, 1 deletions
@@ -2,8 +2,27 @@ SKILLS_DIR := $(HOME)/.claude/skills RULES_DIR := $(HOME)/.claude/rules SKILLS := c4-analyze c4-diagram debug add-tests respond-to-review review-pr fix-issue security-check RULES := $(wildcard claude-rules/*.md) +LANGUAGES := $(notdir $(wildcard languages/*)) -.PHONY: install uninstall list +.PHONY: help install uninstall list \ + install-lang list-languages install-elisp + +help: + @echo "rulesets — Claude Code skills, rules, and language bundles" + @echo "" + @echo " Global install (symlinks into ~/.claude/):" + @echo " make install - Install skills and rules globally" + @echo " make uninstall - Remove the symlinks" + @echo " make list - Show install status" + @echo "" + @echo " Per-project language rulesets:" + @echo " make install-lang LANG=<lang> PROJECT=<path> [FORCE=1]" + @echo " make install-elisp PROJECT=<path> [FORCE=1] (shortcut)" + @echo " make list-languages - Show available language bundles" + @echo "" + @echo " FORCE=1 overwrites an existing CLAUDE.md (other files always overwrite)." + @echo "" + @echo "Available languages: $(LANGUAGES)" install: @mkdir -p $(SKILLS_DIR) $(RULES_DIR) @@ -77,3 +96,17 @@ list: echo " - $$name"; \ fi \ done + +# --- Per-project language rulesets --- + +list-languages: + @echo "Available language rulesets (languages/):" + @for lang in $(LANGUAGES); do echo " - $$lang"; done + +install-lang: + @test -n "$(LANG)" || { echo "ERROR: set LANG=<language> (try: make list-languages)"; exit 1; } + @test -n "$(PROJECT)" || { echo "ERROR: set PROJECT=<path>"; exit 1; } + @bash scripts/install-lang.sh "$(LANG)" "$(PROJECT)" "$(FORCE)" + +install-elisp: + @$(MAKE) install-lang LANG=elisp PROJECT="$(PROJECT)" FORCE="$(FORCE)" |
