{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreibdmt3kd3k2oivlxcttp73p77eaegn6qz7nnxm3jwhm3jgyaql6wu",
    "uri": "at://did:plc:s67opkie37qfdnrjagqiarmh/app.bsky.feed.post/3mm2gw22zsa52"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreigs63x6hmyxxpktpo2rm3zstddhc3tohtgnabudun2vjrene7jxcy"
    },
    "mimeType": "image/jpeg",
    "size": 178860
  },
  "path": "/terminal-user-interfaces-aerc-newsboat-tooi/",
  "publishedAt": "2026-05-16T19:11:00.000Z",
  "site": "https://tzovar.as",
  "tags": [
    "tui",
    "terminal user interfaces",
    "newsboat",
    "tooi",
    "aerc",
    "email",
    "made vim my only text editor again",
    "terminal (or text-base) user interface",
    "Gemini",
    "this toot about everything being vim all the way down",
    "FreshRSS",
    "self-hostable",
    "full-text",
    "link blog",
    "pass",
    "this quoted_reply template",
    "khard",
    "jan0sch shared his working solution",
    "Mastodon post",
    "aerc mail: Switching to khard and khal for addresses and calendars"
  ],
  "textContent": "\n\n\nDespite 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!\n\nBeyond 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.\n\n## Newsboat\n\nWhen 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.\n\nAs 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.\n\nThe 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.\n\nThe 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.\n\nLuckily, _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:\n\n`macro c set browser \"echo %u |xclip -selection clipboard\";open-in-browser-noninteractively; ;set browser firefox -- \"copy link to clipboard\"`\n\nThis runs a small chain of commands: First, it sets the ‘browser’ in _Newsboat_ to _pipe the current link to the`xclip` 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.\n\n## aerc\n\nWhich 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.\n\nMy 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.\n\n\n    source        = imap://email%40proton.me@127.0.0.1:1143\n    outgoing      = smtp://email%40proton.me@127.0.0.1:1025\n    source-cred-cmd = pass email/email@proton.me\n    outgoing-cred-cmd = pass email/email@proton.me\n\n\nI 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:\n\n\n    folders-sort = INBOX, Folder A, Folder B, Folder C, Drafts, Sent, All Mail\n    folders-exclude = ~Labels*\n    folder-map   = ~/.config/aerc/folder-map.map\n\n\nThe `folder-map` file mainly just contains one line, `* = Folders/*` to remove the now superfluous `Folders` prefix from all displayed folders.\n\nFor 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’:\n\n\n    [ui]\n    sidebar-width=30\n    dirlist-tree=true\n    styleset-name=dracula\n    threading-enabled = true\n    [compose]\n    reply-to-self=false\n\n\nThe 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`.\n\nThis 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.\n\nHaving 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)!\n\n## References\n\n  1. Greshake Tzovaras, B. (2024, July 4). Seizing my means of computation. Bastian Greshake Tzovaras. https://doi.org/10.59350/yxk84-qee36\n  2. Greshake Tzovaras, B. (2025, February 28). Getting my pages on gemini://. Bastian Greshake Tzovaras. https://doi.org/10.59350/qvqc0-22f67\n  3. Brown, Neil (2026, May 16) Mastodon post\n  4. Greshake Tzovaras, B. (2024, September 10). Self-deploying more of my own small web. Bastian Greshake Tzovaras. https://doi.org/10.59350/3etx1-k5q13\n  5. 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\n  6. Greshake Tzovaras, B. (2025, June 6). Making a link blog. Bastian Greshake Tzovaras. https://doi.org/10.59350/38asy-nhd24\n  7. jan0sch (2023, September 29) aerc mail: Switching to khard and khal for addresses and calendars\n\n",
  "title": "Enjoying terminal user interfaces: aerc, newsboat and tooi",
  "updatedAt": "2026-05-16T19:11:00.000Z"
}