aboutsummaryrefslogtreecommitdiff
path: root/Emacs/.config/emacs
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2025-02-17 14:53:54 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2025-02-17 15:02:13 +0000
commit70940c79bde48b9c9102f5e829953dbc6913bdce (patch)
treee58c318b2f7db0152bb13d9c4d69297d6a95ed06 /Emacs/.config/emacs
parentcd58595d2e4a59f6fa733ca25faf29aaae5a1968 (diff)
downloaddotfiles-70940c79bde48b9c9102f5e829953dbc6913bdce.tar.gz
dotfiles-70940c79bde48b9c9102f5e829953dbc6913bdce.tar.bz2
dotfiles-70940c79bde48b9c9102f5e829953dbc6913bdce.zip
Rework elfeed
All my feeds are stored in a separate org file. I've written a parser `elfeed-org` which parses the headings-as-links with the overarching tags into a format for `elfeed-feeds`. Why didn't I use the third-party elfeed-org package? It uses an older version of org which straight will clone entirely. Don't want two versions of org, and its a task just simple enough for me to do myself.
Diffstat (limited to 'Emacs/.config/emacs')
-rw-r--r--Emacs/.config/emacs/.config/elfeed/feeds.org18
-rw-r--r--Emacs/.config/emacs/config.org61
-rw-r--r--Emacs/.config/emacs/elisp/elfeed-org.el56
3 files changed, 88 insertions, 47 deletions
diff --git a/Emacs/.config/emacs/.config/elfeed/feeds.org b/Emacs/.config/emacs/.config/elfeed/feeds.org
new file mode 100644
index 0000000..2b8a46d
--- /dev/null
+++ b/Emacs/.config/emacs/.config/elfeed/feeds.org
@@ -0,0 +1,18 @@
+#+title: RSS Feeds
+#+author: Aryadev Chavali
+#+date: 2025-02-17
+
+* News :news:
+** [[https://www.archlinux.org/feeds/news/][Arch Linux]]
+* Social :social:
+** [[https://news.ycombinator.com/rss][Hacker News]]
+** [[https://www.theonion.com/rss][The Onion]]
+** [[https://www.hackerfactor.com/blog/index.php?/feeds/index.rss2][Hacker Factor]]
+* YouTube :youtube:
+** [[https://www.youtube.com/feeds/videos.xml?channel_id=UC0uTPqBCFIpZxlz_Lv1tk_g][Protesilaos Stavrou]]
+** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCrqM0Ym_NbK1fqeQG2VIohg][Tsoding Daily]]
+** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCrqM0Ym_NbK1fqeQG2VIohg][Tsoding]]
+** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCYO_jab_esuFRV4b17AJtAw][3B1B]]
+** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCbWcXB0PoqOsAvAdfzWMf0w][Fredrik Knusden]]
+** [[https://www.youtube.com/feeds/videos.xml?channel_id=UC9PIn6-XuRKZ5HmYeu46AIw][Barely Sociable]]
+** [[https://www.youtube.com/feeds/videos.xml?channel_id=UCn8OYopT9e8tng-CGEWzfmw][Atrocity Guide]]
diff --git a/Emacs/.config/emacs/config.org b/Emacs/.config/emacs/config.org
index 1f48a32..75a59e2 100644
--- a/Emacs/.config/emacs/config.org
+++ b/Emacs/.config/emacs/config.org
@@ -3623,10 +3623,7 @@ most distribution nowadays.
default-directory)))
(evil-set-initial-state 'rg-mode 'normal))
#+end_src
-** TODO Elfeed
-:PROPERTIES:
-:header-args:emacs-lisp: :tangle no :results none
-:END:
+** Elfeed
Elfeed is the perfect RSS feed reader, integrated into Emacs
perfectly. I've got a set of feeds that I use for a large variety of
stuff, mostly media and entertainment. I've also bound "<leader> ar"
@@ -3647,53 +3644,11 @@ it out again.
"<return>" #'elfeed-search-show-entry)
:init
(setq elfeed-db-directory (no-littering-expand-var-file-name "elfeed/"))
-
- (setq +rss/feed-urls
- '(("Arch Linux"
- "https://www.archlinux.org/feeds/news/"
- News Technology)
- ("The Onion"
- "https://www.theonion.com/rss"
- Social)
- ("Protesilaos Stavrou"
- "https://www.youtube.com/@protesilaos"
- YouTube Technology)
- ("Tsoding Daily"
- "https://www.youtube.com/feeds/videos.xml?channel_id=UCrqM0Ym_NbK1fqeQG2VIohg"
- YouTube Technology)
- ("Tsoding"
- "https://www.youtube.com/feeds/videos.xml?channel_id=UCrqM0Ym_NbK1fqeQG2VIohg"
- YouTube Technology)
- ("Nexpo"
- "https://www.youtube.com/feeds/videos.xml?channel_id=UCpFFItkfZz1qz5PpHpqzYBw"
- YouTube Stories)
- ("3B1B"
- "https://www.youtube.com/feeds/videos.xml?channel_id=UCYO_jab_esuFRV4b17AJtAw"
- YouTube)
- ("Fredrik Knusden"
- "https://www.youtube.com/feeds/videos.xml?channel_id=UCbWcXB0PoqOsAvAdfzWMf0w"
- YouTube Stories)
- ("Barely Sociable"
- "https://www.youtube.com/feeds/videos.xml?channel_id=UC9PIn6-XuRKZ5HmYeu46AIw"
- YouTube Stories)
- ("Atrocity Guide"
- "https://www.youtube.com/feeds/videos.xml?channel_id=UCn8OYopT9e8tng-CGEWzfmw"
- YouTube Stories)
- ("Hacker News"
- "https://news.ycombinator.com/rss"
- Social News Technology)
- ("Hacker Factor"
- "https://www.hackerfactor.com/blog/index.php?/feeds/index.rss2"
- Social)))
:config
(with-eval-after-load "evil-collection"
(evil-collection-elfeed-setup))
- (setq elfeed-feeds (cl-map 'list #'(lambda (item)
- (append (list (nth 1 item)) (cdr (cdr item))))
- +rss/feed-urls))
-
- (advice-add 'elfeed-search-show-entry :after #'+elfeed/dispatch-entry)
+ (advice-add 'elfeed-search-show-entry :after #'+elfeed/dispatch-entry)
(defun +elfeed/dispatch-entry (entry)
"Process each type of entry differently.
@@ -3704,6 +3659,18 @@ it out again.
(mpv-play-url url))
(_ (eww url))))))
#+end_src
+*** Elfeed-org
+#+begin_src emacs-lisp
+(use-package elfeed-org
+ :load-path "elisp/"
+ :after elfeed
+ :init
+ (thread-last "elfeed/feeds.org"
+ no-littering-expand-etc-file-name
+ (setq elfeed-org/file))
+ :config
+ (elfeed-org))
+#+end_src
** IBuffer
IBuffer is the dired of buffers. Nothing much else to be said.
diff --git a/Emacs/.config/emacs/elisp/elfeed-org.el b/Emacs/.config/emacs/elisp/elfeed-org.el
new file mode 100644
index 0000000..2b68acc
--- /dev/null
+++ b/Emacs/.config/emacs/elisp/elfeed-org.el
@@ -0,0 +1,56 @@
+;;; elfeed-org.el --- Org integration with elfeed -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2025 Aryadev Chavali
+
+;; Author: Aryadev Chavali <aryadev@aryadevchavali.com>
+;; Keywords:
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(defvar elfeed-org/file nil)
+
+(defun elfeed-org/--parse-link (context)
+ (thread-last (org-element-property :title context)
+ search-forward)
+ (let ((title-context (org-element-context)))
+ (org-element-property :raw-link title-context)))
+
+(defun elfeed-org/--parse-tags ()
+ (mapcar #'intern (org-get-tags)))
+
+(defun elfeed-org/--parse-headline ()
+ (if-let* ((ctx (org-element-context))
+ (link (elfeed-org/--parse-link ctx))
+ (tags (elfeed-org/--parse-tags)))
+ (cons link tags)
+ nil))
+
+(defun elfeed-org/--parse-headlines ()
+ (cl-remove-if
+ #'null
+ (org-map-entries #'elfeed-org/--parse-headline t)))
+
+(defun elfeed-org ()
+ (setq elfeed-feeds
+ (with-current-buffer (find-file-noselect elfeed-org/file)
+ (elfeed-org/--parse-headlines))))
+
+(provide 'elfeed-org)
+;;; elfeed-org.el ends here