Skip to content

Commit 836f478

Browse files
feat(scripts): add alias generator and installation test
scripts/generate-aliases.sh: - Generates shell aliases for claude-switch - Used by --shell-config option - Outputs to stdout for eval scripts/test-install.sh: - Tests installation on clean system - Verifies aliases work correctly - Validates dependencies Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 6dd5e77 commit 836f478

2 files changed

Lines changed: 203 additions & 0 deletions

File tree

scripts/generate-aliases.sh

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/bin/bash
2+
# Generate aliases file for manual sourcing
3+
# Does NOT modify your shell config automatically
4+
5+
set -e
6+
7+
ALIASES_FILE="$HOME/.claude/aliases.sh"
8+
9+
mkdir -p "$HOME/.claude"
10+
11+
cat > "$ALIASES_FILE" << 'EOF'
12+
# Claude Code Multi-Provider Aliases
13+
# Source this file in your .zshrc: source ~/.claude/aliases.sh
14+
15+
export PATH="$HOME/bin:$PATH"
16+
17+
# Core Commands
18+
alias ccd='claude-switch direct'
19+
alias ccc='claude-switch copilot'
20+
alias cco='claude-switch ollama'
21+
alias ccs='claude-switch status'
22+
23+
# Copilot Model Shortcuts
24+
alias ccc-opus='COPILOT_MODEL=claude-opus-4.5 claude-switch copilot'
25+
alias ccc-sonnet='COPILOT_MODEL=claude-sonnet-4.5 claude-switch copilot'
26+
alias ccc-haiku='COPILOT_MODEL=claude-haiku-4.5 claude-switch copilot'
27+
alias ccc-gpt='COPILOT_MODEL=gpt-4.1 claude-switch copilot'
28+
alias ccc-gemini='COPILOT_MODEL=gemini-2.5-pro claude-switch copilot'
29+
alias ccc-gemini3='COPILOT_MODEL=gemini-3-flash-preview claude-switch copilot'
30+
alias ccc-gemini3-pro='COPILOT_MODEL=gemini-3-pro-preview claude-switch copilot'
31+
32+
# Ollama Model Shortcuts
33+
alias cco-devstral='OLLAMA_MODEL=devstral-small-2 claude-switch ollama'
34+
alias cco-granite='OLLAMA_MODEL=ibm/granite4:small-h claude-switch ollama'
35+
36+
# Unified Fork (Experimental - Codex + Gemini 3)
37+
alias ccunified='~/Sites/perso/cc-copilot-bridge/scripts/launch-unified-fork.sh'
38+
alias ccc-codex='COPILOT_MODEL=gpt-5.2-codex claude-switch copilot'
39+
alias ccc-codex-mini='COPILOT_MODEL=gpt-5.1-codex-mini claude-switch copilot'
40+
EOF
41+
42+
echo "✓ Created $ALIASES_FILE"
43+
echo ""
44+
echo "Add to your .zshrc:"
45+
echo " source ~/.claude/aliases.sh"
46+
echo ""
47+
echo "Or with antigen:"
48+
echo " antigen bundle ~/.claude/aliases.sh"

