refactor(use-skills): simplify execution flow
- Add set -euo pipefail for safer defaults - Remove conditional directory logic - always create both - Remove undocumented SKILLS_CLAUDE/SKILLS_OPENCODE env vars - Add fail-fast error handling throughout - Capture nix build stderr for better error messages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
e921fd96df
commit
ec5386cf57
|
|
@ -3,17 +3,16 @@
|
|||
# Source this from your .envrc or copy the functions
|
||||
#
|
||||
# Usage in .envrc:
|
||||
# source /path/to/skills/bin/use-skills.sh
|
||||
# source ~/proj/skills/bin/use-skills.sh
|
||||
# use_skills worklog web-search
|
||||
#
|
||||
# Or without sourcing (copy-paste into .envrc):
|
||||
# SKILLS_REPO="git+ssh://git@forgejo.example/dan/skills.git"
|
||||
# use_skill() { ... }
|
||||
# use_skill worklog
|
||||
# Or with manifest file:
|
||||
# source ~/proj/skills/bin/use-skills.sh
|
||||
# load_skills_from_manifest
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Default repo - uses local git, override with SKILLS_REPO for remote
|
||||
# Local: git+file:///home/dan/proj/skills (default, works offline)
|
||||
# Network: git+http://192.168.1.108:3000/dan/skills.git
|
||||
SKILLS_REPO="${SKILLS_REPO:-git+file://$HOME/proj/skills}"
|
||||
|
||||
# Install a single skill via nix build + symlink
|
||||
|
|
@ -21,48 +20,34 @@ use_skill() {
|
|||
local skill="$1"
|
||||
local out
|
||||
|
||||
out=$(nix build --print-out-paths --no-link "${SKILLS_REPO}#${skill}" 2>/dev/null)
|
||||
if [[ -z "$out" ]]; then
|
||||
out=$(nix build --print-out-paths --no-link "${SKILLS_REPO}#${skill}" 2>&1) || {
|
||||
echo "use_skill: failed to build ${skill}" >&2
|
||||
echo "$out" >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Claude Code
|
||||
if [[ -d .claude ]] || [[ -n "${SKILLS_CLAUDE:-}" ]]; then
|
||||
mkdir -p .claude/skills
|
||||
ln -sfn "$out" ".claude/skills/${skill}"
|
||||
fi
|
||||
|
||||
# OpenCode
|
||||
if [[ -d .opencode ]] || [[ -n "${SKILLS_OPENCODE:-}" ]]; then
|
||||
mkdir -p .opencode/skills
|
||||
ln -sfn "$out" ".opencode/skills/${skill}"
|
||||
fi
|
||||
|
||||
echo "use_skill: ${skill} -> ${out}"
|
||||
mkdir -p .claude/skills .opencode/skills
|
||||
ln -sfn "$out" ".claude/skills/${skill}"
|
||||
ln -sfn "$out" ".opencode/skills/${skill}"
|
||||
echo "use_skill: ${skill}"
|
||||
}
|
||||
|
||||
# Install multiple skills
|
||||
use_skills() {
|
||||
# Ensure at least one target exists
|
||||
mkdir -p .claude/skills .opencode/skills
|
||||
|
||||
for skill in "$@"; do
|
||||
use_skill "$skill"
|
||||
use_skill "$skill" || return 1
|
||||
done
|
||||
}
|
||||
|
||||
# Load skills from .skills manifest file
|
||||
load_skills_from_manifest() {
|
||||
[[ ! -f .skills ]] && return 0
|
||||
mkdir -p .claude/skills .opencode/skills
|
||||
|
||||
while IFS= read -r skill || [[ -n "$skill" ]]; do
|
||||
# Skip empty lines and comments
|
||||
[[ -z "$skill" || "$skill" =~ ^[[:space:]]*# ]] && continue
|
||||
# Strip inline comments and whitespace
|
||||
skill="${skill%%#*}"
|
||||
skill="${skill// /}"
|
||||
[[ -n "$skill" ]] && use_skill "$skill"
|
||||
[[ -n "$skill" ]] && { use_skill "$skill" || return 1; }
|
||||
done < .skills
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue