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
This commit is contained in:
furiosa
2026-01-25 14:43:42 -08:00
committed by John Ogle
parent 003fd1a741
commit 1335b8b28f
2 changed files with 33 additions and 4 deletions

View File

@@ -171,13 +171,17 @@ func runMayorStatusLine(t *tmux.Tmux) error {
townRoot, _ = workspace.Find(paneDir) townRoot, _ = workspace.Find(paneDir)
} }
// Load registered rigs to validate against // Load registered rigs to validate against and get aliases
registeredRigs := make(map[string]bool) registeredRigs := make(map[string]bool)
rigAliases := make(map[string]string)
if townRoot != "" { if townRoot != "" {
rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json") rigsConfigPath := filepath.Join(townRoot, "mayor", "rigs.json")
if rigsConfig, err := config.LoadRigsConfig(rigsConfigPath); err == nil { if rigsConfig, err := config.LoadRigsConfig(rigsConfigPath); err == nil {
for rigName := range rigsConfig.Rigs { for rigName, entry := range rigsConfig.Rigs {
registeredRigs[rigName] = true registeredRigs[rigName] = true
if entry.Alias != "" {
rigAliases[rigName] = entry.Alias
}
} }
} }
} }
@@ -291,11 +295,16 @@ func runMayorStatusLine(t *tmux.Tmux) error {
// Create sortable rig list // Create sortable rig list
type rigInfo struct { type rigInfo struct {
name string name string
alias string
status *rigStatus status *rigStatus
} }
var rigs []rigInfo var rigs []rigInfo
for rigName, status := range rigStatuses { 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 // 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 // Build display with group separators
// Limit to maxRigs to prevent statusline overflow
maxRigs := 3
var rigParts []string var rigParts []string
var lastGroup string var lastGroup string
displayCount := 0
for _, rig := range rigs { for _, rig := range rigs {
if displayCount >= maxRigs {
break
}
isRunning := rig.status.hasWitness || rig.status.hasRefinery isRunning := rig.status.hasWitness || rig.status.hasRefinery
var currentGroup string var currentGroup string
if isRunning { if isRunning {
@@ -363,7 +379,19 @@ func runMayorStatusLine(t *tmux.Tmux) error {
if led == "🅿️" { if led == "🅿️" {
space = " " 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 { if len(rigParts) > 0 {

View File

@@ -168,6 +168,7 @@ type RigEntry struct {
AddedAt time.Time `json:"added_at"` AddedAt time.Time `json:"added_at"`
BeadsConfig *BeadsConfig `json:"beads,omitempty"` BeadsConfig *BeadsConfig `json:"beads,omitempty"`
Crew *CrewRegistryConfig `json:"crew,omitempty"` Crew *CrewRegistryConfig `json:"crew,omitempty"`
Alias string `json:"alias,omitempty"` // Short display name for statusline
} }
// BeadsConfig represents beads configuration for a rig. // BeadsConfig represents beads configuration for a rig.