Skip to content

Instantly share code, notes, and snippets.

@nicewook
Created August 21, 2025 08:15
Show Gist options
  • Save nicewook/69400a054f4ed581e1e75ac6d1102ae0 to your computer and use it in GitHub Desktop.
Save nicewook/69400a054f4ed581e1e75ac6d1102ae0 to your computer and use it in GitHub Desktop.
Claude Code statusline script
#!/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