Giter VIP home page Giter VIP logo

nom's Introduction

nom

Feed me

nom is a terminal based RRS feed reader using Glow styled markdown to improve the reading experience and a simple TUI using Bubbletea.

  • 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

Install

See releases for binaries. E.g.

$ curl -L https://github.com/guyfedwards/nom/releases/download/v2.1.4/nom_2.1.4_darwin_amd64.tar.gz | tar -xzvf -

Usage

$ nom # start TUI
$ nom list -n 20 # list feed items in $PAGER, optionally show more
$ nom add <feed_url> 
$ nom --feed <feed_url> # preview feed without adding to config

Config

Config lives by default in $XDG_CONFIG_HOME/nom/config.yml or $HOME/Library/Application Support/nom/config.yml on darwin.
You can customise the location of the config file with the --config-path flag.

Feeds

Feeds are added to the config file and have a url and name.

feeds:
  - url: https://dropbox.tech/feed
    # name will be prefixed to all entries in the list
    name: dropbox 
  - url: https://snyk.io/blog/feed

You can also add feeds with the add command:

$ nom add <url>

Youtube feeds

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 (default: false)

Show read items by default. (can be toggled with M)

showread: true

Auto read (default: false)

Automatically mark items as read on selection or navigation through items.

autoread: true

Backends

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.foo
    api_key: jafksdljfladjfk
  freshrss:
    host: http://myfreshrss.bar
    user: admin
    password: muchstrong

Openers

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.

openers:
  - regex: "youtube"
    cmd: "mpv %s"

Store

nom uses sqlite as a store for feeds and metadata. It is stored next to the config 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 redownloading all articles and no state.

Filtering

Within the nom view, you can filter by title pressing the / character. Filters can be applied easily. Here's some examples:

  • f:my_feed feed:my_second_feed - matches my_feed and my_second_feed
  • feedname:"my feed - with spaces" - matches my feed - with spaces
  • feed:'my feed, with single quotes!' - matches my feed, with single quotes!
  • feed:my\ feed\ with\ escaped\ spaces! - matches my feed with escaped spaces!

More filters to be added soon!

Building and Running via Docker

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 the nom via docker

docker run --rm -it nom

Use the -v command line argument to mount a local config onto /app/docker-config.yml as desired.

Dev setup

You can use the backends-compose.yml to spin up a local instance of miniflux and freshrss if needed for development.

$ docker-compose -f backends-compose.yml up

Debug logging

You can enable logging to a file using the DEBUGNOM env var. Passing any path will cause log calls to write there e.g. DEBUGNOM=debug.log

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.