How I use newsboat to read my favourite blog posts

Original date: 6/2/2021

After I've completely removed all my social media accounts on centralized networks as Twitter, Reddit and Facebook, I've been digging into the indieweb[1] blog sphere. This not only allowed me to improve the quality of my time, focusing only on blogs and content that matters to me, but it also let me discover totally new points of view that I actually didn't like at first, but made me reevaluate my ideas on politics, computer programming, system administration, and so on. This constant flow of ideas and cool stuff was barely possible on websites or aggregators like Reddit, where roughly 1 post out of 50 was worth my time and many of them (especially controversial ones) were silently hidden by their attention-keeping algorithm.

1. The Indie Web

There are many possible ways to keep in touch with your favourite blogs, but the simplest and most flexible technology are the old, fashioned RSS feeds. RSS feeds can be read by hundreds of different applications, they are widely supported, and almost any website with articles or news makes available an RSS feed for their content (even Twitter and YouTube have RSS feeds for channels and pages). You just look for the RSS icon and click it, or find the RSS feed with[2] other[3] methods[4].

2. Find a RSS feed

3. YouTube RSS feeds

4. Generic methods to find RSS feeds.

There are many advantages of RSS feeds over the mainstream social media platform, just to name a few:

5. What is the filter bubble

6. Free and open source RSS readers

How RSS readers work

