#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" KLAUS_PATH="${SCRIPT_DIR}/klaus.sh" SETTINGS_FILE="${HOME}/.claude/settings.json" if ! command -v jq &>/dev/null; then echo "error: jq is required. install it first." exit 1 fi chmod +x "$KLAUS_PATH" mkdir -p "$(dirname "$SETTINGS_FILE")" if [[ -f "$SETTINGS_FILE" ]]; then # warn if status line already configured EXISTING=$(jq -r '.statusLine.command // empty' "$SETTINGS_FILE") if [[ -n "$EXISTING" && "$EXISTING" != "$KLAUS_PATH" ]]; then echo "warning: statusLine already set to: $EXISTING" printf "overwrite? [y/N] " read -r REPLY if [[ ! "$REPLY" =~ ^[Yy]$ ]]; then echo "aborted" exit 0 fi fi # backup cp "$SETTINGS_FILE" "${SETTINGS_FILE}.bak" UPDATED=$(jq --arg cmd "$KLAUS_PATH" '.statusLine = {"type": "command", "command": $cmd}' "$SETTINGS_FILE") else UPDATED=$(jq -n --arg cmd "$KLAUS_PATH" '{"statusLine": {"type": "command", "command": $cmd}}') fi # validate jq output before writing if ! echo "$UPDATED" | jq empty 2>/dev/null; then echo "error: failed to produce valid json" exit 1 fi # atomic write via temp file TMP=$(mktemp "${SETTINGS_FILE}.XXXXXX") echo "$UPDATED" >"$TMP" mv "$TMP" "$SETTINGS_FILE" echo "installed klaus → ${KLAUS_PATH}" [[ -f "${SETTINGS_FILE}.bak" ]] && echo "backup saved → ${SETTINGS_FILE}.bak" echo "restart claude code to activate"