another claude code statusline
1#!/usr/bin/env bash
2set -euo pipefail
3
4SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
5KLAUS_PATH="${SCRIPT_DIR}/klaus.sh"
6SETTINGS_FILE="${HOME}/.claude/settings.json"
7
8if ! command -v jq &>/dev/null; then
9 echo "error: jq is required. install it first."
10 exit 1
11fi
12
13chmod +x "$KLAUS_PATH"
14
15mkdir -p "$(dirname "$SETTINGS_FILE")"
16
17if [[ -f "$SETTINGS_FILE" ]]; then
18 # warn if status line already configured
19 EXISTING=$(jq -r '.statusLine.command // empty' "$SETTINGS_FILE")
20 if [[ -n "$EXISTING" && "$EXISTING" != "$KLAUS_PATH" ]]; then
21 echo "warning: statusLine already set to: $EXISTING"
22 printf "overwrite? [y/N] "
23 read -r REPLY
24 if [[ ! "$REPLY" =~ ^[Yy]$ ]]; then
25 echo "aborted"
26 exit 0
27 fi
28 fi
29
30 # backup
31 cp "$SETTINGS_FILE" "${SETTINGS_FILE}.bak"
32
33 UPDATED=$(jq --arg cmd "$KLAUS_PATH" '.statusLine = {"type": "command", "command": $cmd}' "$SETTINGS_FILE")
34else
35 UPDATED=$(jq -n --arg cmd "$KLAUS_PATH" '{"statusLine": {"type": "command", "command": $cmd}}')
36fi
37
38# validate jq output before writing
39if ! echo "$UPDATED" | jq empty 2>/dev/null; then
40 echo "error: failed to produce valid json"
41 exit 1
42fi
43
44# atomic write via temp file
45TMP=$(mktemp "${SETTINGS_FILE}.XXXXXX")
46echo "$UPDATED" >"$TMP"
47mv "$TMP" "$SETTINGS_FILE"
48
49echo "installed klaus → ${KLAUS_PATH}"
50[[ -f "${SETTINGS_FILE}.bak" ]] && echo "backup saved → ${SETTINGS_FILE}.bak"
51echo "restart claude code to activate"