From 1335b8b28fec69707a875afde3c000c122f81869 Mon Sep 17 00:00:00 2001 From: furiosa Date: Sun, 25 Jan 2026 14:43:42 -0800 Subject: [PATCH] feat(statusline): lower max rigs to 3 and add alias support - Add Alias field to RigEntry struct for short display names - Limit displayed rigs to 3 (was unlimited, causing overflow) - Use alias in statusline when configured (e.g., gcr instead of google_cookie_retrieval) - Show +N overflow indicator when more rigs exist Closes: hq-5j33zz --- internal/cmd/statusline.go | 36 ++++++++++++++++++++++++++++++++---- internal/config/types.go | 1 + 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/internal/cmd/statusline.go b/internal/cmd/statusline.go index a14b40a8..3c37483b 100644 --- a/internal/cmd/statusline.go +++ b/internal/cmd/statusline.go @@ -171,13 +171,17 @@ func runMayorStatusLine(t *tmux.Tmux) error { townRoot, _ = workspace.Find(paneDir) } - // Load registered rigs to validate against + // Load registered rigs to validate against and get aliases registeredRigs := make(map[string]bool) + rigAliases := make(map[string]string) if townRoot != "" { rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json") if rigsConfig, err := config.LoadRigsConfig(rigsConfigPath); err == nil { - for rigName := range rigsConfig.Rigs { + for rigName, entry := range rigsConfig.Rigs { registeredRigs[rigName] = true + if entry.Alias != "" { + rigAliases[rigName] = entry.Alias + } } } } @@ -291,11 +295,16 @@ func runMayorStatusLine(t *tmux.Tmux) error { // Create sortable rig list type rigInfo struct { name string + alias string status *rigStatus } var rigs []rigInfo for rigName, status := range rigStatuses { - rigs = append(rigs, rigInfo{name: rigName, status: status}) + ri := rigInfo{name: rigName, status: status} + if alias, ok := rigAliases[rigName]; ok { + ri.alias = alias + } + rigs = append(rigs, ri) } // Sort by: 1) running state, 2) operational state, 3) alphabetical @@ -321,9 +330,16 @@ func runMayorStatusLine(t *tmux.Tmux) error { }) // Build display with group separators + // Limit to maxRigs to prevent statusline overflow + maxRigs := 3 var rigParts []string var lastGroup string + displayCount := 0 for _, rig := range rigs { + if displayCount >= maxRigs { + break + } + isRunning := rig.status.hasWitness || rig.status.hasRefinery var currentGroup string if isRunning { @@ -363,7 +379,19 @@ func runMayorStatusLine(t *tmux.Tmux) error { if led == "🅿️" { space = " " } - rigParts = append(rigParts, led+space+rig.name) + + // Use alias if available, otherwise use full name + displayName := rig.name + if rig.alias != "" { + displayName = rig.alias + } + rigParts = append(rigParts, led+space+displayName) + displayCount++ + } + + // Show overflow indicator if there are more rigs + if len(rigs) > maxRigs { + rigParts = append(rigParts, fmt.Sprintf("+%d", len(rigs)-maxRigs)) } if len(rigParts) > 0 { diff --git a/internal/config/types.go b/internal/config/types.go index 6496fc64..2f2abc83 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -168,6 +168,7 @@ type RigEntry struct { AddedAt time.Time `json:"added_at"` BeadsConfig *BeadsConfig `json:"beads,omitempty"` Crew *CrewRegistryConfig `json:"crew,omitempty"` + Alias string `json:"alias,omitempty"` // Short display name for statusline } // BeadsConfig represents beads configuration for a rig.