nonicons.nvim/README.md
Barrett Ruth 04791cd41a
feat: initial nonicons.nvim rewrite
Problem: the original ya2s/nvim-nonicons fork diverged enough that
maintaining it as a fork was pointless. The set_icon() approach broke
with modern nvim-web-devicons, and the extensions directory coupled
integrations that belong in user config.

Solution: from-scratch rewrite with function wrapping + table mutation
override engine, vim.g.nonicons config pattern, vendored mapping with
integer codepoints, health check, vimdoc with recipes, and no built-in
plugin integrations.
2026-02-17 19:34:13 -05:00

180 lines
3.7 KiB
Markdown

# nonicons.nvim
**Nonicons for Neovim**
Replace [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons)
glyphs with icons from the [nonicons](https://github.com/yamatsum/nonicons)
font. Any plugin that uses nvim-web-devicons automatically displays nonicons
glyphs.
## Requirements
- [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons)
- [nonicons font](https://github.com/yamatsum/nonicons/releases) installed in
your terminal
## Installation
Install the nonicons font and configure your terminal to use it as a fallback:
**ghostty**
```
font-family = Nonicons
font-family = YourMainFont
```
**kitty**
```
symbol_map U+F101-U+F219 Nonicons
```
**wezterm**
```lua
config.font = wezterm.font_with_fallback({
'YourMainFont',
'Nonicons',
})
```
Install with your package manager of choice or via
[luarocks](https://luarocks.org/modules/barrettruth/nonicons.nvim):
```
luarocks install nonicons.nvim
```
**lazy.nvim**
```lua
{
'barrettruth/nonicons.nvim',
dependencies = { 'nvim-tree/nvim-web-devicons' },
}
```
The plugin applies overrides automatically. No `setup()` call is needed.
## Configuration
Configure via `vim.g.nonicons` before the plugin loads:
```lua
vim.g.nonicons = {
override = true, -- default; set false to disable devicons wrapping
}
```
## Usage
```lua
local get = require('nonicons').get
get('lua') -- returns the nonicons lua character
get('python') -- returns the nonicons python character
get('git-branch') -- returns the nonicons git-branch character
```
The raw mapping table is available for advanced use:
```lua
local code = require('nonicons').mapping['lua']
local icon = vim.fn.nr2char(code)
```
## Recipes
**lualine** — mode icons:
```lua
local get = require('nonicons').get
require('lualine').setup({
sections = {
lualine_a = {
{
'mode',
fmt = function(mode)
local map = {
NORMAL = get('vim-normal-mode'),
INSERT = get('vim-insert-mode'),
VISUAL = get('vim-visual-mode'),
REPLACE = get('vim-replace-mode'),
COMMAND = get('vim-command-mode'),
}
return map[mode] or mode
end,
},
},
},
})
```
**nvim-notify**:
```lua
require('notify').setup({
icons = {
ERROR = require('nonicons').get('x-circle'),
WARN = require('nonicons').get('alert'),
INFO = require('nonicons').get('info'),
DEBUG = require('nonicons').get('bug'),
TRACE = require('nonicons').get('play'),
},
})
```
**mason.nvim**:
```lua
require('mason').setup({
ui = {
icons = {
package_installed = require('nonicons').get('check'),
package_pending = require('nonicons').get('sync'),
package_uninstalled = require('nonicons').get('x'),
},
},
})
```
**oil.nvim**, **fzf-lua**, **telescope.nvim** — no configuration needed. These
plugins read from nvim-web-devicons which nonicons.nvim wraps automatically.
**nvim-tree**:
```lua
local get = require('nonicons').get
require('nvim-tree').setup({
renderer = {
icons = {
glyphs = {
default = get('file'),
symlink = get('file-symlink-file'),
folder = {
default = get('file-directory-fill'),
open = get('file-directory-open-fill'),
symlink = get('file-submodule'),
empty = get('file-directory-outline'),
arrow_open = get('chevron-down'),
arrow_closed = get('chevron-right'),
},
},
},
},
})
```
## Documentation
```vim
:help nonicons.nvim
```
## Acknowledgements
- [yamatsum/nonicons](https://github.com/yamatsum/nonicons) — icon font
- [ya2s/nvim-nonicons](https://github.com/ya2s/nvim-nonicons) — original plugin