diff --git a/scripts/install.sh b/scripts/install.sh index 166d984fa..080158f47 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1016,20 +1016,37 @@ setup_path() { for SHELL_CONFIG in "${SHELL_CONFIGS[@]}"; do if ! grep -v '^[[:space:]]*#' "$SHELL_CONFIG" 2>/dev/null | grep -qE 'PATH=.*\.local/bin'; then - echo "" >> "$SHELL_CONFIG" - echo "# Hermes Agent — ensure ~/.local/bin is on PATH" >> "$SHELL_CONFIG" - echo "$PATH_LINE" >> "$SHELL_CONFIG" - log_success "Added ~/.local/bin to PATH in $SHELL_CONFIG" + # Try to write, handling permission errors gracefully + if { + echo "" >> "$SHELL_CONFIG" 2>/dev/null && \ + echo "# Hermes Agent — ensure ~/.local/bin is on PATH" >> "$SHELL_CONFIG" 2>/dev/null && \ + echo "$PATH_LINE" >> "$SHELL_CONFIG" 2>/dev/null + }; then + log_success "Added ~/.local/bin to PATH in $SHELL_CONFIG" + else + log_warn "Could not write to $SHELL_CONFIG (not writable?)" + echo "" + log_info "Add ~/.local/bin to your PATH manually:" + log_info " $PATH_LINE" + echo "" + fi fi done # fish uses fish_add_path instead of export PATH=... if [ "$IS_FISH" = "true" ]; then if ! grep -q 'fish_add_path.*\.local/bin' "$FISH_CONFIG" 2>/dev/null; then - echo "" >> "$FISH_CONFIG" - echo "# Hermes Agent — ensure ~/.local/bin is on PATH" >> "$FISH_CONFIG" - echo 'fish_add_path "$HOME/.local/bin"' >> "$FISH_CONFIG" - log_success "Added ~/.local/bin to PATH in $FISH_CONFIG" + # Try to write, handling permission errors gracefully + if { + echo "" >> "$FISH_CONFIG" 2>/dev/null && \ + echo "# Hermes Agent — ensure ~/.local/bin is on PATH" >> "$FISH_CONFIG" 2>/dev/null && \ + echo 'fish_add_path "$HOME/.local/bin"' >> "$FISH_CONFIG" 2>/dev/null + }; then + log_success "Added ~/.local/bin to PATH in $FISH_CONFIG" + else + log_warn "Could not write to $FISH_CONFIG" + log_info "Add manually: fish_add_path \"\$HOME/.local/bin\"" + fi fi fi diff --git a/setup-hermes.sh b/setup-hermes.sh index 5d0f2928a..f1acade1e 100755 --- a/setup-hermes.sh +++ b/setup-hermes.sh @@ -314,15 +314,23 @@ else fi if [ -n "$SHELL_CONFIG" ]; then - # Touch the file just in case it doesn't exist yet but was selected - touch "$SHELL_CONFIG" 2>/dev/null || true - if ! echo "$PATH" | tr ':' '\n' | grep -q "^$HOME/.local/bin$"; then if ! grep -q '\.local/bin' "$SHELL_CONFIG" 2>/dev/null; then - echo "" >> "$SHELL_CONFIG" - echo "# Hermes Agent — ensure ~/.local/bin is on PATH" >> "$SHELL_CONFIG" - echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$SHELL_CONFIG" - echo -e "${GREEN}✓${NC} Added ~/.local/bin to PATH in $SHELL_CONFIG" + # Try to write, handling permission errors gracefully + if { + echo "" >> "$SHELL_CONFIG" 2>/dev/null && \ + echo "# Hermes Agent — ensure ~/.local/bin is on PATH" >> "$SHELL_CONFIG" 2>/dev/null && \ + echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$SHELL_CONFIG" 2>/dev/null + }; then + echo -e "${GREEN}✓${NC} Added ~/.local/bin to PATH in $SHELL_CONFIG" + else + echo -e "${YELLOW}⚠${NC} Could not write to $SHELL_CONFIG (not writable?)" + echo "" + echo -e "${CYAN}→${NC} Add ~/.local/bin to your PATH manually:" + echo "" + echo -e " ${CYAN}export PATH=\"\$HOME/.local/bin:\$PATH\"${NC}" + echo "" + fi else echo -e "${GREEN}✓${NC} ~/.local/bin already in $SHELL_CONFIG" fi