zeq.rocks • Linux Enthusiast

Newsboat: RSS & Atom

Newsboat: Supreme for Atom and RSS

Newsboat logo.

RSS (Really Simple Syndication) and Atom are XML-based formats for publishing website updates. They let users subscribe to content via a feed reader instead of visiting each site manually.

Newsboat is a surprisingly customizable RSS/Atom feed reader.

Some things you can do with Newsboat include integrating yt-dlp to download videos on the fly, viewing Reddit threads, and renaming feeds.

For example, to integrate yt-dlp, you could use something like this:



#!/usr/bin/env bash
set -euo pipefail

URL="${1:-}"
[ -z "$URL" ] && exit 1

if [[ "$URL" =~ (^https?://)?(www\.)?(youtu\.be|youtube\.com)(/|$) ]]; then
    DOWNLOAD_DIR="${HOME}/Videos"
    mkdir -p "$DOWNLOAD_DIR"

    # Format selection:
    # 1. Try 1080x1920, then 720p, then fallback to best
    # 2. Merge best audio with best video if separate
    yt-dlp --restrict-filenames -f \
        "(bv*[height=1080][width=1920]+ba/bestvideo[height<=1080]+bestaudio/best)[fps>=30]" \
        -o "${DOWNLOAD_DIR}/%(uploader)s/%(title)s.%(ext)s" \
        "$URL"

    FILE=$(ls -t "${DOWNLOAD_DIR}"/*/* 2>/dev/null | head -n 1)
    mpv "$FILE"
else
    zen "$URL" &
fi

To add feeds, edit ~/.newsboat/urls. An example ~/.newsboat/urls file could look like this:


https://zeq.rocks/feed/feed.atom
https://gitlab.com/zeqqqe.atom "~zeq's GitLab"
https://www.reddit.com/r/linux/hot/.rss "~r/Linux"
https://www.omgubuntu.co.uk/feed "~OMG! Ubuntu!"
https://www.phoronix.com/rss.php "~Phoronix"
https://news.opensuse.org/feed.xml "~openSUSE News"
https://itsfoss.com/feed/ "~It's FOSS"
https://news.ycombinator.com/rss "~Hacker News"
https://planet.gnome.org/rss20.xml "~Planet GNOME"
https://planet.kde.org/rss20.xml "~Planet KDE"
https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA "~YouTube: @BrodieRobertson"
https://www.youtube.com/feeds/videos.xml?channel_id=UC5UAwBUum7CPN5buc-_N1Fw "~YouTube: @TheLinuxEXP"
https://www.youtube.com/feeds/videos.xml?channel_id=UCymgNglZHYlS1Aw8Mu3QqaA "~YouTube: @craylor"
https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg "~YouTube: @DistroTube"

Newsboat is packaged on almost every distro. To install it, run one of the following:

openSUSE: sudo zypper install newsboat

Debian: sudo apt install newsboat

Fedora: sudo dnf install newsboat

Arch: sudo pacman -S newsboat

To configure Newsboat, edit ~/.newsboat/config. An example Newsboat configuration file could be:


unbind-key j
unbind-key k
unbind-key h
unbind-key H
unbind-key L
unbind-key c
unbind-key ,

# Feed settings
prepopulate-query-feeds yes
refresh-on-startup yes
ignore-mode "display"
browser zen

macro w set browser "~/.newsboat/yt-dlp.sh %u" ; open-in-browser ; set browser "zen %u"

# bind keys
bind-key h exit
bind-key ; macro-prefix
bind-key BACKSPACE quit
bind-key j down
bind-key k up
bind-key l open
bind-key H prev-feed
bind-key L next-feed
bind-key c toggle-show-read-feeds

color background default default
color listnormal default default
color listnormal_unread default default
color listfocus color16 cyan
color listfocus_unread color16 cyan
color info default black
color article default default

highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold
highlight article "(^Link:.*|^Date:.*)" default default
highlight article "https?://[^ ]+" blue default

highlight article "^(Title):.*$" blue default
highlight article "\\[[0-9][0-9]*\\]" white default bold
highlight article "\\[image\\ [0-9]+\\]" blue default bold
highlight article "\\[embedded flash: [0-9][0-9]*\\]" cyan default bold
highlight article ":.*\\(link\\)$" cyan default
highlight article ":.*\\(image\\)$" blue default
highlight article ":.*\\(embedded flash\\)$" magenta default

To export/import a .opml in Newsboat, you can do:


newsboat -e > feeds.opml && newsboat -i feeds.opml

A typical .opml might look like:

<?xml version="1.0"?>
<opml version="1.0">
  <head>
    <title>Newsboat - Exported Feeds</title>
  </head>
  <body>
    <outline type="rss" xmlUrl="https://zeq.rocks/feed/feed.atom" htmlUrl="https://zeq.rocks/feed/feed.atom" title="zeq's blog" text="zeq's blog"/>
    <outline type="rss" xmlUrl="https://gitlab.com/zeqqqe.atom" htmlUrl="https://gitlab.com/Zeqqqe" title="zeq's GitLab" text="zeq's GitLab"/>
    <outline type="rss" xmlUrl="https://www.reddit.com/r/linux/hot/.rss" htmlUrl="https://www.reddit.com/r/linux/hot/" title="r/Linux" text="r/Linux"/>
    <outline type="rss" xmlUrl="https://www.omgubuntu.co.uk/feed" htmlUrl="https://www.omgubuntu.co.uk/" title="OMG! Ubuntu!" text="OMG! Ubuntu!"/>
    <outline type="rss" xmlUrl="https://www.phoronix.com/rss.php" htmlUrl="https://www.phoronix.com/" title="Phoronix" text="Phoronix"/>
    <outline type="rss" xmlUrl="https://news.opensuse.org/feed.xml" htmlUrl="https://news.opensuse.org/" title="openSUSE News" text="openSUSE News"/>
    <outline type="rss" xmlUrl="https://itsfoss.com/feed/" htmlUrl="https://itsfoss.com/" title="It's FOSS" text="It's FOSS"/>
    <outline type="rss" xmlUrl="https://news.ycombinator.com/rss" htmlUrl="https://news.ycombinator.com/" title="Hacker News" text="Hacker News"/>
    <outline type="rss" xmlUrl="https://planet.gnome.org/rss20.xml" htmlUrl="https://planet.gnome.org/" title="Planet GNOME" text="Planet GNOME"/>
    <outline type="rss" xmlUrl="https://planet.kde.org/rss20.xml" htmlUrl="https://planet.kde.org/" title="Planet KDE" text="Planet KDE"/>
    <outline type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA" htmlUrl="https://www.youtube.com/channel/UCld68syR8Wi-GY_n4CaoJGA" title="YouTube: @BrodieRobertson" text="YouTube: @BrodieRobertson"/>
    <outline type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UC5UAwBUum7CPN5buc-_N1Fw" htmlUrl="https://www.youtube.com/channel/UC5UAwBUum7CPN5buc-_N1Fw" title="YouTube: @TheLinuxEXP" text="YouTube: @TheLinuxEXP"/>
    <outline type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCymgNglZHYlS1Aw8Mu3QqaA" htmlUrl="https://www.youtube.com/channel/UCymgNglZHYlS1Aw8Mu3QqaA" title="YouTube: @craylor" text="YouTube: @craylor"/>
    <outline type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg" htmlUrl="https://www.youtube.com/channel/UCVls1GmFKf6WlTraIb_IaJg" title="YouTube: @DistroTube" text="YouTube: @DistroTube"/>
  </body>
</opml>

Newsbeuter: The ancestor

Newsboat didn’t appear out of nowhere. Its predecessor, Newsbeuter, was a terminal RSS/Atom reader that ran like a beast in the 2000s. It did almost everything Newsboat does now-feeds, keybindings, OPML. But it’s dead, development stopped around 2017.

If you have old Newsbeuter configs, Newsboat just picks them up. Same syntax, same files, just newer, faster, and maintained.

This site has Atom/RSS feeds, to get them go to /feed/feed.atom or /feed/feed.rss.

#!/bin/bash shebang.