-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·120 lines (106 loc) · 3.28 KB
/
Copy pathinstall.sh
File metadata and controls
executable file
·120 lines (106 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env bash
# install.sh — Install synthdata skills into ~/.claude/skills/
#
# Usage:
# ./install.sh # Install all skills (symlink)
# ./install.sh --skill <skill-name> # Install a single skill
# ./install.sh --uninstall # Remove synthdata skills
# ./install.sh --copy # Copy instead of symlink
# ./install.sh --list # List available skills
#
# Skills directory: ~/.claude/skills/
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILLS_SRC="$SCRIPT_DIR/skills"
SKILLS_DST="${CLAUDE_SKILLS_DIR:-$HOME/.claude/skills}"
usage() {
cat <<EOF
Synthdata Plugin Installer
==========================
Usage:
$0 Install all skills (symlink)
$0 --copy Install all skills (copy)
$0 --skill <name> Install a single skill
$0 --uninstall Remove synthdata skills
$0 --list List available skills
$0 --help Show this help
Examples:
$0 Install all synthdata skills
$0 --skill synthdata-generate
$0 --uninstall
EOF
exit 0
}
list_skills() {
echo "Available skills:"
echo ""
for skill_dir in "$SKILLS_SRC"/*/; do
[ -d "$skill_dir" ] || continue
echo " - $(basename "$skill_dir")"
done
}
install_skills() {
local mode="$1" single_skill="$2"
if [ ! -d "$SKILLS_SRC" ]; then
echo "Error: No skills/ directory found."
exit 1
fi
mkdir -p "$SKILLS_DST"
local installed=0
for skill_dir in "$SKILLS_SRC"/*/; do
[ -d "$skill_dir" ] || continue
local skill_name="$(basename "$skill_dir")"
if [ -n "$single_skill" ] && [ "$skill_name" != "$single_skill" ]; then
continue
fi
local dst="$SKILLS_DST/$skill_name"
if [ -e "$dst" ]; then
echo " [skip] $skill_name (already exists)"
elif [ "$mode" = "copy" ]; then
cp -r "$skill_dir" "$dst"
echo " [copy] $skill_name -> $dst"
((installed++))
else
ln -s "$(cd "$skill_dir" && pwd)" "$dst"
echo " [link] $skill_name -> $dst"
((installed++))
fi
done
echo ""
echo "Done. $installed skill(s) installed."
}
uninstall_skills() {
local removed=0
for skill_dir in "$SKILLS_SRC"/*/; do
[ -d "$skill_dir" ] || continue
local skill_name="$(basename "$skill_dir")"
local dst="$SKILLS_DST/$skill_name"
if [ -L "$dst" ]; then
rm "$dst"; echo " [rm] $skill_name"; ((removed++))
elif [ -d "$dst" ]; then
rm -rf "$dst"; echo " [rm] $skill_name"; ((removed++))
fi
done
echo ""
echo "Done. $removed skill(s) removed."
}
MODE="symlink"; SINGLE_SKILL=""; ACTION="install"
while [ $# -gt 0 ]; do
case "$1" in
--list) list_skills; exit 0 ;;
--help|-h) usage ;;
--copy) MODE="copy"; shift ;;
--uninstall) ACTION="uninstall"; shift ;;
--skill) shift; SINGLE_SKILL="${1:-}"; shift ;;
-*) echo "Unknown option: $1"; usage ;;
*) echo "Unknown argument: $1"; usage ;;
esac
done
echo "Synthdata Plugin Installer"
echo "=========================="
echo "Target: $SKILLS_DST"
echo ""
case "$ACTION" in
install) install_skills "$MODE" "$SINGLE_SKILL" ;;
uninstall) uninstall_skills ;;
esac