← Back to home

>Newsboat_


Allthough I’ve riced newsboat, this will be a guide focusing on the important aspect of the program. Newsboat allows the user to read RSS/Atom feeds, which are usually generated by the website itself or sometimes by a frontend or third party app. The main reason to use this program is the fact that you won’t need an account in sites such as Youtube, Reddit, or Twitter anymore. Also, that you’ll have sort of a centralized way to consume (which includes reading text, listening to podcasts or watching videos) pretty much any site on the internet by using only a terminal program, which is by far faster and more desirable. This guide includes:

  • Brief explanation on how it works (program is very intuitive to use)
  • Setup of other programs
  • Running newsboat in the background so it notifies the user when new article appears (optional)
  • Multiple macro configurations that you might find very useful (optional but HIGHLY recommended)

Installation

The software is at almost any repository. In case it is not on your distro, you can always build it from source.

For Arch-based systems:

pacman -S newsboat mpv

I use firefox for opening up links (unless is the article has only text) and mpv to reproduce videos and audios. You can use any other browser and media player obviously. Or, you can use something like w3m to read text, but remember to change it as the browser when setting up the program.

Also, if you want to download videos/audios I recommend installing yt-dlp from its github’s repository. The installation is straightforward and the software is easier to update by using yt-dlp -U once needed. This program is a fork of the discontinued youtube-dl which may still appear in some distro’s repositories.

Configuration

Newsboat

Newsboat won’t run unless the file urls has something inside. Both config and urls files are at either $HOME/.newsboat or $XDG_CONFIG_HOME/newsboat. Put something inside the urls file. I recommend using the following frontends for getting the feeds:

  • Twitter -> nitter
  • Youtube -> Invidious
  • Reddit -> teddit

Say you want to add the youtube channel HydeWars to your feed. It will look like this:

https://vid.puffyan.us/feed/channel/UCfUaZ8Ra7m7BqUEACv2jySw

So basically, you need to get the channel’s ID which is UCfUaZ8Ra7m7BqUEACv2jySw and add it at the end of the url, where vid.puffyan.us is an instance of Invidious. How you find the ID of a YT channel is a matter of having at least a 2 digits IQ. If you don’t want to use an Invidious instance, you can go to any Youtube channel and view the souce code, filter keyword rss and see how the URL looks.

You can also tag URLs and then press t by adding the tag at the end of the string after a blank space:

https://vid.puffyan.us/feed/channel/UCfUaZ8Ra7m7BqUEACv2jySw MDE

Now open config file and add:

# GENERAL #
reload-time 30 
auto-reload yes
browser "setsid -f $BROWSER --new-tab %u > /dev/null 2>&1"
cleanup-on-quit yes
history-limit 2000
show-keymap-hint no
goto-next-feed no
error-log ".config/newsboat/error.log"
prepopulate-query-feeds yes
suppress-first-reload yes

# NOTIFICATIONS #
notify-always no 
notify-program "/usr/bin/dunstify"
notify-format "Newsboat: %d new articles"

Line 4 sets up the browser and forks it, while opening the url in a new tab. In my case, I have an env var set to firefox. Change $BROWSER to your browser’s name or software for reading text, if you need to. Then, for notifications I use dunstify but you can use whatever you like. Rest is self explanatory, but keep in mind that if you are going to setup notifications you should keep reload-time and auto-reload as they are.

Optionally, you can set up vim-like bindings:

# Vim keybindings
unbind-key j
unbind-key k
unbind-key ENTER
unbind-key o 

bind-key o open 
bind-key k up
bind-key j down

Mpv

Open $XDG_CONFIG_HOME/mpv/mpv.conf and add:

# Cache
cache=yes
--stream-buffer-size=8MiB

# Quality stream
ytdl-format=bestvideo[height<=?720]+bestaudio/best

# Yt-dlp hook
script-opts-append=ytdl_hook-ytdl_path=yt-dlp

This sets up a yt-dlp hook that will make the streaming faster. Also, if you want higher/lesser quality, change the height value.

Yt-dlp

I recommend you to set up a download folder. Open up $XDG_CONFIG_HOME/yt-dlp/config and add:

-o '/path/to/folder/%(title)s.%(ext)s'

This will save the video/audio to a folder using metadata.

Running newsboat through a script for notifications

Instead of running newsboat directly, I use a simple script so it is always on the background. You can also achieve this with cronjobs.

#!/bin/sh

while true; do
    kill $(pidof newsboat)
    rm $XDG_CONFIG_HOME/newsboat/queue
    $TERMINAL -e newsboat
    if [[ $? == 0 ]] ; then
        exec newsboat && break
    else
        break
    fi
done

chmod +x the script and remember to use it instead of directly executing newsboat. In my case, I use an i3’s keybinding for quick access, and also for executing the script only one time as soon as the window manager initializes.

Macros

A macro is used for executing a sequence of commands by pressing a key or a combination of keys. In our case, for using the browser setting as not really a browser, but anything we like. For example, as a media player to reproduce a YT video. To execute a macro press , + key.

Here is a list of some macros I’ve came up with that are very useful (add them to newsboat’s config file):

Queue videos, clear playlist and reproduce playlist

macro a set browser "echo %u >> ~/.config/newsboat/queue" ; open-in-browser ; set browser "$BROWSER %u"
macro c set browser "rm $HOME/.config/newsboat/queue > /dev/null 2>&1" ; open-in-browser ; set browser "$BROWSER %u"
macro p set browser "kill $(pidof mpv) ; setsid -f mpv --playlist=$HOME/.config/newsboat/queue > /dev/null 2>&1" ; open-in-browser ; set browser "$BROWSER %u"

The idea of these 3 macros is creating, playing or deleting a playlist. If you take a look at the script in the previous section, this file named queue gets deleted when the script executes. For adding videos or even audios to said file you need to focus the article on a feed.

Play queued videos fullscreen second monitor

macro P set browser "kill $(pidof mpv) ; setsid -f mpv --x11-name=newsboatfs --fullscreen=yes --playlist=$HOME/.config/newsboat/queue > /dev/null 2>&1" ; open-in-browser ; set browser "$BROWSER %u"

Play video

macro v set browser "kill $(pidof mpv) ; setsid -f mpv %u > /dev/null 2>&1" ; open-in-browser-and-mark-read ; set browser "$BROWSER %u" 

Play video floating mode

macro i set browser "kill $(pidof mpv) ; setsid -f mpv --x11-name=mpvfloat %u > /dev/null 2>&1" ; open-in-browser-and-mark-read ; set browser "$BROWSER %u"

Play audio only

macro A set browser "kill $(pidof mpv) ; setsid -f mpv %u --no-video > /dev/null 2>&1" ; open-in-browser-and-mark-read ; set browser "$BROWSER %u" 

Play fullscreen, i3 sends it to second monitor (useful for playing all the videos from a channel)

macro f set browser "kill $(pidof mpv) ; setsid -f mpv --x11-name=newsboatfs --fullscreen=yes %u > /dev/null 2>&1" ; open-in-browser ; set browser "$BROWSER %u"

Download video

macro y set browser "yt-dlp %u" ; open-in-browser ; set browser "$BROWSER %u"

Open in default browser

macro o open-in-browser

NOTE: Keep in mind that for sending the videos/articles to another monitor you need to rename the X instance to whatever you like so you can then manipulate it with your window manager. Using i3 would look like this:

for_window [instance="newsboatfs"] move container to workspace $ws10
for_window [instance="mpvfloat"] floating enable, resize set 960 540, move container position center 

Where $ws10 outputs to HDMI-1:

workspace "10" output HDMI-1

Use xrandr to know display names.