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. Requirements You need uv, jq , bat and pandoc installed. # macOS brew install uv jq pandoc bat You 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 " Setup: Create Your Interests Gist 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> Usage export GIST_ID= " your-gist-id " ./news.sh Or edit the script and hardcode your Gist ID: GIST_ID= " ${GIST_ID :- " your_gist_id " } " Customize feeds Edit the feeds call at the bottom of the script: feeds \ https://hnrss.org/best \ https://your-favorite-feed.com/rss \ & Graceful Degradation No pandoc ? No bat ? Remove them from the pipeline in the format() function. Translation Settings 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. Environment Variables
First seen: 2026-01-25 21:55
Last seen: 2026-01-25 23:56