diff --git a/README.md b/README.md index 65399f5..7f825f1 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ OCP Connect source /home/user/.bashrc ``` -After running, reload your shell (`source ~/.bashrc` or `source ~/.zshrc`) and your IDE will automatically use the remote OCP. +After running, reload your shell (`source ~/.bashrc` or `source ~/.zshrc`). On macOS, the script also sets `launchctl setenv` so GUI apps and daemons can see the env vars immediately (resets on reboot — re-run `ocp-connect` after restart). **Manual setup** — if you prefer not to use the script: ```bash diff --git a/ocp-connect b/ocp-connect index 1446d43..f3cc47c 100755 --- a/ocp-connect +++ b/ocp-connect @@ -141,22 +141,29 @@ main() { echo " ✓ API accessible ($model_count models available)" echo "" - # Step 5: Detect shell rc file - local rc_file - if [[ "${SHELL:-}" == */zsh ]]; then - rc_file="$HOME/.zshrc" - elif [[ "${SHELL:-}" == */fish ]]; then + # Step 5: Detect shell rc files and OS + local rc_files=() + local is_mac=false + [[ "$(uname)" == "Darwin" ]] && is_mac=true + + # Write to all relevant rc files + if [[ "${SHELL:-}" == */fish ]]; then echo " Note: fish shell detected. Writing to ~/.bashrc — add to fish config manually." - rc_file="$HOME/.bashrc" + rc_files+=("$HOME/.bashrc") else - rc_file="$HOME/.bashrc" + # Always write both on macOS (default shell is zsh but some tools source bashrc) + [[ -f "$HOME/.bashrc" || "${SHELL:-}" == */bash ]] && rc_files+=("$HOME/.bashrc") + [[ -f "$HOME/.zshrc" || "${SHELL:-}" == */zsh ]] && rc_files+=("$HOME/.zshrc") + # If neither exists, create for current shell + [[ ${#rc_files[@]} -eq 0 ]] && rc_files+=("$HOME/.${SHELL##*/}rc") fi - # Step 6: Remove any previously written OCP LAN lines (idempotent) - if [[ -f "$rc_file" ]]; then - local tmp_rc - tmp_rc=$(mktemp) - if python3 - "$rc_file" "$tmp_rc" <<'PYEOF' + # Step 6: Remove any previously written OCP LAN lines (idempotent) from all rc files + for rc_file in "${rc_files[@]}"; do + if [[ -f "$rc_file" ]]; then + local tmp_rc + tmp_rc=$(mktemp) + if python3 - "$rc_file" "$tmp_rc" <<'PYEOF' import sys src, dst = sys.argv[1], sys.argv[2] lines = open(src).readlines() @@ -173,27 +180,60 @@ for line in lines: out.append(line) open(dst, 'w').writelines(out) PYEOF - then - cp "$tmp_rc" "$rc_file" + then + cp "$tmp_rc" "$rc_file" + fi + rm -f "$tmp_rc" fi - rm -f "$tmp_rc" - fi + done - # Step 7: Append new config - { - echo "" - echo "# OCP LAN (added by ocp connect)" - echo "export OPENAI_BASE_URL=$base_url/v1" - if [[ -n "$key" ]]; then - echo "export OPENAI_API_KEY=$key" - fi - } >> "$rc_file" + # Step 7: Append new config to all rc files + for rc_file in "${rc_files[@]}"; do + { + echo "" + echo "# OCP LAN (added by ocp connect)" + echo "export OPENAI_BASE_URL=$base_url/v1" + if [[ -n "$key" ]]; then + echo "export OPENAI_API_KEY=$key" + fi + } >> "$rc_file" + done - echo " Written to $rc_file:" + echo " Shell config:" + for rc_file in "${rc_files[@]}"; do + echo " ✓ $(basename "$rc_file")" + done echo " OPENAI_BASE_URL=$base_url/v1" if [[ -n "$key" ]]; then echo " OPENAI_API_KEY=${key:0:8}..." fi + + # Step 7b: System-level env vars (for IDEs, daemons, GUI apps) + if $is_mac; then + # macOS: launchctl setenv makes vars visible to all GUI apps and launchd services + launchctl setenv OPENAI_BASE_URL "$base_url/v1" 2>/dev/null + if [[ -n "$key" ]]; then + launchctl setenv OPENAI_API_KEY "$key" 2>/dev/null + fi + echo "" + echo " System-level (launchctl):" + echo " ✓ OPENAI_BASE_URL set for GUI apps and daemons" + echo " Note: launchctl vars reset on reboot. Add to Login Items or re-run ocp-connect." + else + # Linux: write to environment.d for systemd user services + local env_dir="$HOME/.config/environment.d" + mkdir -p "$env_dir" 2>/dev/null + { + echo "OPENAI_BASE_URL=$base_url/v1" + if [[ -n "$key" ]]; then + echo "OPENAI_API_KEY=$key" + fi + } > "$env_dir/ocp.conf" + echo "" + echo " System-level (systemd):" + echo " ✓ $env_dir/ocp.conf" + echo " Applies to systemd user services after re-login." + fi echo "" # Step 8: Quick smoke test