package cli import ( "errors" "strings" "banger/internal/buildinfo" "banger/internal/daemon" "banger/internal/roothelper" "github.com/spf13/cobra" ) func NewBangerdCommand() *cobra.Command { var systemMode bool var rootHelperMode bool cmd := &cobra.Command{ Use: "bangerd", Version: strings.Replace(formatVersionLine(buildinfo.Current()), "banger ", "bangerd ", 1), Short: "Run the banger daemon", SilenceUsage: true, SilenceErrors: true, Args: noArgsUsage("usage: bangerd"), RunE: func(cmd *cobra.Command, args []string) error { if systemMode && rootHelperMode { return errors.New("choose only one of --system or --root-helper") } if rootHelperMode { server, err := roothelper.Open() if err != nil { return err } defer server.Close() return server.Serve(cmd.Context()) } open := daemon.Open if systemMode { open = daemon.OpenSystem } d, err := open(cmd.Context()) if err != nil { return err } defer d.Close() return d.Serve(cmd.Context()) }, } cmd.Flags().BoolVar(&systemMode, "system", false, "run as the owner-user system service") cmd.Flags().BoolVar(&rootHelperMode, "root-helper", false, "run as the privileged root helper service") cmd.SetVersionTemplate("{{.Version}}\n") cmd.CompletionOptions.DisableDefaultCmd = true return cmd }