2026-04-26 22:30:25 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
#
|
|
|
|
|
# install.sh: Set up Claude Code on Termux
|
|
|
|
|
#
|
|
|
|
|
# Usage: bash install.sh [--dry-run]
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
RED="\033[0;31m"
|
|
|
|
|
GREEN="\033[0;32m"
|
|
|
|
|
YELLOW="\033[1;33m"
|
|
|
|
|
CYAN="\033[0;36m"
|
|
|
|
|
NC="\033[0m"
|
|
|
|
|
|
|
|
|
|
DRY_RUN=false
|
|
|
|
|
[[ "$1" == "--dry-run" ]] && DRY_RUN=true
|
|
|
|
|
|
|
|
|
|
CLAUDE_VERSION="2.1.112"
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
|
BIN_DIR="$HOME/.local/bin"
|
|
|
|
|
|
|
|
|
|
step() { echo -e "\n${CYAN}[$1/$TOTAL] $2${NC}"; }
|
|
|
|
|
run() {
|
|
|
|
|
if $DRY_RUN; then
|
|
|
|
|
echo -e " ${YELLOW}[dry-run]${NC} $*"
|
|
|
|
|
else
|
|
|
|
|
"$@"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Verify we're on Termux
|
|
|
|
|
if [[ -z "$PREFIX" || ! -d "$PREFIX" ]]; then
|
|
|
|
|
echo -e "${RED}Error: Not running on Termux${NC}"
|
|
|
|
|
echo "This installer is designed for Termux on Android."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
2026-06-16 12:58:57 +00:00
|
|
|
TOTAL=9
|
2026-04-26 22:30:25 +00:00
|
|
|
echo -e "${GREEN}=== Claude Code for Termux - Installer ===${NC}"
|
|
|
|
|
echo "Version ceiling: v$CLAUDE_VERSION"
|
|
|
|
|
$DRY_RUN && echo -e "${YELLOW}(dry-run mode - no changes will be made)${NC}"
|
|
|
|
|
|
|
|
|
|
# 1. Install system packages
|
|
|
|
|
step 1 "Installing system packages..."
|
|
|
|
|
run pkg install -y nodejs python git proot
|
|
|
|
|
|
|
|
|
|
# 2. Install Claude Code
|
|
|
|
|
step 2 "Installing Claude Code v$CLAUDE_VERSION..."
|
|
|
|
|
run npm install -g "@anthropic-ai/claude-code@$CLAUDE_VERSION"
|
|
|
|
|
|
|
|
|
|
# 3. Protect against auto-updater
|
|
|
|
|
step 3 "Protecting against auto-updater..."
|
|
|
|
|
CLAUDE_DIR="$PREFIX/lib/node_modules/@anthropic-ai/claude-code"
|
|
|
|
|
if [[ -d "$CLAUDE_DIR" ]]; then
|
|
|
|
|
run chmod -R a-w "$CLAUDE_DIR"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 4. Install scripts
|
|
|
|
|
step 4 "Installing scripts to $BIN_DIR..."
|
|
|
|
|
run mkdir -p "$BIN_DIR"
|
2026-06-16 12:58:57 +00:00
|
|
|
for script in clauded claude-check-env claude-update mdns-resolve mdns-publish.py ssh-mdns-proxy ssh-fallback; do
|
2026-04-26 22:30:25 +00:00
|
|
|
run cp "$SCRIPT_DIR/bin/$script" "$BIN_DIR/$script"
|
|
|
|
|
run chmod +x "$BIN_DIR/$script"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# 5. Claude settings
|
|
|
|
|
step 5 "Configuring Claude settings..."
|
|
|
|
|
run mkdir -p "$HOME/.claude"
|
|
|
|
|
if [[ ! -f "$HOME/.claude/settings.json" ]]; then
|
|
|
|
|
run cp "$SCRIPT_DIR/config/settings.json" "$HOME/.claude/settings.json"
|
|
|
|
|
else
|
|
|
|
|
echo " ~/.claude/settings.json already exists, skipping"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 6. Bashrc additions
|
|
|
|
|
step 6 "Updating ~/.bashrc..."
|
|
|
|
|
if ! grep -q "DISABLE_AUTOUPDATER" "$HOME/.bashrc" 2>/dev/null; then
|
|
|
|
|
if ! $DRY_RUN; then
|
|
|
|
|
echo "" >> "$HOME/.bashrc"
|
|
|
|
|
cat "$SCRIPT_DIR/config/bashrc.snippet" >> "$HOME/.bashrc"
|
|
|
|
|
fi
|
|
|
|
|
echo " Added Claude-related exports to ~/.bashrc"
|
|
|
|
|
else
|
|
|
|
|
echo " ~/.bashrc already configured, skipping"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 7. Install sharp-wasm32 (image support)
|
|
|
|
|
step 7 "Installing Sharp WASM (image support)..."
|
|
|
|
|
run npm install -g @img/sharp-wasm32 sharp --force 2>/dev/null || {
|
|
|
|
|
echo -e " ${YELLOW}Sharp install failed (optional, images won't work)${NC}"
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-16 12:58:57 +00:00
|
|
|
# 8. Install zeroconf for mDNS publisher (needed by mdns-publish.py)
|
|
|
|
|
step 8 "Installing zeroconf (pip) for mDNS publishing..."
|
|
|
|
|
run pip install --quiet zeroconf 2>/dev/null || {
|
|
|
|
|
echo -e " ${YELLOW}zeroconf install failed (optional, mdns-publish won't work)${NC}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 9. Done
|
|
|
|
|
step 9 "Verifying installation..."
|
2026-04-26 22:30:25 +00:00
|
|
|
if ! $DRY_RUN; then
|
|
|
|
|
echo ""
|
|
|
|
|
"$BIN_DIR/claude-check-env"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo -e "${GREEN}=== Installation Complete ===${NC}"
|
|
|
|
|
echo ""
|
|
|
|
|
echo "Next steps:"
|
|
|
|
|
echo " 1. Restart your shell: source ~/.bashrc"
|
|
|
|
|
echo " 2. Authenticate: claude auth"
|
|
|
|
|
echo " 3. Start Claude: clauded"
|
|
|
|
|
echo ""
|
|
|
|
|
echo "See docs/TROUBLESHOOTING.md for common issues."
|