package main import ( "context" "fmt" tea "github.com/charmbracelet/bubbletea" "github.com/spf13/cobra" "git.tukangketik.id/swanadiva/hostkeeper/pkg/config" "git.tukangketik.id/swanadiva/hostkeeper/pkg/knownhosts" "git.tukangketik.id/swanadiva/hostkeeper/pkg/storage" "git.tukangketik.id/swanadiva/hostkeeper/pkg/tui" ) // tuiCmd represents the tui command var tuiCmd = &cobra.Command{ Use: "tui", Short: "Launch terminal user interface", Long: `Launch an interactive terminal user interface for managing SSH hosts and connections.`, RunE: runTUI, } func init() { rootCmd.AddCommand(tuiCmd) } func runTUI(cmd *cobra.Command, args []string) error { cfg := appCfg if cfg == nil { var err error cfg, err = config.New() if err != nil { return fmt.Errorf("failed to initialize config: %w", err) } } store, err := storage.NewJSONStorage(cfg.GetDataDir()) if err != nil { return fmt.Errorf("failed to initialize storage: %w", err) } // Initialize known_hosts kh, err := knownhosts.New(cfg.GetDataDir()) if err != nil { fmt.Printf("Warning: failed to load known_hosts: %v\n", err) } ctx := context.Background() hosts, err := store.ListHosts(ctx) if err != nil { return fmt.Errorf("failed to load hosts: %w", err) } model := tui.New() model.SetDataDir(cfg.GetDataDir()) model.LoadHosts(hosts) if kh != nil { model.SetKnownHosts(kh) } p := tea.NewProgram(model) model.SetProgram(p) if _, err := p.Run(); err != nil { return fmt.Errorf("failed to run TUI: %w", err) } return nil }