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.
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].
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:
- contents are not filtered by an algorithm that decides what you are allowed to see: RSS feed readers just show you everything from the website you added. No filter bubble[5], you own the information you want to read;
- they aren't constantly fighting for your attention. Social media use different techniques to manipulate and to tempt you to browse on their platform – constantly. RSS readers don't do that;
- RSS readers are flexible. This is really important: when Facebook or Reddit fuck up, you have no alternatives. You're forced to use them to read their contents, even when they start going against your interests. When an RSS reader application doesn't fit you anymore, you simply switch to another one. That's it;
- RSS readers that are free and open source[6] (on Android, install F-Droid and use Flym or Feeder) don't track their users. This is important: your interests and reads will not be randomly collected by whatsoever social media advertizing platform you're signed in.
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].
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.
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].