- Notifications
You must be signed in to change notification settings - Fork48
RSS reader for the terminal
License
guyfedwards/nom
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Feed me
nom is a terminal based RRS feed reader usingGlow styled markdown to improve the reading experience and a simple TUI usingBubbletea.
- Local sync and offline reading
- Backend connections (miniflux, freshrss supported)
- Vim style keybindings for navigation
- Plenty more features such as mark read/unread, filtering and feed naming
NOTE When upgrading to V3 if you are usingconfig.backends for Miniflux or FreshRSS support, you will need to update your config to be arrays.
Seereleases for binaries. E.g.
curl -L https://github.com/guyfedwards/nom/releases/download/v3.0.0/nom_3.0.0_darwin_amd64.tar.gz| tar -xzvf -To install thenom binary into/usr/local/bin (or into the location of your choice) in a single step:
curl -L https://github.com/guyfedwards/nom/releases/download/v3.0.0/nom_3.0.0_darwin_amd64.tar.gz|sudo tar -C /usr/local/bin -xvzf - nomnom -c my-custom-config.yml
nom# start TUInom add<feed_url><optional feed_name>nom -h# see all available command and options
Feeds are listed in thefeeds section of the configuration file. They have a URL, an option name, and an optional list of tags:
feeds:-url:https://dropbox.tech/feedname:DropBox-url:https://snyk.io/blog/feedname:Snyktags: -ai -tech
You can also add feeds with theadd command:
nom add [-n<feed name>] [-t tag [...]]<url>
Feeds are editable withinnom by pressingE to open the configuration in your editor. You can configure which editor Nom will use by setting (in order of preference) your$NOMEDITOR,$VISUAL, or$EDITOR environment variable. After editing feeds, you will need to then refresh withr.
Alternatively you can import feeds from an OPML file:
nom import<path/to/opml|url/to/opm>
To add YouTube feeds you can go to a channel and run the following in the browser console to get the rss feed link:
console.log(`https://www.youtube.com/feeds/videos.xml?channel_id=${document.querySelector("link[rel='canonical']").href.split("/channel/").reverse()[0]}`,);
Show read items by default. (can be toggled with M)
showread:true
Automatically mark items as read on selection or navigation through items.
autoread:true
Set the default sort ordering of the list
ordering:asc
Default to include the feedname prefix in filtering query. Removes need to usef:xxx for simple queries. This will mean that multi-feed filters won't work, e.g.f:xxx f:yyy
filtering:defaultIncludeFeedName:true
Background refresh interval in minutes. Setting this to anything but 0 will makenom refresh automatically.
refreshinterval:5
Theme allows some basic color overrides in the feed view and then setting a custom markdown render theme for the overall markdown view.theme.glamour can be one of "dark", "dracula", "light", "pink", "ascii" or "notty". Seehere for previews and more info.Colors can be hex or ASCII codes, they will be coerced depending on your terminal color settings.
theme:glamour:darktitleColor:"62"titleColorFg:"231"selectedItemColor:"170"filterColor:"#555555"
As well as adding feeds directly, you can pull in feeds from another source. You can add multiple backends and the feeds will all be added.
backends:miniflux: -host:http://myminiflux.fooapi_key:jafksdljfladjfk -host:http://yourminiflux.fooapi_key:adfhdlsajfsifdifreshrss: -host:http://myfreshrss.baruser:adminpassword:muchstrongprefixCats:true# prefix feed name for freshrss entries
To use freshrss you need to enable API access and set the API password explicitly, separate to your user password.
- To enable the API go to Settings > Authentication > Allow API access.
- You can set the API password in Settings > Profile > API password.
By default links are opened in the browser, you can specify commands to open certain links based on a regex string.regex can be any valid golang regex string, it will be matched against the feed item link.cmd is run as a child command. The%s denotes the position of the link in the command.takeover dictates if the command should takeover the tty from nom. E.g. for opening links in lynx or other TUI.
openers:-regex:"youtube"cmd:"mpv %s"-regex:".*"cmd:"lynx %s"takeover:true
If you need to use a proxy server for internet access, you can configurenomby setting the environment variablesHTTP_PROXY andHTTPS_PROXY to point toyour proxy server:
export HTTP_PROXY=https://proxy.example.comexport HTTPS_PROXY=https://proxy.example.comnom
From theProxyFromEnvironment documentation:
[Use a proxy] as indicated by the environment variables
HTTP_PROXY,HTTPS_PROXYandNO_PROXY(or the lowercase versions thereof). Requests usethe proxy from the environment variable matching their scheme, unlessexcluded byNO_PROXY.The environment values may be either a complete URL or a "host[:port]", inwhich case the "http" scheme is assumed.
Nom uses sqlite as a store for feeds and metadata. It is stored adjacent to the configuration file in$XDG_CONFIG_HOME/nom/nom.db. This can be backed up like any file and will store articles, read state etc. It can also be deleted to start from scratch, re-downloading all articles and no state.
The name of the sqlite file can be overridden in the configuration file, allowing you to have multiple configurations each with their own data store.
database:news.db
Within thenom view, you can filter by title pressing the/ character. Nom supports simple keyword searches as well as searches using thefeed: andtag: qualifiers.
examplewill match any titles that contain the wordexample.- If you have
defaultIncludeFeedName: truein your nom configuration, this will also match any items whose feed name containsexample.
You can limit results to feeds with a certain pattern in their name using thefeed: qualifier:
feed:exampleorf:examplewill match any titles from a feed that containsexamplein the feed name.If your feed name contains spaces, you can quote the name using single or double quotes:
feed:"example feed"feed:'example feed'
Or you can backslash-escape the spaces:
feed:example\ feed
You can limit results to feed that have certain tags using thetag: qualifier:
tag:exampleort:examplewill match titles from feed that has the tagexample.
If you want to include the feed name in the default filtering query, useconfig.filtering.defaultIncludeFeedName: true. This simplifies the abovef:xxx queries but means that you can't filter by multiple feeds at once, e.g.f:xxx f:yyy.
In the current implementation, youcannot combine different types of filters. That is, you can do this:
feed:foo feed:bartag:foo tag:bar
But you cannot combinefeed: andtag: queries:
feed:foo tag:newswill return all results that matchfeed:fooand will ignore thetag:qualifier.
And you cannot combine simple keyword searches with any qualifiers:
tag:news bostonwill return all results that matchtag:newsand will ignore the additional keyword.
Build nom image
docker build -t nom.This embeds the local `docker-config.yml`` file into the container and will be used by default.
Running Nom via docker
docker run --rm -it nom
Use the-v command line argument to mount a local configuration onto/app/docker-config.yml as desired:
docker run --rm -it -v$PWD/my-nom-config.yml:/app/docker-config.yml nomYou can usebackends-compose.yml to spin up a local instance ofMiniFlux andFreshRSS if needed for development.
docker-compose -f backends-compose.yml up -d
You can enable logging to a file using theDEBUGNOM env var. Passing any path will causelog calls to write there e.g.DEBUGNOM=debug.log
About
RSS reader for the terminal
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
