Created
August 21, 2025 08:15
-
-
Save nicewook/69400a054f4ed581e1e75ac6d1102ae0 to your computer and use it in GitHub Desktop.
Claude Code statusline script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Claude Code용 향상된 상태표시줄 스크립트 | |
# 표시 형식: 프로젝트명 브랜치-상태 모델 YYYY-MM-DD HH:MM:SS | |
# 표준 입력(stdin)에서 JSON 형식의 입력 데이터를 읽어옴 | |
# Claude Code에서 모델 정보 등을 JSON으로 전달 | |
input=$(cat) | |
# Git 저장소인지 확인하고 브랜치 이름, 브랜치 상태를 알아냄 | |
if git rev-parse --git-dir >/dev/null 2>&1; then | |
# 현재 활성화된 브랜치 이름을 가져옴 | |
BRANCH=$(git branch --show-current 2>/dev/null) | |
# 브랜치 상태 확인: 원격 동기화 > 로컬 변경사항 > 깨끗한 상태 | |
if [[ -n "$BRANCH" ]]; then | |
# 원격 저장소와의 동기화 상태를 먼저 확인 (최고 우선순위) | |
if git rev-parse --verify @{upstream} >/dev/null 2>&1; then | |
# 로컬과 원격 간의 앞서가는/뒤처지는 커밋 수를 계산 | |
ahead_behind=$(git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null) | |
if [[ -n "$ahead_behind" ]]; then | |
behind=$(echo "$ahead_behind" | cut -f1) # 뒤처진 커밋 수 | |
ahead=$(echo "$ahead_behind" | cut -f2) # 앞선 커밋 수 | |
if [[ "$ahead" -gt 0 && "$behind" -gt 0 ]]; then | |
status="↕" # 앞서면서 동시에 뒤처진 상태 (분기됨) | |
elif [[ "$ahead" -gt 0 ]]; then | |
status="↑" # 앞선 상태 (푸시 필요) | |
elif [[ "$behind" -gt 0 ]]; then | |
status="↓" # 뒤처진 상태 (풀 필요) | |
fi | |
fi | |
fi | |
# 원격 동기화 문제가 없다면 로컬 변경사항 확인 | |
if [[ -z "$status" ]]; then | |
if git diff-index --quiet HEAD -- 2>/dev/null; then | |
status="✓" # 깨끗한 상태 (변경사항 없음) | |
else | |
status="*" # 더러운 상태 (로컬 변경사항 있음) | |
fi | |
fi | |
# 브랜치명과 상태를 결합 | |
GIT_INFO="$BRANCH $status" | |
else | |
# 브랜치를 찾을 수 없는 경우 | |
GIT_INFO="" | |
fi | |
fi | |
PROJECT_NAME=$(echo "$input" | jq -r '.workspace.project_dir' | xargs basename) | |
# 현재 날짜와 시간을 YYYY-MM-DD HH:MM:SS 형식으로 가져옴 | |
DATETIME=$(date '+%Y-%m-%d %H:%M:%S') | |
# JSON 입력에서 모델명을 추출하고 'claude-' 접두사 제거 | |
MODEL=$(echo "$input" | jq -r '.model.display_name') | |
# 상태표시줄 색상 설정 - 다크모드 가독성에 초점을 맞춘 글자색 | |
# 🎨 팔레트 1 — Bright & Vivid (밝고 선명) | |
PROJECT_COLOR='\033[38;5;81m' # 밝은 하늘 | |
BRANCH_COLOR='\033[38;5;118m' # 형광 라임 | |
MODEL_COLOR='\033[38;5;226m' # 선명한 노랑 | |
DATETIME_COLOR='\033[38;5;15m' # 밝은 회색 | |
RESET='\033[0m' | |
# 🎨 팔레트 2 — Soft Pastel (파스텔) | |
# PROJECT_COLOR='\033[38;5;183m' # 연보라 | |
# BRANCH_COLOR='\033[38;5;157m' # 연두 | |
# MODEL_COLOR='\033[38;5;223m' # 파스텔 오렌지 | |
# DATETIME_COLOR='\033[38;5;15m' # 밝은 회색 | |
# RESET='\033[0m' | |
# 상태표시줄 구성: 프로젝트명 ⎇ 브랜치 상태 모델 날짜시간 | |
if [[ -n "$GIT_INFO" ]]; then | |
printf "%b %s %b ⎇ %s %b %s %b %s%b\n" \ | |
"$PROJECT_COLOR" "$PROJECT_NAME" \ | |
"$BRANCH_COLOR" "$GIT_INFO" \ | |
"$MODEL_COLOR" "$MODEL" \ | |
"$DATETIME_COLOR" "$DATETIME" \ | |
"$RESET" | |
else | |
printf "%b %s %b %s %b %s%b\n" \ | |
"$PROJECT_COLOR" "$PROJECT_NAME" \ | |
"$MODEL_COLOR" "$MODEL" \ | |
"$DATETIME_COLOR" "$DATETIME" \ | |
"$RESET" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment