Replacing elfeed with newsticker (built-in)

Intro: Are my decisions, mine?

Skip this if you are only here of the Emacs bits!

The other day someone asked me what I chose caddy over nginx for my reverse proxy.

That's a great question, why?

Caddy has some great quality-of-life features, such as configuring TLS out of the box for you whereas nginx does not.

But how hard is it to configure TLS? Well, I wouldn't know. I never used nginx.

And here is the interesting part. Why did I choose caddy, if it solves a pain I never felt?

The truth is, I didn't choose caddy; I let others choose it for me.

I read online somewhere that someone was using caddy, and simply followed.

And this prevented me from investing a few hours in understanding how to setup TLS for a domain using an ubiquitous and trusted, widely available technology.

It's intriguing that I went straight to get the solution to a problem I didn't have.

In this case, it is not an issue: caddy is a great tool.

But it made me wonder: how often my thoughts are truly mine? How often my decision are mine?

I consume tons of information. I read a lot. Listen to many podcasts.

It feels like thinking, but is it? I am not so sure.

I want to cultivate my critical thinking. I believe it's a muscle that is easy to not exercise in our modern world.

For the last few months, I have started to really try to protect my thinking space fiercely.

For example I turned off comments on Youtube by default. I avoid listening to podcast first thing in the morning. I write a book review before looking at what others think of the book.

I want to force myself to think before yielding my thinking to some strangers online.

This is my frame of mind for deciding to give newstickers a go rather than using elfeed.

My newsticker configuration

This is my configuration:

  • olivetti-mode is enabled (it centers the text, a.k.a. 'Zen mode'1), and the article window is selected.
  • variable-pitch-mode is enabled to improve readability.
  • TAB and S-TAB are set to jump to links (and back). Once on a link, Enter will open the link at point in eww.
  • q is set to newsticker-treeview-quit everywhere, so all newstickers buffers are closed.
  • the mode-line are hidden to remove distraction. I have thin borders to keep each window distinct.

I played with the idea of modifying newsticker--treeview-window-init to use vertical panes for the list of articles to mimick elfeed, but in the end I prefer the layout proposed by newstickers. It is a bit on the heavy side

Now I hit "C-c e e" and newstickers opens. I use f and F to selected my next or previous feed. n and p to select the next article of the current feed, or N to select the next unread of any feed. Finally, I can use i to mark an article as "immortal" so it is never removed.

This does everything I need from my RSS feed.

(use-package newsticker
  :bind
  (("C-c e e" . #'newsticker-show-news))
  :hook
  ((newsticker-treeview-item-mode . my/setup-newsticker)
    ((newsticker-treeview-mode
       newsticker-treeview-list-mode
       newsticker-treeview-item-mode) . my/hide-mode-line))
  :preface
  (defun my/hide-mode-line ()
    (setq mode-line-format nil))
  (defun my/setup-newsticker()
    (olivetti-mode)
    (variable-pitch-mode)
    ;; Focus on the article window
    (select-window (newsticker--treeview-item-window)))
  :config
  ;; Set the key TAB and S-TAB to be bound to shr-next-link and shr-previous-link to cycle through links easily
  (keymap-set newsticker-treeview-item-mode-map "TAB" #'shr-next-link)
  (keymap-set newsticker-treeview-item-mode-map "<backtab>" #'shr-previous-link)
  ;; set q to quit tree view (I only use tree view)
  (keymap-set newsticker-mode-map "q" #'newsticker-treeview-quit)
  ;; hide the mode line on newsticker-mode and newsticker-treeview-mode
  (add-to-list 'display-buffer-alist
    '((or (derived-mode . newsticker-mode)
          (derived-mode . newsticker-treeview-mode))
       (display-buffer-use-some-window)
       (window-parameters . ((mode-line-format . none)))))
  :custom
  (newsticker-automatically-mark-items-as-old nil) ;; Only mark as old (read) when opened
  (newsticker-url-list
    '(("Derek Sivers" "https://sive.rs/en.atom")
       ("Drew DeVault's blog" "https://drewdevault.com/blog/index.xml")
       ("Fritz Gabo" "https://fritzgrabo.com/posts/rss.xml")
       ("Joshua Blais" "https://joshblais.com/index.xml")
       ("mccd.space" "https://mccd.space/feed.xml")
       ("Ploum" "https://ploum.net/atom_en.xml")
       ("Ratfactor Feed" "https://ratfactor.com/atom.xml")
       ("Sophie Koonin" "https://localghost.dev/feed.xml")
       ("Sourcery Zone" "https://sourcery.zone/index.xml")
       ("Xenodium, solopreneur and emacs" "https://xenodium.com/rss")
       ("マリウス" "https://xn--gckvb8fzb.com/index.xml")
       ("James Cherti" "https://www.jamescherti.com/feed/")
       ("Planet Emacslife" "https://planet.emacslife.com/atom.xml")
       ("Wai Hon's Blog" "https://whhone.com/index.xml"))))

Thank you for reading, Aloys.

Footnotes:

1

Surely I could write my own Olivetti?