A hackable personalized news reader in Bash. It filters RSS feeds based on your interests. Use it as a template for your own news-reading process.
You need uv, jq, bat and pandoc
installed.
# macOS
brew install uv jq pandoc batYou also need a Gemini API key, or configure a different LLM supported by Simon Willison's awesome llm tool.
export GEMINI_API_KEY="your-key"Create a new private gist with a file describing your interests (filename doesn't matter):
I am a recent immigrant to Germany, living in Munich.
I'm interested in:
- Systems programming, Rust, Go
- Apple hardware and macOS internals
- European politics
- Distributed systems
- NOT crypto, NOT AI hype
Copy the Gist ID from the URL: https://gist.github.com/username/<GIST_ID>
export GIST_ID="your-gist-id"
./news.shOr edit the script and hardcode your Gist ID:
GIST_ID="${GIST_ID:-"your_gist_id"}"Edit the feeds call at the bottom of the script:
feeds \
https://hnrss.org/best \
https://your-favorite-feed.com/rss \
&No pandoc? No bat? Remove them from the pipeline in the format() function.
Non-English entries are auto-wrapped with a translation link. There are two places to customize:
- Change the translation service (top of the script)
# Default: Perplexity
TRANSLATION="https://www.perplexity.ai/search/?q=Summarize+the+webpage+in+English:+"
# Google Translate
TRANSLATION="https://translate.google.com/translate?sl=auto&tl=en&u="- Change which languages get translated (jq filter in
format())
# Default: translate everything except English
if (.lang == "en") then . else .link = ($prefix + .link) end
# Translate only Chinese and Russian:
if (.lang | IN("zh", "ru")) then .link = ($prefix + .link) else . end- Change translation behavior in the prompt:
Translate all non-English titles into English.
# or
Keep all titles in their original language.| Variable | Default | Description |
|---|---|---|
GIST_ID |
(required) | Your interests Gist ID |
LLM_MODEL |
gemini-3-flash-preview |
Model to use |
GEMINI_API_KEY |
(required) | Your Gemini API key |
DEBUG |
(unset) | Set to any value to enable debug mode |