Enjoying terminal user interfaces: aerc, newsboat and tooi
Despite it being a good two years since I’ve made vim my only text editor again, I hadn’t really gotten deeper into using more terminal (or text-base) user interface (TUI) for a while. With Gemini I started reading gemtext, but that was mostly it. But then the tooi-client for Mastodon really became a game changer, both because of how well-made tooi is and due to how easy it makes it to quickly read through posts. Overall, that positive experience made me seek out some more options. I had planned to write up a bit about it, partially for my own note-taking, but then forgot until about reading this toot about everything being vim all the way down today!
Beyond reading gemini and Mastodon via the terminal – and writing my blog posts and code in vim , I’ve recently started to also push most of my reading of RSS feeds and reading/answering email into the text interface, with newsboat and aerc respectively. In addition to the quite distraction-free reading in a text-only environment - it also offers the huge advantage of being very comfortable to quickly handle large numbers of unread feed items or emails by just using the keyboard, something that no graphical interface I found for neither RSS nor email could provide in the same way.
Newsboat
When it comes to TUI’s for RSS, I’m not sure if there are any maintained alternatives to Newsboat , at least not when it comes to options that can interface with FreshRSS, my favorite, self-hostable back-end to synchronize full-text feeds between devices. At least my (extremely cursory) search didn’t find any.
As a fork of 2007’s Newsbeuter it’s been around a while, which makes it feel quite stable on the one hand. And a bit dated on the other. While tooi will use any available method to display tooted images in the terminal, Newsboat just strips this. Great for a reader -like view, not so great if you mostly read web-comics.
The integration with FreshRSS is easy to set-up though and works well: Just add a couple of lines to your .newsboat/config and you’re good to go. You can star items, the read status syncs well back and forth. And beyond FreshRSS, you can easily navigate around feeds and feed items – and with a bit of tweaking of the key bindings can get a good vim -like flow.
The one thing I missed: By default, you can open a given feed item (or links within it) in a ‘regular’ graphical browser, but there is no way to quickly copy the link to the given item to the clipboard. That is, unless I missed that option, but my search in the documentation wasn’t successful. I guess for most workflows/usecases, that’s not really a problem. But I quite regularly post cool links I find either into my the link blog here – or on Mastodon. And as both activities happen again in the terminal, via vim or tooi respectively, it felt a shame having to do an in-between step with a GUI browser.
Luckily, Newsboat is quite malleable, offering macros that can be triggered. And so I hacked around the open-in-browser setting to instead copy the link to the clipboard, when triggering it via a macro:
macro c set browser "echo %u |xclip -selection clipboard";open-in-browser-noninteractively; ;set browser firefox -- "copy link to clipboard"
This runs a small chain of commands: First, it sets the ‘browser’ in Newsboat to pipe the current link to thexclip clipboard. Then, it ‘opens’ the link in this ‘browser’, i.e. triggers the copy to clipboard. And lastly, resets the browser back to the default. Together, this allows me to just trigger the macro, and the current link is in the clipboard, ready to be re-used in *tooi, vim or aerc for sending an email.
aerc
Which brings us to aerc , my new TUI email client of choice. I feel like ages ago, I gave Mutt and pine a try, but never really warmed to it. And then for many years I just stuck with the Mac OS Mail , before going back to Thunderbird. But with increasing email volume, and the need/wish to be able to improve handling my inbox, I thought I just give it another go.
My current mail hoster is Proton , which due to the E2E store of mail requires using their Bridge software to use any regular email clients. Effectively, this bridge becomes a local IMAP/SMTP interface, allowing any email client to interface with those. This made it quite easy to get started, by just plopping in the bridge connection details.
source = imap://email%40proton.me@127.0.0.1:1143
outgoing = smtp://email%40proton.me@127.0.0.1:1025
source-cred-cmd = pass email/email@proton.me
outgoing-cred-cmd = pass email/email@proton.me
I also used the opportunity to setup pass for storing passwords. And with that it was good to go already, with just some more tweaking necessary: Between years of having used GMail and the Proton importer, the mailbox included countless Folders that were generated from former GMail Labels. As I don’t use those actively, I’m sure I could one day spend the hours to clean those up. But, luckily, aerc also allows modifying how and which folders are shown. So I could re-order some of the actual folders I use, and hide all of those labels:
folders-sort = INBOX, Folder A, Folder B, Folder C, Drafts, Sent, All Mail
folders-exclude = ~Labels*
folder-map = ~/.config/aerc/folder-map.map
The folder-map file mainly just contains one line, * = Folders/* to remove the now superfluous Folders prefix from all displayed folders.
For handling HTML-emails, I made some minor tweaks to the default settings: I use w3m for interactively rendering HTML emails, using the suggested filter format text/html = ! w3m -I UTF-8 -T text/html. To be able to open links from the w3m display in my regular browser, I added keymap o EXTERN_LINK to my ~/.w3m/keymap file, and removed a conflicting binding from the ~/.config/aerc/binds.conf. For being able to make quoted replies to HTML emails while keeping them readable, I went with this quoted_reply template (put in ~/.config/aerc/templates/quoted_reply, and then set in the aerc.conf as quoted-reply=quoted_reply): Otherwise, I mostly did a few tweaks to the config for the UI and reply behavior, to keep the folder and message lists as trees/threads and avoid replying to myself with ‘reply-all’:
[ui]
sidebar-width=30
dirlist-tree=true
styleset-name=dracula
threading-enabled = true
[compose]
reply-to-self=false
The only thing that was a bit trickier, completely due to how Proton does not give any external applications access to its address book, was getting a working address book. I don’t have (and don’t really want to have) a CardDAV server. So, instead I went with just making a static export of the Proton address book, as well as the collected addresses that Thunderbird makes as an address book from all received emails, and converted those vCard ’s, allowing me to use khard to interface with aerc. I first struggled a bit to get the formatting of the command just right, but luckily jan0sch shared his working solution that can be dropped into the accounts.conf: address-book-cmd = khard email --parsable --search-in-source-files --remove-first-line %s.
This makes aerc work really well for me, not only because I can write my email in vim now, but also as it makes wading through large volumes of emails very fast and easy, thanks to just running through keyboard shortcuts. And altogether, between these tools it gives me a terminal-based workflow for email, RSS, Mastodon and writing of any kind, that works really well for me. There’s likely still a lot of potential for further learning and tweaking bits and bobs (like, who is ever done learning vim alone!?), but even though, it’s already a great win as is.
Having said that: if you know FreshRSS-supporting TUI-clients for RSS, please let me know. And the same if there’s some settings I should check out (or maybe even other TUI alternatives)!
References
- Greshake Tzovaras, B. (2024, July 4). Seizing my means of computation. Bastian Greshake Tzovaras. https://doi.org/10.59350/yxk84-qee36
- Greshake Tzovaras, B. (2025, February 28). Getting my pages on gemini://. Bastian Greshake Tzovaras. https://doi.org/10.59350/qvqc0-22f67
- Brown, Neil (2026, May 16) Mastodon post
- Greshake Tzovaras, B. (2024, September 10). Self-deploying more of my own small web. Bastian Greshake Tzovaras. https://doi.org/10.59350/3etx1-k5q13
- Greshake Tzovaras, B. (2025, September 1). Creating full-text RSS/Atom feeds for any page with FreshRSS. Bastian Greshake Tzovaras. https://doi.org/10.59350/2z5a5-4d945
- Greshake Tzovaras, B. (2025, June 6). Making a link blog. Bastian Greshake Tzovaras. https://doi.org/10.59350/38asy-nhd24
- jan0sch (2023, September 29) aerc mail: Switching to khard and khal for addresses and calendars
Discussion in the ATmosphere