chore: added env variable default and graceful failure d947e5c0
Steve Simkins · 2026-05-06 19:57 2 file(s) · +23 −4
README.md +6 −0
8 8
bullets <feed-url> [feed-url ...]
9 9
```
10 10
11 +
Or set feeds via environment variable (comma-separated):
12 +
13 +
```sh
14 +
export BULLETS_FEEDS=https://example.com/feed.xml,stevedylan.dev
15 +
```
16 +
11 17
Feed discovery included — bare domains (e.g. `stevedylan.dev`) are probed for RSS/Atom feeds automatically.
12 18
13 19
## Keybindings
src/main.rs +17 −4
106 106
107 107
fn main() -> color_eyre::Result<()> {
108 108
    color_eyre::install()?;
109 -
    let urls: Vec<String> = std::env::args().skip(1).collect();
109 +
    let mut urls: Vec<String> = std::env::args().skip(1).collect();
110 +
    if urls.is_empty() {
111 +
        if let Ok(val) = std::env::var("BULLETS_FEEDS") {
112 +
            urls = val
113 +
                .split(',')
114 +
                .map(|s| s.trim().to_string())
115 +
                .filter(|s| !s.is_empty())
116 +
                .collect();
117 +
        }
118 +
    }
110 119
    if urls.is_empty() {
111 -
        return Err(color_eyre::eyre::eyre!(
112 -
            "Usage: bullets <feed-url> [feed-url ...]"
113 -
        ));
120 +
        eprintln!("No feeds provided.\n");
121 +
        eprintln!("Usage:");
122 +
        eprintln!("  bullets <feed-url> [feed-url ...]");
123 +
        eprintln!("  bullets https://example.com/feed.xml other.com/rss");
124 +
        eprintln!("\nOr set the BULLETS_FEEDS environment variable:");
125 +
        eprintln!("  export BULLETS_FEEDS=https://example.com/feed.xml,https://other.com/rss");
126 +
        std::process::exit(1);
114 127
    }
115 128
    let feeds: Vec<ParsedFeed> = urls
116 129
        .iter()