https://github.com/guyfedwards/nom
RSS reader for the terminal
https://github.com/guyfedwards/nom
bubbletea cli golang hacktoberfest rss terminal
Last synced: 28 days ago
JSON representation
RSS reader for the terminal
- Host: GitHub
- URL: https://github.com/guyfedwards/nom
- Owner: guyfedwards
- License: gpl-3.0
- Created: 2022-12-21T13:20:12.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2025-10-18T21:45:59.000Z (about 1 month ago)
- Last Synced: 2025-10-19T12:52:42.634Z (30 days ago)
- Topics: bubbletea, cli, golang, hacktoberfest, rss, terminal
- Language: Go
- Homepage:
- Size: 10.7 MB
- Stars: 591
- Watchers: 3
- Forks: 39
- Open Issues: 32
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-cli-apps-in-a-csv - nom - RSS reader for the terminal. (<a name="rss"></a>RSS)
- charm-in-the-wild - nom - An RSS reader and manager. (_built with Bubble Tea_) (Applications / RSS and News)
- awesome-cli-apps - nom - RSS reader for the terminal. (<a name="rss"></a>RSS)
README
# nom
> Feed me
`nom` is a terminal based RRS feed reader using [Glow](https://github.com/charmbracelet/glow) styled markdown to improve the reading experience and a simple TUI using [Bubbletea](https://github.com/charmbracelet/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](https://github.com/guyfedwards/nom/releases) for binaries. E.g.
```sh
curl -L https://github.com/guyfedwards/nom/releases/download/v2.16.2/nom_2.16.2_darwin_amd64.tar.gz | tar -xzvf -
```
To install the `nom` binary into `/usr/local/bin` (or into the location of your choice) in a single step:
```sh
curl -L https://github.com/guyfedwards/nom/releases/download/v2.16.2/nom_2.16.2_darwin_amd64.tar.gz |
sudo tar -C /usr/local/bin -xvzf - nom
```
## Usage
```sh
nom # start TUI
nom add
nom -h # see all available command and options
```
## Configuration
Configuration 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 configuration file with the `--config-path` (`-c`) flag:
```sh
nom -c my-custom-config.yml
```
### Feeds
Feeds are added to the configuration file and have a url and an optional name:
```yaml
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:
```sh
nom add
```
Feeds are editable within `nom` by pressing `E` 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 with `r`.
Alternatively you can import feeds from an OPML file:
```sh
nom import Authentication > Allow API access.
1. You can set the API password in Settings > Profile > API password.
### 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.\
`takeover` dictates if the command should takeover the tty from nom. E.g. for opening links in lynx or other TUI.
```yaml
openers:
- regex: "youtube"
cmd: "mpv %s"
- regex: ".*"
cmd: "lynx %s"
takeover: true
```
### Proxy support
If you need to use a proxy server for internet access, you can configure `nom`
by setting the environment variables `HTTP_PROXY` and `HTTPS_PROXY` to point to
your proxy server:
```sh
export HTTP_PROXY=https://proxy.example.com
export HTTPS_PROXY=https://proxy.example.com
nom
```
From the [ProxyFromEnvironment documentation](https://pkg.go.dev/net/http#ProxyFromEnvironment):
> [Use a proxy] as indicated by the environment variables `HTTP_PROXY`,
> `HTTPS_PROXY` and `NO_PROXY` (or the lowercase versions thereof). Requests use
> the proxy from the environment variable matching their scheme, unless
> excluded by `NO_PROXY`.
>
> The environment values may be either a complete URL or a "host[:port]", in
> which case the "http" scheme is assumed.
## Store
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.
```yaml
database: news.db
```
## 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!`
### Include feedname in filtering
If you want to include the feed name in the default filtering query, use `config.filtering.defaultIncludeFeedName: true`. This simplifies the above `f:xxx` queries but means that you can't filter by multiple feeds at once, e.g. `f:xxx f:yyy`.
## Building and Running via Docker
Build nom image
```sh
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
```sh
docker run --rm -it nom
```
Use the `-v` command line argument to mount a local configuration onto `/app/docker-config.yml` as desired:
```sh
docker run --rm -it -v $PWD/my-nom-config.yml:/app/docker-config.yml nom
```
## Dev setup
You can use `backends-compose.yml` to spin up a local instance of [MiniFlux] and [FreshRSS] if needed for development.
[miniflux]: https://miniflux.app/
[freshrss]: https://www.freshrss.org/
```sh
docker-compose -f backends-compose.yml up -d
```