Skip to content

neo451/feed.nvim

Repository files navigation

📻 feed.nvim

Static Badge GitHub repo size GitHub Actions Workflow Status

feed.nvim is a web feed reader in neovim, leveraging modern neovim features and plugin system

🚧 🚧 🚧

This project is in beta, many features are incomplete, but is already useable for most feeds, trying out and contributions are welcome!

see roadmap for where this project goes

🚧 🚧 🚧

🌟 Features

  • 🌲 reliable and fast rss/atom/json feed parsing, powered by tree-sitter
  • 📝 feeds converted to markdown/neorg for reading and storing
  • 🏪 pure lua database with no extra dependency
  • 📚 powerful filtering of feeds and entries, inspired by elfeed
  • 📶 RSSHub integration to turn (almost) any link into a web feed

🚀 Installation

Basic Installation

requires nvim 0.10 and curl to be installed on your path.

Using rocks.nvim:

Rocks install feed.nvim

Using lazy.nvim:

return {
    'neo451/feed.nvim',
    dependencies = {
      'neo451/treedoc.nvim',
      'stevearc/conform.nvim',
      'j-hui/fidget.nvim',
      'nvim-lua/plenary.nvim',
      'nvim-treesitter/nvim-treesitter',
    }
    opts = {}
}
-- somewhere in your config that sets up nvim-treesitter, add these three filetypes to the ensure_installed list:
require("nvim-treesitter.configs").setup {
   ensure_installed = { "xml", "html", "markdown" },
}

Health Check

  • run :checkhealth feed to see your installation status

Optional Integrations

🔖 Usage

Basic Usage

  • Use Feed command to open the default index, there are two main kinds of index:
    • The elfeed style search buffer, everything is a flat list to be searched
    • The telescope picker, good for searching through all your database or search by feed
  • Use Feed <Tab> to find out more actions binded to Feed buffers

Feed Management

  • Use Feed load_opml to import your opml file
  • Use Feed export_opml to export your opml file to load in other readers

Feed Searching

  • To Be Implemented

  • Will support all the syntax of elfeed

RssHub Integration

  • To Be Implemented

Tiny Tiny Rss Integration

  • To Be Implemented

Customization

  • these are the defaults, no need to copy, only set the ones you wish to change
require"feed".setup{
   ---@type string
   db_dir = vim.fn.stdpath("data") .. "/feed",
   ---@type { index : table<string, string | function>, entry : table<string, string | function> }
   keymaps = {
      index = {
         ["<CR>"] = "show_entry",
         ["<M-CR>"] = "show_in_split",
         ["+"] = "tag",
         ["-"] = "untag",
         ["?"] = "which_key",
         b = "show_in_browser",
         w = "show_in_w3m",
         r = "refresh",
         y = "link_to_clipboard",
         q = "quit_index",
      },
      entry = {
         ["}"] = "show_next",
         ["{"] = "show_prev",
         ["?"] = "which_key",
         u = "urlview",
         q = "quite_entry",
      },
   },
   ---@type table<string, any>
   win_options = {
      conceallevel = 0,
      wrap = true,
   },
   ---@type table<string, any>
   buf_options = {
      filetype = "markdown", -- TODO: FeedBuffer?
      modifiable = false,
   },
   ---@type table<string, any>
   search = {
      sort_order = "descending",
      update_hook = {},
      filter = "@6-months-ago +unread",
   },
   ---@type table<string, any>
   layout = {
      title = {
         right_justify = false,
         width = 70,
      },
      date = {
         format = "%Y-%m-%d",
         width = 10,
      },
      ---@type string
      split = "13split",
   },
   ---@type string
   colorscheme = "morning",

   ---@type feed.feed[]
   feeds = {},
}

Related Projects