How I read things on the Internet now (no, of course I don't leave the terminal!)
I've been sprucing up how I follow what's happening on the Internet. I can now read all the things I want to read pretty efficiently, and enjoy doing it, which is exciting.
The problem
I like to read things on the Internet sometimes. Or listen to things. Or watch things.
Some interesting people write blog posts. Some beautiful people make music. Some silly people make comedy sketches. Sometimes my friends are sharing stuff with their friends, which means me (WIP on that front: I’ll get back to that).
I want to know about it. I want to read interesting things that will educate me. I want to hear beautiful music. I want to hear about what my friends are up to.
I can’t read everything as it comes in, it’s too much: I’ll need to sift a lot of it out quickly. I’ll need to sift through it regularly to stay on top of it: like, several times a week, if not daily. And sometimes, while I’m doing my daily sifting, I’ll find something I really want to read, but I haven’t got time right now: I’ll save this for the weekend.
For a while, I’ve been hosting CommaFeed on PikaPods. This has been OK (OMG, RSS is cool), but the interface is just clunky enough to make it a chore to use. That means I don’t sift through stuff regularly, and that means my feed piles hundreds of unread posts high.
It also hasn’t been any good for distinguishing between stuff I don’t want to read ever, and stuff I don’t want to read right now but will get round to later. I could in theory use the bookmarking feature built-in to my browser, but removing things after I’ve read them is too clunky, so I don’t do it.
The solution
Every morning, I open my terminal and run newsboat.
I know the unread count is pretty fresh, because I’ve set up a systemd service to run newsboat at startup to fetch the feeds.
I press l
twice to open a post. Then I press n
to navigate to the next
unread post until I run out of unread posts.
If I encounter something I want to read later, but don’t have time right now, I
press b
, which runs a home-made bookmarking script. Here it is:
### readlater.sh ###
# newsboat passes a few arguments:
# the first one is the post URL
url="$1"
# I turn the URL into a suitable filename
filename=$( \
echo $url | \
sed "s/.*:\/\///" | \
sed "s/\//./g" | \
sed "s/\.html\$//g" \
)
filename="$filename".html
# If I've already got this in my reading list,
# I don't add it again
if [[ -a "$HOME/readlist/unread/$filename" ]]
then
exit 0
fi
# Otherwise, I download the post with curl
# and pipe it to a file in my reading list
# folder, ~/readlist/unread
curl "$url" > "$HOME/readlist/unread/$filename"
I can also run this script manually and pass it a URL of my choice at any time, say, if I find an interesting article while browsing the Web.
When I want to read from my reading list, I run readnow.sh
, which simply
opens my reading list folder, ~/readlist/unread
, in my terminal file browser
of choice: namely, ranger.
Although ranger has a preview, I’ll typically open the file up in my terminal
web browser of choice, which is w3m (plus a couple of custom
key-bindings). I’ve configured this to be my preferred web browser in ranger by
shifting it to the top of the list of HTML browsers in
~/.config/ranger/rifle.conf
.
### ~/.config/ranger/rifle.conf ###
...
ext x?html?, has w3m, terminal = w3m "$@"
ext x?html?, ...
...
Having configured my default web browser in my ranger config, all
I need to do is press l
.
No ads, no cookie popups, no giant banner images taking 2 seconds to load and shifting the content all over the place: just the text I want to read. Isn’t it beautiful?
Once I’m finished reading the post, I’ll press q
to quit w3m and return to
ranger. Assuming I don’t need to read it again, I’ll press dm
to move the
post to ~/readlist/read
- my way of marking a post as ‘read’.
I’ve done this by writing a super simple script, markread.sh
:
### markread.sh ###
filename="$(basename $1)"
if [[ -a "$HOME/readlist/unread/$filename" ]]
then
mv "$HOME/readlist/unread/$filename" "$HOME/readlist/read/$filename"
echo "Marked $filename as read."
else
echo "I couldn't find a file in ~/readlist/unread with the name: $filename"
fi
…and hooking it onto the custom keybinding, dm
, in ranger:
### ~/.config/ranger/rc.conf ###
...
# map `dm` to run markread.sh in the shell, providing the active filename
# as the first and only argument
map dm shell markread.sh %f
...
The result
I can now keep up to date, and I enjoy doing it.
I get not everyone likes to live in the terminal. I think the key takeaways are:
- Make it really easy to sift through new posts
- When you sift, sift through every post, and for each one, either read it straight away, or add it to your reading list
- Sift daily
- Make it really easy to add things to your reading list
- Make it really easy to browse, read things, and mark things read in your reading list
- Set aside time to catch up on your reading list
- Make the whole thing joyful (both because joy is good, and because you won’t do it otherwise)
Next steps
I still haven’t really figured out social media. I’d like to stay up to date with what my friends are doing, especially the ones I don’t see very often. If my friends are posting stuff on the Internet, I’d love to see it.
I still need to know:
- Are my friends posting stuff on the Internet?
- If so, where?
- What’s the best way of subscribing to their posts - even if they live on different websites and in different formats?
- What’s the best way of sending and receiving comments/replies/reactions?
TBC. Answers on a postcard please.