feat(icons): add nonicons.nvim icon provider support (#30)

* feat(icons): add nonicons.nvim icon provider support

Problem: oil.nvim only recognizes mini.icons and nvim-web-devicons as
icon providers. nonicons.nvim works when paired with devicons (via its
apply() monkey-patch), but has no standalone support.

Solution: add a nonicons.nvim fallback in get_icon_provider(), placed
after devicons so the patched devicons path is preferred when both are
installed. The standalone path handles directories via
nonicons.get('file-directory'), files via filetype/extension lookup with
a generic file icon fallback.

* fix(doc): improve readme phrasing
This commit is contained in:
Barrett Ruth 2026-02-22 20:58:22 -05:00 committed by GitHub
parent b6aaeaf542
commit 07ae3a8dc3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 5 deletions

View file

@ -21,10 +21,10 @@ https://user-images.githubusercontent.com/506791/209727111-6b4a11f4-634a-4efa-94
## Requirements
- Neovim 0.10+
- Optional:
[mini.icons](https://github.com/nvim-mini/mini.nvim/blob/main/readmes/mini-icons.md)
or [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons) for
file icons
- (Optionally) any of the following icon providers:
- [mini.icons](https://github.com/nvim-mini/mini.nvim/blob/main/readmes/mini-icons.md)
- [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons)
- [nonicons.nvim](https://github.com/barrettruth/nonicons.nvim)
## Installation

View file

@ -945,7 +945,32 @@ M.get_icon_provider = function()
end
end
-- fallback to `nvim-web-devicons`
local has_nonicons, nonicons = pcall(require, 'nonicons')
if has_nonicons and type(nonicons.get) == 'function' then
return function(type, name, conf, ft)
if type == 'directory' then
local icon = nonicons.get('file-directory')
return icon or (conf and conf.directory or ''), 'OilDirIcon'
else
if ft then
local ft_icon = nonicons.get(ft)
if ft_icon then
return ft_icon, 'OilFileIcon'
end
end
local ext = name:match('%.([^%.]+)$')
if ext then
local ext_icon = nonicons.get(ext)
if ext_icon then
return ext_icon, 'OilFileIcon'
end
end
local icon = nonicons.get('file')
return icon or (conf and conf.default_file or ''), 'OilFileIcon'
end
end
end
local has_devicons, devicons = pcall(require, 'nvim-web-devicons')
if has_devicons then
return function(type, name, conf, ft)