summaryrefslogtreecommitdiff
path: root/guides/consume-media-the-right-way-newsboat/index.html
blob: ebef5a1462ca538dc3947d2133ee0664a255a3d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
<!DOCTYPE html>
<html lang="en">

    <head><title>Newsboat &ndash; dd</title>


<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<meta name="robots" content="index, follow">
<meta name="description" content="Minimal and personal website about GNU/Linux guides and other stuff">
<meta name="keywords" content="linux, hosting, guides, tech, blog, networking, memes">
<meta name="author" content="mb">


<link rel="shortcut icon" href="/images/favicon.ico">


<link rel="stylesheet" href="https://drainerdomain.xyz/css/dark.css">
</head>
    <body>
        <div class="page">
            <section>
    <a class="home" href="/index.html">← Back to home</a>
    <header class="content__header">
        <h1>>Newsboat_</h1>
        <hr>
    </header>
    <div class="content__body">
        <p>Allthough I&rsquo;ve riced <a href="https://github.com/newsboat/newsboat">newsboat</a>, 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&rsquo;t need an account in sites such as Youtube, Reddit, or Twitter anymore. Also, that you&rsquo;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:</p>
<ul>
<li>Brief explanation on how it works (program is very intuitive to use)</li>
<li>Setup of other programs</li>
<li>Running newsboat in the background so it notifies the user when new article appears (optional)</li>
<li>Multiple macro configurations that you might find very useful (optional but HIGHLY recommended)</li>
</ul>
<h1 id="installation">Installation</h1>
<p>The software is at almost any repository. In case it is not on your distro, you can always build it from source.</p>
<p>For Arch-based systems:</p>
<pre tabindex="0"><code>pacman -S newsboat mpv
</code></pre><p>I use <code>firefox</code> for opening up links (unless is the article has only text)  and <code>mpv</code> to reproduce videos and audios.
You can use any other browser and media player obviously. Or, you can use something like <code>w3m</code> to read text, but remember to change
it as the browser when setting up the program.</p>
<p>Also, if you want to download videos/audios I recommend installing <a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a> from its github&rsquo;s repository.
The installation is straightforward and the software is easier to update by using <code>yt-dlp -U</code> once needed. This program is a fork of the discontinued
<code>youtube-dl</code> which may still appear in some distro&rsquo;s repositories.</p>
<h1 id="configuration">Configuration</h1>
<h2 id="newsboat">Newsboat</h2>
<p>Newsboat won&rsquo;t run unless the file <code>urls</code> has something inside. Both <code>config</code> and <code>urls</code> files are at either <code>$HOME/.newsboat</code> or <code>$XDG_CONFIG_HOME/newsboat</code>.
Put something inside the <code>urls</code> file. I recommend using the following frontends for getting the feeds:</p>
<ul>
<li>Twitter -&gt; nitter</li>
<li>Youtube -&gt; Invidious</li>
<li>Reddit -&gt; teddit</li>
</ul>
<p>Say you want to add the youtube channel <code>HydeWars</code> to your feed. It will look like this:</p>
<pre tabindex="0"><code>https://vid.puffyan.us/feed/channel/UCfUaZ8Ra7m7BqUEACv2jySw
</code></pre><p>So basically, you need to get the channel&rsquo;s ID which is <code>UCfUaZ8Ra7m7BqUEACv2jySw</code> and add it at the end of the url, where
<code>vid.puffyan.us</code> 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&rsquo;t want to use an Invidious instance, you can go to any Youtube channel and view the souce code, filter keyword <code>rss</code> and
see how the URL looks.</p>
<p>You can also tag URLs and then press <code>t</code> by adding the tag at the end of the string after a blank space:</p>
<pre tabindex="0"><code>https://vid.puffyan.us/feed/channel/UCfUaZ8Ra7m7BqUEACv2jySw MDE
</code></pre><p>Now open <code>config</code> file and add:</p>
<pre tabindex="0"><code># GENERAL #
reload-time 30 
auto-reload yes
browser &#34;setsid -f $BROWSER --new-tab %u &gt; /dev/null 2&gt;&amp;1&#34;
cleanup-on-quit yes
history-limit 2000
show-keymap-hint no
goto-next-feed no
error-log &#34;.config/newsboat/error.log&#34;
prepopulate-query-feeds yes
suppress-first-reload yes

