altsrc.NewStringFlag(&cli.StringFlag{Name:"base-url",Aliases:[]string{"B"},EnvVars:[]string{"NTFY_BASE_URL"},Usage:"externally visible base URL for this host (e.g. https://ntfy.sh)"}),
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:"listen-unix",Aliases:[]string{"U"},EnvVars:[]string{"NTFY_LISTEN_UNIX"},Usage:"listen on unix socket path"}),
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.NewStringFlag(&cli.StringFlag{Name:"attachment-cache-dir",EnvVars:[]string{"NTFY_ATTACHMENT_CACHE_DIR"},Usage:"cache directory for attached files"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"attachment-total-size-limit",Aliases:[]string{"A"},EnvVars:[]string{"NTFY_ATTACHMENT_TOTAL_SIZE_LIMIT"},DefaultText:"5G",Usage:"limit of the on-disk attachment cache"}),
altsrc.NewDurationFlag(&cli.DurationFlag{Name:"attachment-expiry-duration",Aliases:[]string{"X"},EnvVars:[]string{"NTFY_ATTACHMENT_EXPIRY_DURATION"},Value:server.DefaultAttachmentExpiryDuration,DefaultText:"3h",Usage:"duration after which uploaded attachments will be deleted (e.g. 3h, 20h)"}),
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.NewStringFlag(&cli.StringFlag{Name:"smtp-sender-addr",EnvVars:[]string{"NTFY_SMTP_SENDER_ADDR"},Usage:"SMTP server address (host:port) for outgoing emails"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"smtp-sender-user",EnvVars:[]string{"NTFY_SMTP_SENDER_USER"},Usage:"SMTP user (if e-mail sending is enabled)"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"smtp-sender-pass",EnvVars:[]string{"NTFY_SMTP_SENDER_PASS"},Usage:"SMTP password (if e-mail sending is enabled)"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"smtp-sender-from",EnvVars:[]string{"NTFY_SMTP_SENDER_FROM"},Usage:"SMTP sender address (if e-mail sending is enabled)"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"smtp-server-listen",EnvVars:[]string{"NTFY_SMTP_SERVER_LISTEN"},Usage:"SMTP server address (ip:port) for incoming emails, e.g. :25"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"smtp-server-domain",EnvVars:[]string{"NTFY_SMTP_SERVER_DOMAIN"},Usage:"SMTP domain for incoming e-mail, e.g. ntfy.sh"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"smtp-server-addr-prefix",EnvVars:[]string{"NTFY_SMTP_SERVER_ADDR_PREFIX"},Usage:"SMTP email address prefix for topics to prevent spam (e.g. 'ntfy-')"}),
altsrc.NewIntFlag(&cli.IntFlag{Name:"global-topic-limit",Aliases:[]string{"T"},EnvVars:[]string{"NTFY_GLOBAL_TOPIC_LIMIT"},Value:server.DefaultTotalTopicLimit,Usage:"total number of topics allowed"}),
altsrc.NewIntFlag(&cli.IntFlag{Name:"visitor-subscription-limit",EnvVars:[]string{"NTFY_VISITOR_SUBSCRIPTION_LIMIT"},Value:server.DefaultVisitorSubscriptionLimit,Usage:"number of subscriptions per visitor"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"visitor-attachment-total-size-limit",EnvVars:[]string{"NTFY_VISITOR_ATTACHMENT_TOTAL_SIZE_LIMIT"},Value:"100M",Usage:"total storage limit used for attachments per visitor"}),
altsrc.NewStringFlag(&cli.StringFlag{Name:"visitor-attachment-daily-bandwidth-limit",EnvVars:[]string{"NTFY_VISITOR_ATTACHMENT_DAILY_BANDWIDTH_LIMIT"},Value:"500M",Usage:"total daily attachment download/upload bandwidth limit per visitor"}),
altsrc.NewIntFlag(&cli.IntFlag{Name:"visitor-request-limit-burst",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",EnvVars:[]string{"NTFY_VISITOR_REQUEST_LIMIT_REPLENISH"},Value:server.DefaultVisitorRequestLimitReplenish,Usage:"interval at which burst limit is replenished (one per x)"}),
altsrc.NewIntFlag(&cli.IntFlag{Name:"visitor-email-limit-burst",EnvVars:[]string{"NTFY_VISITOR_EMAIL_LIMIT_BURST"},Value:server.DefaultVisitorEmailLimitBurst,Usage:"initial limit of e-mails per visitor"}),
altsrc.NewDurationFlag(&cli.DurationFlag{Name:"visitor-email-limit-replenish",EnvVars:[]string{"NTFY_VISITOR_EMAIL_LIMIT_REPLENISH"},Value:server.DefaultVisitorEmailLimitReplenish,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)"}),