feat: support custom copilot openclaw install paths

This commit is contained in:
Matt Bruce 2026-02-19 13:48:50 -06:00
parent a6e4823188
commit e0ef96e753
4 changed files with 132 additions and 3 deletions

View File

@ -73,6 +73,21 @@ bash ./scripts/finalize_copilot_setup.sh
openclaw status --deep openclaw status --deep
``` ```
Optional custom install locations:
```bash
# Move OpenClaw runtime data (~/.openclaw) to another path
OPENCLAW_DATA_TARGET=/Volumes/Data/openclaw-copilot bash ./setup/setup_openclaw_copilot.sh
# Install global npm CLIs into a custom prefix/bin
NPM_GLOBAL_PREFIX="$HOME/.npm-global" bash ./setup/setup_openclaw_copilot.sh
# Use both
OPENCLAW_DATA_TARGET=/Volumes/Data/openclaw-copilot \
NPM_GLOBAL_PREFIX="$HOME/.npm-global" \
bash ./setup/setup_openclaw_copilot.sh
```
Order and dependency (important): Order and dependency (important):
1. `setup/setup_openclaw_copilot.sh` installs tooling only (`openclaw`, `copilot`, Node). 1. `setup/setup_openclaw_copilot.sh` installs tooling only (`openclaw`, `copilot`, Node).
@ -91,6 +106,12 @@ Why:
bash ./setup/setup_openclaw_copilot.sh bash ./setup/setup_openclaw_copilot.sh
``` ```
If using a custom location:
```bash
OPENCLAW_DATA_TARGET=/Volumes/Data/openclaw-copilot bash ./setup/setup_openclaw_copilot.sh
```
2. Finalize in one command (recommended): 2. Finalize in one command (recommended):
```bash ```bash

View File

@ -8,6 +8,13 @@ Primary setup script:
bash ./setup/setup_openclaw_copilot.sh bash ./setup/setup_openclaw_copilot.sh
``` ```
Custom locations (optional):
```bash
OPENCLAW_DATA_TARGET=/Volumes/Data/openclaw-copilot bash ./setup/setup_openclaw_copilot.sh
NPM_GLOBAL_PREFIX="$HOME/.npm-global" bash ./setup/setup_openclaw_copilot.sh
```
Install: Install:
```bash ```bash

View File

@ -28,6 +28,13 @@ which npm || echo "npm missing"
bash ./setup/setup_openclaw_copilot.sh bash ./setup/setup_openclaw_copilot.sh
``` ```
Optional custom locations:
```bash
OPENCLAW_DATA_TARGET=/Volumes/Data/openclaw-copilot bash ./setup/setup_openclaw_copilot.sh
NPM_GLOBAL_PREFIX="$HOME/.npm-global" bash ./setup/setup_openclaw_copilot.sh
```
Verify: Verify:
```bash ```bash

View File