# NOTIFICATIONS #
notify-always no 
notify-program &#34;/usr/bin/dunstify&#34;
notify-format &#34;Newsboat: %d new articles&#34;
</code></pre><p>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 <code>firefox</code>. Change <code>$BROWSER</code> to your browser&rsquo;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 <code>reload-time</code> and <code>auto-reload</code> as they are.</p>
<p>Optionally, you can set up vim-like bindings:</p>
<pre tabindex="0"><code># 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
</code></pre><h2 id="mpv">Mpv</h2>
<p>Open <code>$XDG_CONFIG_HOME/mpv/mpv.conf</code> and add:</p>
<pre tabindex="0"><code># Cache
cache=yes
--stream-buffer-size=8MiB

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

# Yt-dlp hook
script-opts-append=ytdl_hook-ytdl_path=yt-dlp
</code></pre><p>This sets up a <code>yt-dlp</code> hook that will make the streaming faster. Also, if you want higher/lesser quality, change the height value.</p>
<h2 id="yt-dlp">Yt-dlp</h2>
<p>I recommend you to set up a download folder. Open up <code>$XDG_CONFIG_HOME/yt-dlp/config</code> and add:</p>
<pre tabindex="0"><code>-o &#39;/path/to/folder/%(title)s.%(ext)s&#39;
</code></pre><p>This will save the video/audio to a folder using metadata.</p>
<h1 id="running-newsboat-through-a-script-for-notifications">Running newsboat through a script for notifications</h1>
<p>Instead of running newsboat directly, I use a simple script so it is always on the background. You can also achieve this with cronjobs.</p>
<pre tabindex="0"><code>#!/bin/sh

while true; do
    kill $(pidof newsboat)
    rm $XDG_CONFIG_HOME/newsboat/queue
    $TERMINAL -e newsboat
    if [[ $? == 0 ]] ; then
        exec newsboat &amp;&amp; break
    else
        break
    fi
