main
 1#!/usr/bin/env bash
 2#
 3# Claude Code Statusline - Enhanced with NixOS/Homelab Context
 4#
 5# This statusline provides:
 6
 7set -euo pipefail
 8# - Line 1: Identity, model, project context, directory
 9# - Line 2: Active capabilities (skills, hooks)
10#
11
12# Read JSON input from stdin
13input=$(cat)
14
15# Extract data from JSON
16current_dir=$(echo "$input" | jq -r '.workspace.current_dir')
17model_name=$(echo "$input" | jq -r '.model.display_name')
18dir_name=$(basename "$current_dir")
19hostname=$(hostname -s)
20
21# Colors (simple ANSI for terminal compatibility)
22PURPLE='\033[35m'
23BLUE='\033[34m'
24CYAN='\033[36m'
25GREEN='\033[32m'
26YELLOW='\033[33m'
27RESET='\033[0m'
28
29# Detect project context (check more specific paths first)
30context="general"
31if [[ "$current_dir" == *"/keyboards"* ]]; then
32	context="${CYAN}keyboards${RESET}"
33elif [[ "$current_dir" == *"/src/home"* ]]; then
34	context="${YELLOW}homelab${RESET}"
35fi
36
37# Count active capabilities
38claude_dir="${HOME}/.config/claude"
39
40# Count skills (follow symlinks, exclude .archive)
41skills_count=0
42if [ -d "$claude_dir/skills" ]; then
43	skills_count=$(find -L "$claude_dir/skills" -name "SKILL.md" -not -path "*/.archive/*" 2>/dev/null | wc -l | tr -d ' ')
44fi
45
46# Count agents
47agents_count=0
48if [ -d "$claude_dir/agents" ]; then
49	agents_count=$(find -L "$claude_dir/agents" -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
50fi
51
52# LINE 1: Identity, hostname, model, context, directory
53# shellcheck disable=SC2059
54printf "👋 ${PURPLE}${USER}${RESET}@${GREEN}${hostname}${RESET} • ${BLUE}${model_name}${RESET} • ${context} • ${CYAN}${dir_name}${RESET}\n"
55
56# LINE 2: Capabilities
57# shellcheck disable=SC2059
58printf "${GREEN}Skills:${RESET} ${skills_count} ${GREEN}• Agents:${RESET} ${agents_count} ${GREEN}• Hooks:${RESET} active\n"