package config import ( "flag" "fmt" "time" ) type Config struct { ListenAddr string FlakeCollector bool FlakeURL string FlakeCheckInterval time.Duration // NATS configuration FlakeNATSEnable bool FlakeNATSURL string FlakeNATSSubject string FlakeNATSCredentialsFile string FlakeNATSNkeySeedFile string } func Parse() (*Config, error) { cfg := &Config{} flag.StringVar(&cfg.ListenAddr, "listen", ":9971", "Address to listen on") flag.BoolVar(&cfg.FlakeCollector, "collector.flake", false, "Enable flake collector") flag.StringVar(&cfg.FlakeURL, "flake.url", "", "Flake URL for revision comparison (required if flake collector enabled)") flag.DurationVar(&cfg.FlakeCheckInterval, "flake.check-interval", time.Hour, "Interval between remote flake checks") // NATS flags flag.BoolVar(&cfg.FlakeNATSEnable, "flake.nats.enable", false, "Enable NATS cache sharing") flag.StringVar(&cfg.FlakeNATSURL, "flake.nats.url", "nats://localhost:4222", "NATS server URL") flag.StringVar(&cfg.FlakeNATSSubject, "flake.nats.subject", "nixos-exporter.remote-rev", "NATS subject for revision updates") flag.StringVar(&cfg.FlakeNATSCredentialsFile, "flake.nats.credentials-file", "", "NATS credentials file (optional)") flag.StringVar(&cfg.FlakeNATSNkeySeedFile, "flake.nats.nkey-seed-file", "", "NATS NKey seed file (optional)") flag.Parse() if cfg.FlakeCollector && cfg.FlakeURL == "" { return nil, fmt.Errorf("--flake.url is required when --collector.flake is enabled") } if cfg.FlakeNATSEnable && !cfg.FlakeCollector { return nil, fmt.Errorf("--flake.nats.enable requires --collector.flake to be enabled") } return cfg, nil }