diff --git a/internal/cmd/down.go b/internal/cmd/down.go index d31a783d..5215ab00 100644 --- a/internal/cmd/down.go +++ b/internal/cmd/down.go @@ -36,11 +36,13 @@ This is useful for: var ( downQuiet bool downForce bool + downAll bool ) func init() { downCmd.Flags().BoolVarP(&downQuiet, "quiet", "q", false, "Only show errors") downCmd.Flags().BoolVarP(&downForce, "force", "f", false, "Force kill without graceful shutdown") + downCmd.Flags().BoolVarP(&downAll, "all", "a", false, "Also kill the tmux server") rootCmd.AddCommand(downCmd) } @@ -96,6 +98,16 @@ func runDown(cmd *cobra.Command, args []string) error { printDownStatus("Daemon", true, "not running") } + // 5. Kill tmux server if --all + if downAll { + if err := t.KillServer(); err != nil { + printDownStatus("Tmux server", false, err.Error()) + allOK = false + } else { + printDownStatus("Tmux server", true, "killed") + } + } + fmt.Println() if allOK { fmt.Printf("%s All services stopped\n", style.Bold.Render("✓")) diff --git a/internal/tmux/tmux.go b/internal/tmux/tmux.go index 90cd73d4..f08ae719 100644 --- a/internal/tmux/tmux.go +++ b/internal/tmux/tmux.go @@ -80,6 +80,15 @@ func (t *Tmux) KillSession(name string) error { return err } +// KillServer terminates the entire tmux server and all sessions. +func (t *Tmux) KillServer() error { + _, err := t.run("kill-server") + if errors.Is(err, ErrNoServer) { + return nil // Already dead + } + return err +} + // HasSession checks if a session exists. func (t *Tmux) HasSession(name string) (bool, error) { _, err := t.run("has-session", "-t", name)