#!/usr/bin/env bash # Claude Arabic Terminal — one-shot installer for macOS / Linux. # curl -fsSL https://raw.githubusercontent.com/JamalMohafil/claude-arabic-terminal/main/install.sh | bash set -euo pipefail REPO="https://github.com/JamalMohafil/claude-arabic-terminal.git" DIR="${CLAUDE_ARABIC_DIR:-$HOME/.claude-arabic-terminal}" EXT_DIR="$HOME/.vscode/extensions" BIN_DIR="$HOME/.local/bin" say() { printf '\033[1;36m▸\033[0m %s\n' "$*"; } ok() { printf '\033[1;32m✓\033[0m %s\n' "$*"; } fail() { printf '\033[1;31m✗\033[0m %s\n' "$*" >&2; exit 1; } # --- prerequisites --------------------------------------------------------- command -v git >/dev/null || fail "git is required." command -v node >/dev/null || fail "Node.js 18+ is required (https://nodejs.org)." command -v npm >/dev/null || fail "npm is required (comes with Node.js)." command -v claude >/dev/null || [ -x "$HOME/.local/bin/claude" ] || fail "Claude Code CLI not found. Install it first: https://docs.anthropic.com/claude-code" [ -d "$EXT_DIR" ] || fail "VS Code extensions folder not found at $EXT_DIR — is VS Code installed?" NODE_MAJOR=$(node -p 'process.versions.node.split(".")[0]') [ "$NODE_MAJOR" -ge 18 ] || fail "Node.js 18+ required (found $(node -v))." # --- fetch / update -------------------------------------------------------- if [ -d "$DIR/.git" ]; then say "Updating existing install in $DIR" git -C "$DIR" pull --ff-only --quiet else say "Cloning into $DIR" git clone --quiet --depth 1 "$REPO" "$DIR" fi # --- dependencies ---------------------------------------------------------- say "Installing dependencies (node-pty, @xterm/headless)" ( cd "$DIR" && npm install --omit=dev --no-audit --no-fund --loglevel=error ) chmod +x "$DIR"/node_modules/node-pty/prebuilds/*/spawn-helper 2>/dev/null || true chmod +x "$DIR/bin/arabic" # --- register the VS Code extension --------------------------------------- VERSION=$(node -p "require('$DIR/package.json').version") rm -rf "$EXT_DIR"/jamal.claude-arabic-terminal-* ln -sfn "$DIR" "$EXT_DIR/jamal.claude-arabic-terminal-$VERSION" ok "Extension linked: $EXT_DIR/jamal.claude-arabic-terminal-$VERSION" # --- the `arabic` launcher ------------------------------------------------- mkdir -p "$BIN_DIR" ln -sf "$DIR/bin/arabic" "$BIN_DIR/arabic" ok "Launcher installed: $BIN_DIR/arabic" case ":$PATH:" in *":$BIN_DIR:"*) ;; *) for rc in "$HOME/.zshrc" "$HOME/.bashrc"; do [ -f "$rc" ] && ! grep -q '\.local/bin' "$rc" && printf '\nexport PATH="$HOME/.local/bin:$PATH"\n' >> "$rc" done say "Added ~/.local/bin to your PATH (open a new terminal for it to take effect)." ;; esac cat <