# headlines.nvim
**Repository Path**: rootquan/headlines.nvim
## Basic Information
- **Project Name**: headlines.nvim
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-22
- **Last Updated**: 2026-06-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Headlines.nvim
This plugin adds highlights for text filetypes, like `markdown`, `orgmode`, and `neorg`.
1. Background highlighting for headlines
2. Background highlighting for code blocks
3. Whole window separator for horizontal line
4. Bar for Quotes
Treesitter grammar needs to be installed for the languages.
> [!NOTE]
> Consider using [MeanderingProgrammer/render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim) instead.
> It does everything headlines.nvim does and more.
> I will continue to maintain headlines.nvim, but I am unlikely to add more features here.
## Install
Use your favorite plugin manager to install.
#### Example with Packer
[wbthomason/packer.nvim](https://github.com/wbthomason/packer.nvim)
```lua
-- init.lua
require("packer").startup(function()
use {
"lukas-reineke/headlines.nvim",
after = "nvim-treesitter",
config = function()
require("headlines").setup()
end,
}
end)
```
#### Example with Plug
[junegunn/vim-plug](https://github.com/junegunn/vim-plug)
```vim
" init.vim
call plug#begin('~/.vim/plugged')
Plug 'lukas-reineke/headlines.nvim'
call plug#end()
lua << EOF
require("headlines").setup()
EOF
```
#### Example with Lazy
[folke/lazy.nvim](https://github.com/folke/lazy.nvim)
```lua
-- init.lua
require("lazy").setup {
{
"lukas-reineke/headlines.nvim",
dependencies = "nvim-treesitter/nvim-treesitter",
config = true, -- or `opts = {}`
},
}
```
## Setup
To configure headlines.nvim pass a config table into the setup function.
Default config:
```lua
require("headlines").setup {
markdown = {
query = vim.treesitter.parse_query(
"markdown",
[[
(atx_heading [
(atx_h1_marker)
(atx_h2_marker)
(atx_h3_marker)
(atx_h4_marker)
(atx_h5_marker)
(atx_h6_marker)
] @headline)
(thematic_break) @dash
(fenced_code_block) @codeblock
(block_quote_marker) @quote
(block_quote (paragraph (inline (block_continuation) @quote)))
(block_quote (paragraph (block_continuation) @quote))
(block_quote (block_continuation) @quote)
]]
),
headline_highlights = { "Headline" },
bullet_highlights = {
"@text.title.1.marker.markdown",
"@text.title.2.marker.markdown",
"@text.title.3.marker.markdown",
"@text.title.4.marker.markdown",
"@text.title.5.marker.markdown",
"@text.title.6.marker.markdown",
},
bullets = { "◉", "○", "✸", "✿" },
codeblock_highlight = "CodeBlock",
dash_highlight = "Dash",
dash_string = "-",
quote_highlight = "Quote",
quote_string = "┃",
fat_headlines = true,
fat_headline_upper_string = "▄",
fat_headline_lower_string = "▀",
},
rmd = {
query = vim.treesitter.parse_query(
"markdown",
[[
(atx_heading [
(atx_h1_marker)
(atx_h2_marker)
(atx_h3_marker)
(atx_h4_marker)
(atx_h5_marker)
(atx_h6_marker)
] @headline)
(thematic_break) @dash
(fenced_code_block) @codeblock
(block_quote_marker) @quote
(block_quote (paragraph (inline (block_continuation) @quote)))
(block_quote (paragraph (block_continuation) @quote))
(block_quote (block_continuation) @quote)
]]
),
treesitter_language = "markdown",
headline_highlights = { "Headline" },
bullet_highlights = {
"@text.title.1.marker.markdown",
"@text.title.2.marker.markdown",
"@text.title.3.marker.markdown",
"@text.title.4.marker.markdown",
"@text.title.5.marker.markdown",
"@text.title.6.marker.markdown",
},
bullets = { "◉", "○", "✸", "✿" },
codeblock_highlight = "CodeBlock",
dash_highlight = "Dash",
dash_string = "-",
quote_highlight = "Quote",
quote_string = "┃",
fat_headlines = true,
fat_headline_upper_string = "▄",
fat_headline_lower_string = "▀",
},
norg = {
query = vim.treesitter.parse_query(
"norg",
[[
[
(heading1_prefix)
(heading2_prefix)
(heading3_prefix)
(heading4_prefix)
(heading5_prefix)
(heading6_prefix)
] @headline
(weak_paragraph_delimiter) @dash
(strong_paragraph_delimiter) @doubledash
([(ranged_tag
name: (tag_name) @_name
(#eq? @_name "code")
)
(ranged_verbatim_tag
name: (tag_name) @_name
(#eq? @_name "code")
)] @codeblock (#offset! @codeblock 0 0 1 0))
(quote1_prefix) @quote
]]
),
headline_highlights = { "Headline" },
bullet_highlights = {
"@neorg.headings.1.prefix",
"@neorg.headings.2.prefix",
"@neorg.headings.3.prefix",
"@neorg.headings.4.prefix",
"@neorg.headings.5.prefix",
"@neorg.headings.6.prefix",
},
bullets = { "◉", "○", "✸", "✿" },
codeblock_highlight = "CodeBlock",
dash_highlight = "Dash",
dash_string = "-",
doubledash_highlight = "DoubleDash",
doubledash_string = "=",
quote_highlight = "Quote",
quote_string = "┃",
fat_headlines = true,
fat_headline_upper_string = "▄",
fat_headline_lower_string = "▀",
},
org = {
query = vim.treesitter.parse_query(
"org",
[[
(headline (stars) @headline)
(
(expr) @dash
(#match? @dash "^-----+$")
)
(block
name: (expr) @_name
(#match? @_name "(SRC|src)")
) @codeblock
(paragraph . (expr) @quote
(#eq? @quote ">")
)
]]
),
headline_highlights = { "Headline" },
bullet_highlights = {
"@org.headline.level1",
"@org.headline.level2",
"@org.headline.level3",
"@org.headline.level4",
"@org.headline.level5",
"@org.headline.level6",
"@org.headline.level7",
"@org.headline.level8",
},
bullets = { "◉", "○", "✸", "✿" },
codeblock_highlight = "CodeBlock",
dash_highlight = "Dash",
dash_string = "-",
quote_highlight = "Quote",
quote_string = "┃",
fat_headlines = true,
fat_headline_upper_string = "▄",
fat_headline_lower_string = "▀",
},
}
```
To change any setting, pass a table with that option. Or add a completely new filetype.
You can turn off highlighting by removing that part from the query, or setting
highlight to `false`.
```lua
require("headlines").setup {
markdown = {
headline_highlights = false,
},
yaml = {
query = vim.treesitter.parse_query(
"yaml",
[[
(
(comment) @dash
(#match? @dash "^# ---+$")
)
]]
),
dash_highlight = "Dash",
},
}
```
Please see `:help headlines.txt` for more details.
## Screenshots
All screenshots use [my custom onedark color scheme](https://github.com/lukas-reineke/onedark.nvim).
### Simple org file
```lua
vim.cmd [[highlight Headline1 guibg=#1e2718]]
vim.cmd [[highlight Headline2 guibg=#21262d]]
vim.cmd [[highlight CodeBlock guibg=#1c1c1c]]
vim.cmd [[highlight Dash guibg=#D19A66 gui=bold]]
require("headlines").setup {
org = {
headline_highlights = { "Headline1", "Headline2" },
},
}
```
