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
🚧 🚧 🚧
requires
nvim 0.10
andcurl
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" },
}
:checkhealth feed
to see your installation statusFeed
command to open the default index, there are two main kinds of index:elfeed
style search buffer, everything is a flat list to be searchedtelescope
picker, good for searching through all your database or search by feed
Feed <Tab>
to find out more actions binded to Feed
buffersFeed load_opml
to import your opml fileFeed export_opml
to export your opml file to load in other readersTo Be Implemented
Will support all the syntax of elfeed
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 = {},
}