#+TITLE:   app/rss
#+DATE:    May 12, 2020
#+SINCE:   v2.0.9
#+STARTUP: inlineimages nofold

* Table of Contents :TOC_3:noexport:
- [[#description][Description]]
  - [[#maintainers][Maintainers]]
  - [[#module-flags][Module Flags]]
  - [[#plugins][Plugins]]
  - [[#hacks][Hacks]]
- [[#prerequisites][Prerequisites]]
- [[#features][Features]]
- [[#configuration][Configuration]]
  - [[#without-org][Without +org]]
  - [[#with-org][With +org]]
  - [[#keybindings][Keybindings]]
  - [[#news-filtering][News filtering]]
  - [[#automatically-updating-feed-when-opening-elfeed][Automatically updating feed when opening elfeed]]
- [[#troubleshooting][Troubleshooting]]

* Description
+ Read RSS feeds in the comfort of DOOM (Emacs)

** Maintainers
This module has no dedicated maintainers.

** Module Flags
+ =+org= to enable ~elfeed-org~ to use ~org-directory/elfeed.org~

** Plugins
+ [[https://github.com/skeeto/elfeed][elfeed]]
+ [[https://github.com/algernon/elfeed-goodies][elfeed-goodies]] 
+ =+org=
  + [[https://github.com/remyhonig/elfeed-org][elfeed-org]]

** Hacks
+ By default ~elfeed-search-filter~ is set to ~@2-weeks-ago~ and makes the last 2 weeks of entries visible. This needs to be set after elfeed has loaded like so in your ~config.el~
  #+begin_src elisp
(after! elfeed
  (setq elfeed-search-filter "@1-month-ago +unread"))
  #+end_src

* Prerequisites
This module has no prerequisites.

* Features
+ As there isn't currently binding for ~elfeed-update~ you can run it with ~M-x elfeed-update~

* Configuration
** Without +org
When you don't want to use org mode to manage your elfeed feeds you can put your subscriptions to personal ~config.el~ file, ex:
#+BEGIN_SRC elisp
(setq elfeed-feeds
      '("https://this-week-in-rust.org/rss.xml"
        "http://feeds.bbci.co.uk/news/rss.xml"))
#+END_SRC

** With +org
When using ~+org~ flag then configuration is easier. You can use ~org-mode~ to configure feeds to follow.
#+BEGIN_SRC org
,* root :elfeed:
,** Programming :programming:
,*** [[https://this-week-in-rust.org/rss.xml][This Week in Rust]] :rust:
,** News :news:
,*** Top news :tops:
,**** http://feeds.bbci.co.uk/news/rss.xml
#+END_SRC
+ Root of ~elfeed-org~ needs to have ~:elfeed:~ tag. This is where ~elfeed-org~ starts to read.
+ You can have subheaders as in example ~:programming:~, and ~elfeed-org~ applies that tag to all subheader feeds, in example it adds it to ~This Week in Rust~.
+ You can "name" feeds as you please with ~org-mode~ ~org-insert-link~ (~C-c C-l~) and put name as you want into ~description~.
+ If you don't want to use ~org-directory/elfeed.org~ file you can specify it with ~(setq rmh-elfeed-org-files '("path/to/your/elfeed/file.org))~

** Keybindings
+ General
  | Key     | Mode               | Description                    |
  |---------+--------------------+--------------------------------|
  | =S-RET= | Elfeed-search-mode | Open link into browser         |
  | =RET=   | Elfeed-search-mode | Open item                      |
  | =s=     | Elfeed-search-mode | Filter                         |
  | =C-j=   | Elfeed-show-mode   | Move to next item              |
  | =C-k=   | Elfeed-show-mode   | Move to previous item          |

+ If ~:editor evil +everywhere~
  | Key | Description                 |
  |-----+-----------------------------|
  | q   | elfeed-kill-buffer          |
  | r   | elfeed-search-update--force |
  | g c | Copy link of current entry  |

** News filtering
+ Time filtering
  + ~@2-days-ago~ Past two days
  + ~@2-weeks-ago~ Past two weeks
  + ~@2-years-ago~ Past two years
  + ~@2020-06-19~ To show specific day
  + ~@2020-06-19--2020-03-10~ Span of time
+ Tag filtering
  + Include ~+news~
  + Exclude ~-rust~
  + Both ~+news -rust~
+ String filtering, this is case insensitive
  + Include
    + ~DOOM~
    + ~Linu[sx]~ Search for both ~Linus~ and ~Linux~
  + Exclude ~!something~

** Automatically updating feed when opening elfeed
Hook ~elfeed-update~ to ~elfeed-search-mode-hook~
#+BEGIN_SRC elisp
(add-hook! 'elfeed-search-mode-hook 'elfeed-update)
#+END_SRC

* TODO Troubleshooting
