;;; app/rss/config.el -*- lexical-binding: t; -*- ;; This is an opinionated workflow that turns Emacs into an RSS reader, inspired ;; by apps Reeder and Readkit. It can be invoked via `=rss'. Otherwise, if you ;; don't care for the UI you can invoke elfeed directly with `elfeed'. (defvar +rss-split-direction 'below "What direction to pop up the entry buffer in elfeed.") (defvar +rss-enable-sliced-images t "Automatically slice images shown in elfeed-show-mode buffers, making them easier to scroll through.") (defvar +rss-workspace-name "*rss*" "Name of the workspace that contains the elfeed buffer.") ;; ;; Packages (use-package! elfeed :commands elfeed :init (setq elfeed-db-directory (concat doom-local-dir "elfeed/db/") elfeed-enclosure-default-dir (concat doom-local-dir "elfeed/enclosures/")) :config (setq elfeed-search-filter "@2-week-ago " elfeed-show-entry-switch #'pop-to-buffer elfeed-show-entry-delete #'+rss/delete-pane shr-max-image-proportion 0.8) (set-popup-rule! "^\\*elfeed-entry" :size 0.75 :actions '(display-buffer-below-selected) :select t :quit nil :ttl t) (make-directory elfeed-db-directory t) ;; Ensure elfeed buffers are treated as real (add-hook! 'doom-real-buffer-functions (defun +rss-buffer-p (buf) (string-match-p "^\\*elfeed" (buffer-name buf)))) ;; Enhance readability of a post (add-hook 'elfeed-show-mode-hook #'+rss-elfeed-wrap-h) (add-hook! 'elfeed-search-mode-hook (add-hook 'kill-buffer-hook #'+rss-cleanup-h nil 'local)) ;; Large images are annoying to scroll through, because scrolling follows the ;; cursor, so we force shr to insert images in slices. (when +rss-enable-sliced-images (setq-hook! 'elfeed-show-mode-hook shr-put-image-function #'+rss-put-sliced-image-fn shr-external-rendering-functions '((img . +rss-render-image-tag-without-underline-fn)))) ;; Keybindings (after! elfeed-show (define-key! elfeed-show-mode-map [remap next-buffer] #'+rss/next [remap previous-buffer] #'+rss/previous)) (when (modulep! :editor evil +everywhere) (evil-define-key 'normal elfeed-search-mode-map "q" #'elfeed-kill-buffer "r" #'elfeed-search-update--force (kbd "M-RET") #'elfeed-search-browse-url) (map! :map elfeed-show-mode-map :n "gc" nil :n "gc" #'+rss/copy-link))) (use-package! elfeed-org :when (modulep! +org) :after elfeed :preface (setq rmh-elfeed-org-files (list "elfeed.org")) :config (elfeed-org) (defadvice! +rss-skip-missing-org-files-a (&rest _) :before '(elfeed rmh-elfeed-org-mark-feed-ignore elfeed-org-export-opml) (unless (file-name-absolute-p (car rmh-elfeed-org-files)) (let* ((default-directory org-directory) (files (mapcar #'expand-file-name rmh-elfeed-org-files))) (dolist (file (cl-remove-if #'file-exists-p files)) (message "elfeed-org: ignoring %S because it can't be read" file)) (setq rmh-elfeed-org-files (cl-remove-if-not #'file-exists-p files)))))) (use-package! elfeed-goodies :after elfeed :config (elfeed-goodies/setup))