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.
3.7 KiB
3.7 KiB
nonicons.nvim
Nonicons for Neovim
Replace nvim-web-devicons glyphs with icons from the nonicons font. Any plugin that uses nvim-web-devicons automatically displays nonicons glyphs.
Requirements
- nvim-web-devicons
- nonicons font 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
config.font = wezterm.font_with_fallback({
'YourMainFont',
'Nonicons',
})
Install with your package manager of choice or via luarocks:
luarocks install nonicons.nvim
lazy.nvim
{
'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:
vim.g.nonicons = {
override = true, -- default; set false to disable devicons wrapping
}
Usage
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:
local code = require('nonicons').mapping['lua']
local icon = vim.fn.nr2char(code)
Recipes
lualine — mode icons:
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:
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:
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:
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
:help nonicons.nvim
Acknowledgements
- yamatsum/nonicons — icon font
- ya2s/nvim-nonicons — original plugin