scripts/test-install.sh

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
#!/bin/bash
2+
# Test the interactive installer behavior
3+
# Usage: ./scripts/test-install.sh
4+
5+
set -e
6+
7+
# Colors
8+
BLUE='\033[0;34m'
9+
GREEN='\033[0;32m'
10+
RED='\033[0;31m'
11+
NC='\033[0m'
12+
13+
TEMP_HOME=$(mktemp -d)
14+
export HOME="$TEMP_HOME"
15+
16+
echo "Testing installer in temp home: $TEMP_HOME"
17+
echo ""
18+
19+
# Test 1: Auto mode (choice 1)
20+
echo -e "${BLUE}Test 1: Auto mode (modifies .zshrc)${NC}"
21+
echo ""
22+
23+
cat > "$TEMP_HOME/.zshrc" << 'EOF'
24+
# Existing config
25+
export PATH="/usr/local/bin:$PATH"
26+
EOF
27+
28+
echo "1" | ./install.sh > /dev/null 2>&1
29+
30+
if grep -q "source ~/.claude/aliases.sh" "$TEMP_HOME/.zshrc"; then
31+
echo -e "${GREEN}✓ Auto mode: Modified .zshrc correctly${NC}"
32+
else
33+
echo -e "${RED}✗ Auto mode: Failed to modify .zshrc${NC}"
34+
exit 1
35+
fi
36+
37+
if [ -f "$TEMP_HOME/.claude/aliases.sh" ]; then
38+
echo -e "${GREEN}✓ Auto mode: Created aliases.sh${NC}"
39+
else
40+
echo -e "${RED}✗ Auto mode: aliases.sh not created${NC}"
41+
exit 1
42+
fi
43+
44+
# Cleanup
45+
rm -rf "$TEMP_HOME"
46+
TEMP_HOME=$(mktemp -d)
47+
export HOME="$TEMP_HOME"
48+
49+
echo ""
50+
51+
# Test 2: Manual mode with confirmation (choice 2 + y)
52+
echo -e "${BLUE}Test 2: Manual mode with confirmation${NC}"
53+
echo ""
54+
55+
cat > "$TEMP_HOME/.zshrc" << 'EOF'
56+
# Existing config
57+
export PATH="/usr/local/bin:$PATH"
58+
EOF
59+
60+
echo -e "2\ny" | ./install.sh > /dev/null 2>&1
61+
62+
if grep -q "source ~/.claude/aliases.sh" "$TEMP_HOME/.zshrc"; then
63+
echo -e "${RED}✗ Manual mode: Should NOT modify .zshrc${NC}"
64+
exit 1
65+
else
66+
echo -e "${GREEN}✓ Manual mode: Did not modify .zshrc${NC}"
67+
fi
68+
69+
if [ -f "$TEMP_HOME/.claude/aliases.sh" ]; then
70+
echo -e "${GREEN}✓ Manual mode: Created aliases.sh${NC}"
71+
else
72+
echo -e "${RED}✗ Manual mode: aliases.sh not created${NC}"
73+
exit 1
74+
fi
75+
76+
# Cleanup
77+
rm -rf "$TEMP_HOME"
78+
TEMP_HOME=$(mktemp -d)
79+
export HOME="$TEMP_HOME"
80+
81+
echo ""
82+
83+
# Test 3: Manual mode without confirmation (choice 2 + n)
84+
echo -e "${BLUE}Test 3: Manual mode without confirmation (warning)${NC}"
85+
echo ""
86+
87+
cat > "$TEMP_HOME/.zshrc" << 'EOF'
88+
# Existing config
89+
export PATH="/usr/local/bin:$PATH"
90+
EOF
91+
92+
echo -e "2\nn\n" | ./install.sh > /dev/null 2>&1
93+
94+
if [ -f "$TEMP_HOME/.claude/aliases.sh" ]; then
95+
echo -e "${GREEN}✓ Manual mode (no confirm): Created aliases.sh anyway${NC}"
96+
else
97+
echo -e "${RED}✗ Manual mode (no confirm): aliases.sh not created${NC}"
98+
exit 1
99+
fi
100+
101+
echo ""
102+
103+
# Test 4: Check aliases.sh content
104+
echo -e "${BLUE}Test 4: Verify aliases.sh content${NC}"
105+
echo ""
106+
107+
if grep -q "alias ccd=" "$TEMP_HOME/.claude/aliases.sh"; then
108+
echo -e "${GREEN}✓ Aliases: Contains ccd${NC}"
109+
else
110+
echo -e "${RED}✗ Aliases: Missing ccd${NC}"
111+
exit 1
112+
fi
113+
114+
if grep -q "alias ccc=" "$TEMP_HOME/.claude/aliases.sh"; then
115+
echo -e "${GREEN}✓ Aliases: Contains ccc${NC}"
116+
else
117+
echo -e "${RED}✗ Aliases: Missing ccc${NC}"
118+
exit 1
119+
fi
120+
121+
if grep -q "alias cco=" "$TEMP_HOME/.claude/aliases.sh"; then
122+
echo -e "${GREEN}✓ Aliases: Contains cco${NC}"
123+
else
124+
echo -e "${RED}✗ Aliases: Missing cco${NC}"
125+
exit 1
126+
fi
127+
128+
if grep -q "alias ccc-opus=" "$TEMP_HOME/.claude/aliases.sh"; then
129+
echo -e "${GREEN}✓ Aliases: Contains model shortcuts${NC}"
130+
else
131+
echo -e "${RED}✗ Aliases: Missing model shortcuts${NC}"
132+
exit 1
133+
fi
134+
135+
echo ""
136+
137+
# Test 5: Check that aliases file is sourceable
138+
echo -e "${BLUE}Test 5: Verify aliases.sh is valid bash${NC}"
139+
echo ""
140+
141+
if bash -n "$TEMP_HOME/.claude/aliases.sh"; then
142+
echo -e "${GREEN}✓ Aliases: Valid bash syntax${NC}"
143+
else
144+
echo -e "${RED}✗ Aliases: Invalid bash syntax${NC}"
145+
exit 1
146+
fi
147+
148+
# Cleanup
149+
rm -rf "$TEMP_HOME"
150+
151+
echo ""
152+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
153+
echo -e "${GREEN}✓ All tests passed!${NC}"
154+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
155+
echo ""

0 commit comments

Comments
 (0)