done
</code></pre><p><code>chmod +x</code> the script and remember to use it instead of directly executing newsboat. In my case, I use an i3&rsquo;s keybinding for quick access, and also
for executing the script only one time as soon as the window manager initializes.</p>
<h1 id="macros">Macros</h1>
<p>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 <code>,</code> + <code>key</code>.</p>
<p>Here is a list of some macros I&rsquo;ve came up with that are very useful (add them to newsboat&rsquo;s config file):</p>
<h2 id="queue-videos-clear-playlist-and-reproduce-playlist">Queue videos, clear playlist and reproduce playlist</h2>
<pre tabindex="0"><code>macro a set browser &#34;echo %u &gt;&gt; ~/.config/newsboat/queue&#34; ; open-in-browser ; set browser &#34;$BROWSER %u&#34;
macro c set browser &#34;rm $HOME/.config/newsboat/queue &gt; /dev/null 2&gt;&amp;1&#34; ; open-in-browser ; set browser &#34;$BROWSER %u&#34;
macro p set browser &#34;kill $(pidof mpv) ; setsid -f mpv --playlist=$HOME/.config/newsboat/queue &gt; /dev/null 2&gt;&amp;1&#34; ; open-in-browser ; set browser &#34;$BROWSER %u&#34;
</code></pre><p>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 <code>queue</code> gets deleted when the script executes.
For adding videos or even audios to said file you need to focus the article on a feed.</p>
<h2 id="play-queued-videos-fullscreen-second-monitor">Play queued videos fullscreen second monitor</h2>
<pre tabindex="0"><code>macro P set browser &#34;kill $(pidof mpv) ; setsid -f mpv --x11-name=newsboatfs --fullscreen=yes --playlist=$HOME/.config/newsboat/queue &gt; /dev/null 2&gt;&amp;1&#34; ; open-in-browser ; set browser &#34;$BROWSER %u&#34;
</code></pre><h2 id="play-video">Play video</h2>
<pre tabindex="0"><code>macro v set browser &#34;kill $(pidof mpv) ; setsid -f mpv %u &gt; /dev/null 2&gt;&amp;1&#34; ; open-in-browser-and-mark-read ; set browser &#34;$BROWSER %u&#34; 
</code></pre><h2 id="play-video-floating-mode">Play video floating mode</h2>
<pre tabindex="0"><code>macro i set browser &#34;kill $(pidof mpv) ; setsid -f mpv --x11-name=mpvfloat %u &gt; /dev/null 2&gt;&amp;1&#34; ; open-in-browser-and-mark-read ; set browser &#34;$BROWSER %u&#34;
</code></pre><h2 id="play-audio-only">Play audio only</h2>
<pre tabindex="0"><code>macro A set browser &#34;kill $(pidof mpv) ; setsid -f mpv %u --no-video &gt; /dev/null 2&gt;&amp;1&#34; ; open-in-browser-and-mark-read ; set browser &#34;$BROWSER %u&#34; 
</code></pre><h2 id="play-fullscreen-i3-sends-it-to-second-monitor-useful-for-playing-all-the-videos-from-a-channel">Play fullscreen, i3 sends it to second monitor (useful for playing all the videos from a channel)</h2>
<pre tabindex="0"><code>macro f set browser &#34;kill $(pidof mpv) ; setsid -f mpv --x11-name=newsboatfs --fullscreen=yes %u &gt; /dev/null 2&gt;&amp;1&#34; ; open-in-browser ; set browser &#34;$BROWSER %u&#34;
</code></pre><h2 id="download-video">Download video</h2>
<pre tabindex="0"><code>macro y set browser &#34;yt-dlp %u&#34; ; open-in-browser ; set browser &#34;$BROWSER %u&#34;
</code></pre><h2 id="open-in-default-browser">Open in default browser</h2>
<pre tabindex="0"><code>macro o open-in-browser
</code></pre><p>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:</p>
<pre tabindex="0"><code>for_window [instance=&#34;newsboatfs&#34;] move container to workspace $ws10
for_window [instance=&#34;mpvfloat&#34;] floating enable, resize set 960 540, move container position center 
</code></pre><p>Where <code>$ws10</code> outputs to <code>HDMI-1</code>:</p>
<pre tabindex="0"><code>workspace &#34;10&#34; output HDMI-1
</code></pre><p>Use <code>xrandr</code> to know display names.</p>

    </div>

            </section>
        </div>
            <footer class="page__footer"><ul class="buttons">
    
    <li>
        <a href="https://drainerdomain.xyz"><img src="/buttons/drainerdomain2.gif" alt="drainerdomain"></a>
    </li>
    
    <li>
        <a href="https://landchad.net"><img src="/buttons/landchad.gif" alt="LandChud"></a>
    </li>
    
    <li>
        <a href="https://tomfasano.net"><img src="/buttons/tomfasano.gif" alt="Tom Fasano"></a>
    </li>
    
    <li>
        <a href="https://neovim.io"><img src="/buttons/neovim.gif" alt="neovim"></a>
    </li>
    
    <li>
        <a href="https://gohugo.io"><img src="/buttons/hugo.gif" alt="neovim"></a>
    </li>
    
    <li>
        <a href="https://wiby.org"><img src="/buttons/wiby.gif" alt="wiby"></a>
    </li>
    
    <li>
        <a href="https://gnu.org"><img src="/buttons/gnu-linux.png" alt="gnu"></a>
    </li>
    
    <li>
        <a href="https://stephenvk.xyz"><img src="/buttons/stephenvk.gif" alt="stephenvk"></a>
    </li>
    
    <li>
        <a href="https://canoemail.net"><img src="/buttons/canoemail.gif" alt="canoemail services"></a>
    </li>
    
    <li>
        <a href="https://heaventreey.xyz"><img src="/buttons/heaventree.gif" alt="heaventree webring"></a>
    </li>
    
    <li>
        <a href="https://spyware.neocities.org"><img src="/buttons/spywaredotneocities.png" alt="spywarewatchdog"></a>
    </li>
    
    <li>
        <a href="https://getmonero.org"><img src="/buttons/getmonero.gif" alt="Get Monero"></a>
    </li>
    
    <li>
        <a href="https://digdeeper.neocities.org"><img src="/buttons/digdeeper.png" alt="Digdeeper"></a>
    </li>
    
</ul>
</footer>
    </body>

</html>