altsrc.NewStringFlag(&cli.StringFlag{Name:"listen-http",Aliases:[]string{"l"},EnvVars:[]string{"NTFY_LISTEN_HTTP"},Value:server.DefaultListenHTTP,Usage:"ip:port used to as HTTP listen address"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"listen-https",Aliases:[]string{"L"},EnvVars:[]string{"NTFY_LISTEN_HTTPS"},Usage:"ip:port used to as HTTPS listen address"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"key-file",Aliases:[]string{"K"},EnvVars:[]string{"NTFY_KEY_FILE"},Usage:"private key file, if listen-https is set"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"cert-file",Aliases:[]string{"E"},EnvVars:[]string{"NTFY_CERT_FILE"},Usage:"certificate file, if listen-https is set"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"firebase-key-file",Aliases:[]string{"F"},EnvVars:[]string{"NTFY_FIREBASE_KEY_FILE"},Usage:"Firebase credentials file; if set additionally publish to FCM topic"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"cache-file",Aliases:[]string{"C"},EnvVars:[]string{"NTFY_CACHE_FILE"},Usage:"cache file used for message caching"}),
altsrc.NewDurationFlag(&cli.DurationFlag{Name:"cache-duration",Aliases:[]string{"b"},EnvVars:[]string{"NTFY_CACHE_DURATION"},Value:server.DefaultCacheDuration,Usage:"buffer messages for this time to allow `since` requests"}),
altsrc.NewDurationFlag(&cli.DurationFlag{Name:"keepalive-interval",Aliases:[]string{"k"},EnvVars:[]string{"NTFY_KEEPALIVE_INTERVAL"},Value:server.DefaultKeepaliveInterval,Usage:"interval of keepalive messages"}),
altsrc.NewDurationFlag(&cli.DurationFlag{Name:"manager-interval",Aliases:[]string{"m"},EnvVars:[]string{"NTFY_MANAGER_INTERVAL"},Value:server.DefaultManagerInterval,Usage:"interval of for message pruning and stats printing"}),
altsrc.NewIntFlag(&cli.IntFlag{Name:"global-topic-limit",Aliases:[]string{"T"},EnvVars:[]string{"NTFY_GLOBAL_TOPIC_LIMIT"},Value:server.DefaultGlobalTopicLimit,Usage:"total number of topics allowed"}),
altsrc.NewIntFlag(&cli.IntFlag{Name:"visitor-subscription-limit",Aliases:[]string{"V"},EnvVars:[]string{"NTFY_VISITOR_SUBSCRIPTION_LIMIT"},Value:server.DefaultVisitorSubscriptionLimit,Usage:"number of subscriptions per visitor"}),
altsrc.NewIntFlag(&cli.IntFlag{Name:"visitor-request-limit-burst",Aliases:[]string{"B"},EnvVars:[]string{"NTFY_VISITOR_REQUEST_LIMIT_BURST"},Value:server.DefaultVisitorRequestLimitBurst,Usage:"initial limit of requests per visitor"}),
altsrc.NewDurationFlag(&cli.DurationFlag{Name:"visitor-request-limit-replenish",Aliases:[]string{"R"},EnvVars:[]string{"NTFY_VISITOR_REQUEST_LIMIT_REPLENISH"},Value:server.DefaultVisitorRequestLimitReplenish,Usage:"interval at which burst limit is replenished (one per x)"}),
altsrc.NewBoolFlag(&cli.BoolFlag{Name:"behind-proxy",Aliases:[]string{"P"},EnvVars:[]string{"NTFY_BEHIND_PROXY"},Value:false,Usage:"if set, use X-Forwarded-For header to determine visitor IP address (for rate limiting)"}),