summaryrefslogtreecommitdiff
path: root/content/emacs/elfeed-literate-config.md
blob: 4876c6e6b1f79c324f1dad33e6203a92992f02fc (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
---
title: "Literate configuration of Elfeed"
category: emacs
abstract: Setting up config inside an org file
date: 2023-06-02T22:26:24+02:00
year: 2023
draft: false
tags:
- elfeed
- org-mode
- literate-programming
---
Recently I've been toying with a literate configuration[^literate] of Emacs. My init.el took a straightforward form:
[^literate]: https://en.wikipedia.org/wiki/Literate_programming

{{<highlight lisp "linenos=table">}}
(org-babel-load-file "~/.emacs.d/config.org")
{{</highlight>}}

And all of my configuration lives in an org-file. This alone gives me very little benefit for now, but in the future, it will make it easier to have it as a dedicated page on this site.

However, one thing completely surprised me: the elfeed configuration. Until now, I used the standard way of configuring feeds with Elisp. It works, but what it is not is readable. A list of:

{{<highlight lisp "linenos=true,linenostart=199">}}
("https://gideonwolfe.com/index.xml" blog imporant)
("https://fabiensanglard.net/rss.xml" blog important)
("https://protesilaos.com/master.xml" emacs)
{{</highlight>}}

is far from being manageable and requires constant manual labor.

### Elfeed-org

One of the packages expanding capabilities of elfeed is elfeed-org[^elf-org]. It allows configuring the list of feeds with a standard org tree. Since my config is now also an org file, nothing stops me from adding the list as an org-tree inside my config org-file! I set it up via:
[^elf-org]: https://github.com/remyhonig/elfeed-org

{{<highlight lisp "linenos=table,linenostart=199,hl_lines=7">}}
*** elfeed-org

#+BEGIN_SRC emacs-lisp
  (use-package elfeed-org
  :ensure t
  :config
  (setq rmh-elfeed-org-files (list "~/.emacs.d/config.org"))
  (elfeed-org))
#+END_SRC
{{</highlight>}}

Therefore, I am now pointing at the same file to become the data source for elfeed-org as the rest of my config. Just a few lines down, I start to define my list of subscriptions:

{{<highlight org "linenos=table,linenostart=207">}}
*** Feeds :elfeed:

**** Blogs

***** https://gideonwolfe.com/index.xml      :important:
***** https://fabiensanglard.net/rss.xml.    :important:

**** Emacs

***** https://protesilaos.com/master.xml     :important:
{{</highlight>}}

Much more readable! Elfeed-org will ignore the entire outer tree and extract the feeds from leaves under the `:elfeed:` tag.