Despite being very different, they work all the same way: you add the RSS feed URL the website gave you (for example, if you want to follow Drew Devault's fantastic blog (https://drewdevault.com/) you simply add to your RSS reader the link he provides on his website, ( e.g. https://drewdevault.com/blog/index.xml ). After that, your RSS reader should start fetching content and visualizing articles from the resources you added.

What about newsboat?

Newsboat is a RSS/Atom (Atom is another technology similar to RSS) feed reader for the terminal. It provides you a clean, elegant, and minimal interface to comfortably read your favourite blogs inside your terminal of choice. I use it because it is very simple (in the sense of essential), configuration is inside dotfiles, and allows me to set up Vim-like hotkeys, read links directly into the console with my custom theming, and when it's not enough it lets me open any article or link in my browser.

Whatever, let's see how I use it.

Regardless of the Linux distribution, newsboat should be available in the main repository without adding external sources. Find it and install it.

After installation, your feed reader will be empty. To add links, create a folder with name .newsboat in your $HOME folder. Inside that folder we will put the configuration file (named config), and the file containing all the URLs we want it to fetch (named urls).

The configuration file in ~/.newsboat/config doesn't exist or is empty, and we are going to set up ours. I will post my simple configuration and comment it:

auto-reload yes
reload-time 120
reload-threads 100

download-retries 5
download-timeout 60

bind-key j down
bind-key k up
bind-key j next articlelist
bind-key k prev articlelist
bind-key J next-feed articlelist
bind-key K prev-feed articlelist
bind-key G end
bind-key g home
bind-key d pagedown
bind-key u pageup
bind-key l open
bind-key h quit
bind-key a toggle-article-read
bind-key n next-unread
bind-key N prev-unread
bind-key D pb-download
bind-key U show-urls
bind-key x pb-delete

browser "firefox %u"

macro y set browser "mpv %u" ; open-in-browser ; set browser "firefox %u"
macro , set browser "firefox %u"; open-in-browser

The line auto-reload yes makes sure that the reader will fetch content automatically, and not only when started. The delay between auto-reloadings is declared (in minutes) with reload-time and you can also set up the number of threads involved with reload-threads, to speed up the process if you are subscribed to many different sources. download-retries and download-timeout (in seconds) are useful if you're fetching your feeds over TOR or behind a slow network. The first is the number of times it will retry the connection if the reader cannot fetch the content, and the second one defines the timeout for declaring a content unreachable.

The next part of the list is dedicated to key bindings. They are set up to closely resemble Vim-hotkeys, but if you don't need them you can stick with the default ones (to view them, press ? when running newsboat).

browser "firefox %u allows me to set the default browser. Any other browsers, such as Chromium, Brave or Vivaldi, follow the same syntax.

The next two commands define two macros. Macros are available when pressing , (the comma). The first macro is called when pressing y after , . I use it when I want to watch a YouTube video from the feeds. It sets the browser to mpv (the most powerful media player available), open the URL in the browser (the media player) that starts to fetch and comfortably display the video. After that, it sets the browser to the default choice. The second one simply opens the URL in firefox, and it is called by pressing twice , .

The config files allows to setup your own colorscheme, but since this is optional we will go through it later.

Most of the supplemental infos on configuration file can be found in the documentation[7].

7. Documentation

After the configuration setup, we can start adding URLs. RSS feeds may be simply added into ~/.newsboat/urls, one per line, for example:

https://drewdevault.com/blog/index.xml
https://www.schneier.com/feed/atom/
https://robertheaton.com/feed
http://www.hackerfactor.com/blog/index.php?/feeds/index.rss2
https://www.unixsheikh.com/feed.rss
https://ar.al/index.xml
https://kevq.uk/feed.xml
https://mikestone.me/feed.xml
https://rusingh.com/feed.xml

When launching newsboat, they will be shown in the same order we put them here.

I added a little bit of customization, adding text-only lines to divide my feeds into categories. I did this by putting " at the beginning of such lines:

" =============================================================================
" ===> BLOGS <=================================================================
" =============================================================================
" ------> Programming and Security <-------------------------------------------
https://drewdevault.com/blog/index.xml
https://www.schneier.com/feed/atom/
https://robertheaton.com/feed
http://www.hackerfactor.com/blog/index.php?/feeds/index.rss2
https://www.unixsheikh.com/feed.rss
https://ar.al/index.xml
https://kevq.uk/feed.xml
https://mikestone.me/feed.xml
https://rusingh.com/feed.xml
" "
" ------> Linux <--------------------------------------------------------------
https://fedoramagazine.org/feed/
https://newsboat.org/news.atom
https://www.phoronix.com/rss.php
" "
" =============================================================================
" ===> YOUTUBE CHANNELS <======================================================
" =============================================================================
https://www.youtube.com/feeds/videos.xml?channel_id=UCYFgn8_JgaQL1E-N2tg1xcQ
https://www.youtube.com/feeds/videos.xml?channel_id=UCIPsK5xspHC3-ZFNPTx2X_w

and so on. Of course, designing this part is up to you, and it depends on your tastes and needs.

After running newsboat, you may notice that a file, cache.db has been created into the .newsboat folder. This file allows the program to keep track of the already seen articles, and may be worthwhile to sync it across devices if you're running newsboat on multiple machines.

Custom colorschemes

This part is completely optional. I personally love the gruvbox colorscheme[8], and I use it on almost everything. The documentation[9] offers a nice section on how to customize newsboat colors.

8. gruvbox color palette

9. Newsboat official documentation on colorscheme customization.

This is what I added in my config file:

# colors
color background          black      default
color listnormal          color8     default
color listnormal_unread   green      default bold
color listfocus           white     blue bold
color listfocus_unread    yellow     blue bold
color info                cyan      color235 bold standout
color article             white      default

# highlights
highlight article "^(Feed|Link):.*$" yellow default bold
highlight article "^(Title|Date|Author):.*$" yellow default bold
highlight article "https?://[^ ]+" blue default underline
highlight article "\\[[0-9]+\\]" yellow default bold
highlight article "\\[image\\ [0-9]+\\]" yellow default bold
highlight feedlist "^─.*$" yellow color235 bold

and it's quite suited for terminal gruvbox colorscheme. As you can see, it doesn't only allow to declare colors, but it also allows to configure highlights with regex.

Colorscheme setup depends on your terminal colorscheme, and it is a trial-and-error process to find the perfect one for you.

Other informations can be found, of course, in the official documentation[10], in the manpage[11] or in the Arch Wiki[12].

10. Official documentation

11. manpage

12. Arch Wiki page for newsboat.