@ -2,6 +2,13 @@
set -euo pipefail set -euo pipefail
# Optional overrides:
# OPENCLAW_DATA_TARGET=/Volumes/Data/openclaw-copilot bash ./setup/setup_openclaw_copilot.sh
# NPM_GLOBAL_PREFIX="$HOME/.npm-global" bash ./setup/setup_openclaw_copilot.sh
# OPENCLAW_DATA_TARGET=/Volumes/Data/openclaw-copilot NPM_GLOBAL_PREFIX="$HOME/.npm-global" bash ./setup/setup_openclaw_copilot.sh
OPENCLAW_DATA_TARGET="${OPENCLAW_DATA_TARGET:-}"
NPM_GLOBAL_PREFIX="${NPM_GLOBAL_PREFIX:-}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GREEN='\033[0;32m' GREEN='\033[0;32m'
@ -25,8 +32,84 @@ node_major_version() {
node -v 2>/dev/null | sed 's/^v//' | cut -d. -f1 node -v 2>/dev/null | sed 's/^v//' | cut -d. -f1
} }
expand_tilde() {
local p="$1"
if [[ "$p" == "~" ]]; then
echo "$HOME"
elif [[ "$p" == "~/"* ]]; then
echo "$HOME/${p#~/}"
else
echo "$p"
fi
}
link_data_dir() {
local source="$1"
local target="$2"
local label="$3"
mkdir -p "$target"
if [ -L "$source" ]; then
local current_link
current_link="$(readlink "$source")"
if [ "$current_link" != "$target" ]; then
rm "$source"
ln -s "$target" "$source"
log_info "${label}: updated symlink ${source} -> ${target}"
else
log_info "${label}: symlink already correct (${source} -> ${target})"
fi
return 0
fi
if [ -d "$source" ]; then
log_warn "${label}: migrating existing ${source} data to ${target}..."
if command -v rsync >/dev/null 2>&1; then
rsync -a "$source"/ "$target"/
else
cp -a "$source"/. "$target"/
fi
rm -rf "$source"
elif [ -e "$source" ]; then
log_err "ERROR: ${source} exists but is not a directory/symlink. Resolve manually."
exit 1
fi
ln -s "$target" "$source"
log_info "${label}: symlink created ${source} -> ${target}"
}
install_npm_global() {
local pkg="$1"
require_cmd npm
if [[ -n "$NPM_GLOBAL_PREFIX" ]]; then
mkdir -p "$NPM_GLOBAL_PREFIX"
npm install -g --prefix "$NPM_GLOBAL_PREFIX" "$pkg"
else
npm install -g "$pkg"
fi
}
if [[ -n "$OPENCLAW_DATA_TARGET" ]]; then
OPENCLAW_DATA_TARGET="$(expand_tilde "$OPENCLAW_DATA_TARGET")"
fi
if [[ -n "$NPM_GLOBAL_PREFIX" ]]; then
NPM_GLOBAL_PREFIX="$(expand_tilde "$NPM_GLOBAL_PREFIX")"
fi
if [[ -n "$NPM_GLOBAL_PREFIX" ]]; then
export PATH="$NPM_GLOBAL_PREFIX/bin:$PATH"
fi
echo -e "${GREEN}=== OpenClaw + GitHub Copilot CLI Setup ===${NC}" echo -e "${GREEN}=== OpenClaw + GitHub Copilot CLI Setup ===${NC}"
echo "Current time: $(date)" echo "Current time: $(date)"
if [[ -n "$OPENCLAW_DATA_TARGET" ]]; then
echo "OpenClaw data target: $OPENCLAW_DATA_TARGET"
fi
if [[ -n "$NPM_GLOBAL_PREFIX" ]]; then
echo "npm global prefix: $NPM_GLOBAL_PREFIX"
fi
echo "" echo ""
require_cmd curl require_cmd curl
@ -57,7 +140,7 @@ log_info "Node.js ready ($(node -v))."
if ! command -v openclaw >/dev/null 2>&1; then if ! command -v openclaw >/dev/null 2>&1; then
log_warn "OpenClaw not found. Installing via npm..." log_warn "OpenClaw not found. Installing via npm..."
require_cmd npm require_cmd npm
npm install -g openclaw install_npm_global openclaw
else else
log_info "OpenClaw already installed ($(openclaw --version))." log_info "OpenClaw already installed ($(openclaw --version))."
fi fi
@ -68,16 +151,22 @@ if ! command -v copilot >/dev/null 2>&1; then
log_warn "Copilot CLI not found. Installing prerelease via Homebrew..." log_warn "Copilot CLI not found. Installing prerelease via Homebrew..."
brew install copilot-cli@prerelease || { brew install copilot-cli@prerelease || {
log_warn "Homebrew install failed, falling back to npm package..." log_warn "Homebrew install failed, falling back to npm package..."
npm install -g @github/copilot-cli install_npm_global @github/copilot-cli
} }
else else
log_warn "Homebrew not found. Installing Copilot CLI via npm..." log_warn "Homebrew not found. Installing Copilot CLI via npm..."
npm install -g @github/copilot-cli install_npm_global @github/copilot-cli
fi fi
else else
log_info "Copilot CLI already installed ($(copilot --version 2>/dev/null || echo present))." log_info "Copilot CLI already installed ($(copilot --version 2>/dev/null || echo present))."
fi fi
if [[ -n "$OPENCLAW_DATA_TARGET" ]]; then
link_data_dir "$HOME/.openclaw" "$OPENCLAW_DATA_TARGET" "OpenClaw"
else
log_info "OpenClaw data location unchanged (~/.openclaw). Set OPENCLAW_DATA_TARGET to move it."
fi
FINALIZE_SCRIPT="$SCRIPT_DIR/../scripts/finalize_copilot_setup.sh" FINALIZE_SCRIPT="$SCRIPT_DIR/../scripts/finalize_copilot_setup.sh"
if [[ -x "$FINALIZE_SCRIPT" ]]; then if [[ -x "$FINALIZE_SCRIPT" ]]; then
if copilot auth status >/dev/null 2>&1; then if copilot auth status >/dev/null 2>&1; then
@ -105,3 +194,8 @@ echo " bash ./scripts/finalize_copilot_setup.sh"
echo "3. Verify:" echo "3. Verify:"
echo " openclaw status --deep" echo " openclaw status --deep"
echo " openclaw models status" echo " openclaw models status"
if [[ -n "$NPM_GLOBAL_PREFIX" ]]; then
echo ""
echo "If this is a new shell, ensure PATH includes your npm prefix bin:"
echo " export PATH=\"$NPM_GLOBAL_PREFIX/bin:\$PATH\""
fi