8000 mini.nvim/lua/mini/icons.lua at main · JulesNP/mini.nvim · GitHub
[go: up one dir, main page]

Skip to content

Latest commit

 

History

History
1774 lines (1705 loc) · 91.9 KB

icons.lua

File metadata and controls

1774 lines (1705 loc) · 91.9 KB
--- *mini.icons* Icon provider
--- *MiniIcons*
---
--- MIT License Copyright (c) 2024 Evgeni Chasnovski
---
--- ==============================================================================
---
--- Features:
---
--- - Provide icons with their highlighting via a single |MiniIcons.get()| for
--- various categories: filetype, file/directory path, extension, operating
--- system, LSP kind values. Icons and category defaults can be overridden.
---
--- - Configurable styles: "glyph" (icon glyphs) or "ascii" (non-glyph fallback).
---
--- - Fixed set of highlight groups (linked to built-in groups by default) for
--- better blend with color scheme.
---
--- - Caching for maximum performance.
---
--- - Integration with |vim.filetype.add()| and |vim.filetype.match()|.
---
--- - Mocking methods of 'nvim-tree/nvim-web-devicons' for better integrations
--- with plugins outside 'mini.nvim'. See |MiniIcons.mock_nvim_web_devicons()|.
---
--- # Dependencies ~
---
--- Suggested dependencies:
---
--- - Terminal emulator that supports showing special utf8 glyphs, possibly with
--- "overflow" view (displaying is done not in one but two visual cells).
--- Most modern feature-rich terminal emulators support this out of the box:
--- WezTerm, Kitty, Alacritty, iTerm2, Ghostty.
--- Not having "overflow" feature only results into smaller icons.
--- Not having support for special utf8 glyphs will result into seemingly
--- random symbols (or question mark squares) instead of icon glyphs.
---
--- - Font that supports Nerd Fonts (https://www.nerdfonts.com) icons from
--- version 3.0.0+ (in particular `nf-md-*` class).
--- This should be configured on terminal emulator level either by using font
--- patched with Nerd Fonts icons or using `NerdFontsSymbolsOnly` font as
--- a fallback for glyphs that are not supported in main font.
---
--- If using terminal emulator and/or font with icon support is impossible, use
--- `config.style = 'ascii'`. It will use a (less visually appealing) set of
--- non-glyph icons.
---
--- # Setup ~
---
--- This module needs a setup with `require('mini.icons').setup({})` (replace `{}`
--- with your `config` table). It will create global Lua table `MiniIcons` which you
--- can use for scripting or manually (with `:lua MiniIcons.*`).
---
--- See |MiniIcons.config| for `config` structure and default values.
---
--- # Comparisons ~
---
--- - 'nvim-tree/nvim-web-devicons' (for users):
--- - Sets individual colors to each icon with separate specific highlight
--- groups, while this modules uses fixed set of highlight groups.
--- This makes it easier to customize in bulk and actually blend with any
--- color scheme.
---
--- - This module prefers richer set of `nf-md-*` (from "Material design" set)
--- Nerd Fonts icons while 'nvim-web-devicons' mostly prefers `nf-dev-*`
--- (from "devicons" set).
---
--- - Supported categories are slightly different (with much overlap).
---
--- - Both support customization of any icon. Only this module supports
--- customization of default ones per supported category.
---
--- - Using this module can occasionally result in small delays when used
--- synchronously for many times to get icons for not typical files (like
--- in |mini.files|). This is due to using |vim.filetype.match()| fallback and
--- is present only during first call, as value is cached for later uses.
---
--- - This module supports different icon styles (like "ascii" for when using
--- glyphs is not possible), while 'nvim-web-devicons' does not.
---
--- - This module provides |MiniIcons.mock_nvim_web_devicons()| function which
--- when called imitates installed 'nvim-web-devicons' plugin to support
--- other plugins which do not provide 'mini.icons' yet.
---
--- - 'nvim-tree/nvim-web-devicons' (for plugin developers):
--- - Both have main "get icon" type of function:
--- - Both return tuple of icon and highlight group strings.
---
--- - This module always returns icon data possibly falling back to
--- user's configured default, while 'nvim-web-devicons' is able to
--- return `nil`. This module's approach is more aligned with the most
--- common use case of always showing an icon instead or near some data.
---
--- - This module uses |vim.filetype.match()| as a fallback for "file"
--- and "extension" categories, while 'nvim-web-devicons' completely
--- relies on the manually maintained tables of supported filenames
--- and extensions.
--- Using fallback results in a wider support and deeper integration
--- with Neovim's filetype detection at the cost of occasional slower
--- first call. The difference is reduced as much as is reasonable by
--- also having some manually tracked data tables for common cases.
---
--- - This module caches all its return values resulting in really fast
--- next same argument calls, while 'nvim-web-devicons' doesn't do that.
---
--- - This module works with full file/directory paths as input.
---
--- - Different sets of supported categories (see |MiniIcons.config|):
--- - Both support "file", "extension", "filetype", "operating system".
--- Albeit in different volumes: 'nvim-web-devicons' covers more
--- cases for "operating system", while this module has better eventual
--- coverage for other cases.
---
---
--- - This module supports "directory" and "lsp" categories.
---
--- - 'nvim-web-devicons' covers "desktop environment" and "window
--- management" categories. This modules does not include them due to
--- relatively low demand.
---
--- # Highlight groups ~
---
--- Only the following set of highlight groups is used as icon highlight.
--- It is recommended that they all only define colored foreground:
---
--- * `MiniIconsAzure` - azure.
--- * `MiniIconsBlue` - blue.
--- * `MiniIconsCyan` - cyan.
--- * `MiniIconsGreen` - green.
--- * `MiniIconsGrey` - grey.
--- * `MiniIconsOrange` - orange.
--- * `MiniIconsPurple` - purple.
--- * `MiniIconsRed` - red.
--- * `MiniIconsYellow` - yellow.
---
--- To change any highlight group, modify it directly with |:highlight|.
---@diagnostic disable:undefined-field
---@diagnostic disable:discard-returns
---@diagnostic disable:unused-local
---@diagnostic disable:cast-local-type
---@diagnostic disable:undefined-doc-name
---@diagnostic disable:luadoc-miss-type-name
-- Module definition ==========================================================
local MiniIcons = {}
local H = {}
--- Module setup
---
---@param config table|nil Module config table. See |MiniIcons.config|.
---
---@usage >lua
--- require('mini.icons').setup() -- use default config
--- -- OR
--- require('mini.icons').setup({}) -- replace {} with your config table
--- <
MiniIcons.setup = function(config)
-- Export module
_G.MiniIcons = MiniIcons
-- Setup config
config = H.setup_config(config)
-- Apply config
H.apply_config(config)
-- Create default highlighting
H.create_default_hl()
end
--stylua: ignore
--- Module config
---
--- Default values:
---@eval return MiniDoc.afterlines_to_code(MiniDoc.current.eval_section)
---@text # Style ~
---
--- `config.style` is a string defining which icon style to use. It can be:
--- - `'glyph'` (default) - use glyph icons (like 󰈔 and 󰉋 ).
--- - `'ascii'` - use fallback ASCII-compatible icons. Those are computed as
--- an upper first character of the icon's resolved name inside its category.
--- Examples: >lua
---
--- MiniIcons.get('file', 'Makefile') -- Has `'M'` as icon
--- MiniIcons.get('extension', 'lua') -- Has `'L'` as icon
--- MiniIcons.get('file', 'file.lua') -- Has `'L'` as icon; it is resolved to
--- -- come from 'lua' 'extension' category
--- MiniIcons.get('file', 'myfile') -- Has `'F'` as icon; it is resolved to
--- -- come from 'file' 'default' category
--- <
--- # Customization per category ~
---
--- The following entries can be used to customize icons for supported categories:
--- - `config.default`
--- - `config.directory`
--- - `config.extension`
--- - `config.file`
--- - `config.filetype`
--- - `config.lsp`
--- - `config.os`
---
--- Customization should be done by supplying a table with <glyph> (icon glyph)
--- and/or <hl> (name of highlight group) string fields as a value for an icon
--- name entry. Example: >lua
---
--- require('mini.icons').setup({
--- default = {
--- -- Override default glyph for "file" category (reuse highlight group)
--- file = { glyph = '󰈤' },
--- },
--- extension = {
--- -- Override highlight group (not necessary from 'mini.icons')
--- lua = { hl = 'Special' },
---
--- -- Add icons for custom extension. This will also be used in
--- -- 'file' category for input like 'file.my.ext'.
--- ['my.ext'] = { glyph = '󰻲', hl = 'MiniIconsRed' },
--- },
--- })
--- <
--- Notes:
--- - These customizations only take effect inside |MiniIcons.setup()| call.
--- Changing interactively via `:lua MiniIcons.config.xxx = { ... }` does not work
--- for performance reasons.
--- - Use lower case names for categories which are matched ignoring case.
--- See |MiniIcons.get()| for more details.
MiniIcons.config = {
-- Icon style: 'glyph' or 'ascii'
style = 'glyph',
-- Customize per category. See `:h MiniIcons.config` for details.
default = {},
directory = {},
extension = {},
file = {},
filetype = {},
lsp = {},
os = {},
}
--minidoc_afterlines_end
--- Get icon data
---
--- Usage example: >lua
---
--- 10000 -- Results into `icon` be '󰢱' and `hl` be 'MiniIconsAzure'
--- local icon, hl = MiniIcons.get('file', 'file.lua')
--- <
--- Notes:
--- - Always returns some data, even if icon name is not explicitly supported
--- within target category. Category "default" is used as a fallback.
---
--- - Glyphs are explicitly preferred (when reasonable) from a richer set of
--- `nf-md-*` class ("Material design" set) of Nerd Fonts icons.
---
--- - Output is cached after the first call to increase performance of next calls
--- with same arguments. To reset cache, call |MiniIcons.setup()|.
---
--- - Matching icon name for "file" and "directory" categories is done exactly
--- and respecting case. Others are done ignoring case.
---
--- - The recommended way to use this function in plugin is first checking if
--- `_G.MiniIcons` table is present (which means that user explicitly enabled
--- 'mini.icons') and provide icons only if it is.
---
---@param category string Category name. Supported categories:
--- - `'default'` - icon data used as fallback for any category.
--- Supported icon names: any supported category name.
---
--- Examples: >lua
---
--- MiniIcons.get('default', 'file')
--- <
--- - `'directory'` - icon data for directory path.
--- Supported icon names: any string, but only basename will be used.
--- Can be used for not existing paths (no check is done).
---
--- Examples: >lua
---
--- -- All of these will result in the same output
--- MiniIcons.get('directory', '.config')
--- MiniIcons.get('directory', '~/.config')
--- MiniIcons.get('directory', '/home/user/.config')
---
--- -- Results in different output
--- MiniIcons.get('directory', '.Config')
--- <
--- - `'extension'` - icon data for extension.
--- Supported icon names: any string (without extra dot prefix).
--- Icon data is attempted to be resolved in the following order:
--- - List of manually tracked extensions (for better performance).
--- - Filetype as a result of |vim.filetype.match()| with placeholder
--- file basename. Uses output of corresponding "filetype" category.
---
--- Examples: >lua
---
--- -- All of these will result in the same output
--- MiniIcons.get('extension', 'lua')
--- MiniIcons.get('extension', 'LUA')
--- <
--- - `'file'` - icon data for file path.
--- Supported icon names: any string, but only basename will be used.
--- Can be used for not existing paths (no check is done).
--- Icon data is attempted to be resolved in the following order:
--- - List of manually tracked file basenames (should match exactly).
--- - List of manually tracked extensions.
--- Uses output of corresponding "extension" category.
--- - Filetype as a result of |vim.filetype.match()|.
--- Uses output of corresponding "filetype" category.
---
--- Examples: >lua
---
--- -- All of these will result in the same output
--- MiniIcons.get('file', 'init.lua')
--- MiniIcons.get('file', '~/.config/nvim/init.lua')
--- MiniIcons.get('file', '/home/user/.config/nvim/init.lua')
---
--- -- Results in different output
--- MiniIcons.get('file', 'Init.lua')
--- MiniIcons.get('file', 'init.LUA')
--- <
--- - `'filetype'` - icon data for 'filetype' values.
--- Supported icon names: any string.
--- Examples: >lua
---
--- MiniIcons.get('filetype', 'lua')
--- MiniIcons.get('filetype', 'help')
--- MiniIcons.get('filetype', 'minifiles')
--- <
--- - `'lsp'` - icon data for various "LSP kind" values.
--- Supported icon names: any string.
--- Examples: >lua
---
--- MiniIcons.get('lsp', 'array')
--- MiniIcons.get('lsp', 'keyword')
--- <
--- - `'os'` - icon data for popular operating systems.
--- Supported icon names: any string.
--- Examples: >lua
---
--- MiniIcons.get('os', 'linux')
--- MiniIcons.get('os', 'arch')
--- MiniIcons.get('os', 'macos')
--- <
---@param name string Icon name within category. Use |MiniIcons.list()| to get icon
--- names which are explicitly supported for specific category.
---
---@return [string,string] Tuple of icon string and a highlight group name it is
--- suggested to be highlighted with. Example: >lua
---
--- -- Results into `icon` be '󰢱' and `hl` be 'MiniIconsAzure'
--- local icon, hl = MiniIcons.get('file', 'file.lua')
--- <
MiniIcons.get = function(category, name)
if not (type(category) == 'string' and type(name) == 'string') then
H.error('Both `category` and `name` should be string.')
end
-- Get "get" implementation now to show informative message for bad category
local getter = H.get_impl[category]
if getter == nil then H.error(vim.inspect(category) .. ' is not a supported category.') end
-- Try cache first
name = (category == 'file' or category == 'directory') and H.fs_basename(name) or name:lower()
local cached = H.cache[category][name]
if cached ~= nil then return cached[1], cached[2] end
-- Get icon
local icon, hl = getter(name)
if icon == nil then
-- Fall back to category default
icon, hl = unpack(H.cache.default[category])
end
if hl == nil then
-- Normalize if icon is returned first time
icon, hl = H.style_icon(icon.glyph, name), icon.hl
end
-- Save to cache and return
H.cache[category][name] = { icon, hl }
return icon, hl
end
--- List explicitly supported icon names
---
---@param category string Category name supported by |MiniIcons.get()|.
---
---@return table Array of icon names which are explicitly supported for category.
--- Note, that `'file'` and `'extension'` categories support much more icon names
--- via their fallback to using |vim.filetype.match()| with `'filetype'` category.
MiniIcons.list = function(category)
local category_icons = H[category .. '_icons']
if category_icons == nil then H.error(vim.inspect(category) .. ' is not a supported category.') end
-- Output is a union of explicit built-in and custom icons
local res_map = {}
for k, _ in pairs(category_icons) do
res_map[k] = true
end
for k, _ in pairs(MiniIcons.config[category]) do
res_map[k] = true
end
local res = vim.tbl_keys(res_map)
table.sort(res)
return res
end
--- Mock 'nvim-web-devicons' module
---
--- Call this function to mock exported functions of 'nvim-tree/nvim-web-devicons'
--- plugin. It will mock all its functions which return icon data by
--- using |MiniIcons.get()| equivalent.
---
--- This function is useful until all relevant to you plugins depend solely on
--- 'nvim-web-devicons' and have not yet added an integration with 'mini.icons'.
---
--- Full example of usage: >lua
---
--- require('mini.icons').setup()
--- MiniIcons.mock_nvim_web_devicons()
--- <
--- Works without installed 'nvim-web-devicons' and even with it installed (needs
--- to be called after 'nvim-web-devicons' is set up).
MiniIcons.mock_nvim_web_devicons = function()
local M = package.loaded['nvim-web-devicons'] or {}
-- Main functions which get icon and highlight group
M.get_icon = function(name, ext, opts)
if type(ext) == 'string' then return MiniIcons.get('extension', ext) end
if type(name) == 'string' then return MiniIcons.get('file', name) end
H.error('In `require("nvim-web-devicons").get_icon()` either `name` or `ext` should be string.')
end
M.get_icon_by_filetype = function(ft, opts) return MiniIcons.get('filetype', ft) end
-- Use default colors of default icon (#6d8086 and 66) by default
local get_hl_data = function(...) return vim.api.nvim_get_hl_by_name(...) end
local get_hex = function(hl) return string.format('#%06x', get_hl_data(hl, true).foreground or 7176326) end
local get_cterm = function(hl) return get_hl_data(hl, false).foreground or 66 end
local with_hex = function(icon, hl) return icon, get_hex(hl) end
local with_cterm = function(icon, hl) return icon, get_cterm(hl) end
local with_hex_cterm = function(icon, hl) return icon, get_hex(hl), get_cterm(hl) end
M.get_default_icon = function()
local icon, hl = MiniIcons.get('default', 'file')
return { icon = icon, color = get_hex(hl), cterm_color = tostring(get_cterm(hl)), name = 'Default' }
end
M.get_icon_color = function(...) return with_hex(M.get_icon(...)) end
M.get_icon_cterm_color = function(...) return with_cterm(M.get_icon(...)) end
M.get_icon_colors = function(...) return with_hex_cterm(M.get_icon(...)) end
M.get_icon_color_by_filetype = function(...) return with_hex(M.get_icon_by_filetype(...)) end
M.get_icon_cterm_color_by_filetype = function(...) return with_cterm(M.get_icon_by_filetype(...)) end
M.get_icon_colors_by_filetype = function(...) return with_hex_cterm(M.get_icon_by_filetype(...)) end
M.get_icon_name_by_filetype = function(ft) return ft end
-- Have only partial support for these. Consider adding more if needed.
M.get_icons = function() return {} end
M.get_icons_by_desktop_environment = function() return {} end
M.get_icons_by_extension = function() return {} end
M.get_icons_by_filename = function() return {} end
M.get_icons_by_operating_system = function() return {} end
M.get_icons_by_window_manager = function() return {} end
-- Should be no need in the these. Suggest using `MiniIcons.setup()`.
M.has_loaded = function() return true end
M.refresh = function() end
M.set_default_icon = function() end
M.set_icon = function() end
M.set_icon_by_filetype = function() end
M.set_up_highlights = function() end
M.setup = function() end
package.loaded['nvim-web-devicons'] = M
end
-- Helper data ================================================================
-- Module default config
H.default_config = MiniIcons.config
-- Default icons per supported category
--stylua: ignore
H.default_icons = {
default = { glyph = '󰟢', hl = 'MiniIconsGrey' },
directory = { glyph = '󰉋', hl = 'MiniIconsAzure' },
extension = { glyph = '󰈔', hl = 'MiniIconsGrey' },
file = { glyph = '󰈔', hl = 'MiniIconsGrey' },
filetype = { glyph = '󰈔', hl = 'MiniIconsGrey' },
lsp = { glyph = '󰞋', hl = 'MiniIconsRed' },
os = { glyph = '󰟀', hl = 'MiniIconsPurple' },
}
-- Directory icons. Keys are some popular *language-agnostic* directory
-- basenames. Use only "folder-shaped" glyphs while prefering `nf-md-folder-*`
-- classes (unless glyph is designed specifically for the directory name)
--stylua: ignore
H.directory_icons = {
['.cache'] = { glyph = '󰪺', hl = 'MiniIconsCyan' },
['.config'] = { glyph = '󱁿', hl = 'MiniIconsCyan' },
['.git'] = { glyph = '', hl = 'MiniIconsOrange' },
['.github'] = { glyph = '', hl = 'MiniIconsAzure' },
['.local'] = { glyph = '󰉌', hl = 'MiniIconsCyan' },
['.vim'] = { glyph = '󰉋', hl = 'MiniIconsGreen' },
AppData = { glyph = '󰉌', hl = 'MiniIconsOrange' },
Applications = { glyph = '󱧺', hl = 'MiniIconsOrange' },
Desktop = { glyph = '󰚝', hl = 'MiniIconsOrange' },
Documents = { glyph = '󱧶', hl = 'MiniIconsOrange' },
Downloads = { glyph = '󰉍', hl = 'MiniIconsOrange' },
Favorites = { glyph = '󱃪', hl = 'MiniIconsOrange' },
Library = { glyph = '󰲂', hl = 'MiniIconsOrange' },
Music = { glyph = '󱍙', hl = 'MiniIconsOrange' },
Network = { glyph = '󰡰', hl = 'MiniIconsOrange' },
Pictures = { glyph = '󰉏', hl = 'MiniIconsOrange' },
ProgramData = { glyph = '󰉌', hl = 'MiniIconsOrange' },
Public = { glyph = '󱧰', hl = 'MiniIconsOrange' },
System = { glyph = '󱧼', hl = 'MiniIconsOrange' },
Templates = { glyph = '󱋣', hl = 'MiniIconsOrange' },
Trash = { glyph = '󱧴', hl = 'MiniIconsOrange' },
Users = { glyph = '󰉌', hl = 'MiniIconsOrange' },
Videos = { glyph = '󱞊', hl = 'MiniIconsOrange' },
Volumes = { glyph = '󰉓', hl = 'MiniIconsOrange' },
bin = { glyph = '󱧺', hl = 'MiniIconsYellow' },
build = { glyph = '󱧼', hl = 'MiniIconsGrey' },
boot = { glyph = '󰴋', hl = 'MiniIconsYellow' },
dev = { glyph = '󱧼', hl = 'MiniIconsYellow' },
doc = { glyph = '󱂷', hl = 'MiniIconsPurple' },
docs = { glyph = '󱂷', hl = 'MiniIconsPurple' },
etc = { glyph = '󱁿', hl = 'MiniIconsYellow' },
home = { glyph = '󱂵', hl = 'MiniIconsYellow' },
lib = { glyph = '󰲂', hl = 'MiniIconsYellow' },
media = { glyph = '󱧺', hl = 'MiniIconsYellow' },
mnt = { glyph = '󰉓', hl = 'MiniIconsYellow' },
['mini.nvim'] = { glyph = '󰚝', hl = 'MiniIconsRed' },
node_modules = { glyph = '', hl = 'MiniIconsGreen' },
nvim = { glyph = '󰉋', hl = 'MiniIconsGreen' },
opt = { glyph = '󰉗', hl = 'MiniIconsYellow' },
proc = { glyph = '󰢬', hl = 'MiniIconsYellow' },
root = { glyph = '󰷌', hl = 'MiniIconsYellow' },
sbin = { glyph = '󱧺', hl = 'MiniIconsYellow' },
src = { glyph = '󰴉', hl = 'MiniIconsPurple' },
srv = { glyph = '󱋣', hl = 'MiniIconsYellow' },
tmp = { glyph = '󰪺', hl = 'MiniIconsYellow' },
test = { glyph = '󱞊', hl = 'MiniIconsBlue' },
tests = { glyph = '󱞊', hl = 'MiniIconsBlue' },
usr = { glyph = '󰉌', hl = 'MiniIconsYellow' },
var = { glyph = '󱋣', hl = 'MiniIconsYellow' },
}
-- Extension icons
--stylua: ignore
H.extension_icons = {
-- Popular extensions associated with supported filetype. Present to not have
-- to rely on `vim.filetype.match()` in some cases (for performance or if it
-- fails to compute filetype by filename and content only, like '.ts', '.h').
-- Present only those which can be unambiguously detected from the extension.
-- Value is string with filetype's name to inherit from its icon data
asm = 'asm',
bib = 'bib',
bzl = 'bzl',
c = 'c',
cbl = 'cobol',
clj = 'clojure',
cpp = 'cpp',
cs = 'cs',
css = 'css',
csv = 'csv',
cu = 'cuda',
dart = 'dart',
diff = 'diff',
el = 'lisp',
elm = 'elm',
erl = 'erlang',
exs = 'elixir',
f90 = 'fortran',
fish = 'fish',
fnl = 'fennel',
fs = 'fsharp',
fsi = 'fsharp',
fsx = 'fsharp',
go = 'go',
h = { glyph = '󰫵', hl = 'MiniIconsPurple' },
hs = 'haskell',
htm = 'html',
html = 'html',
jav = 'java',
java = 'java',
jl = 'julia',
js = 'javascript',
json = 'json',
json5 = 'json5',
kt = 'kotlin',
latex = 'tex',
lua = 'lua',
md = 'markdown',
ml = 'ocaml',
mojo = 'mojo',
nim = 'nim',
nix = 'nix',
pdb = 'prolog',
pdf = 'pdf',
php = 'php',
purs = 'purescript',
py = 'python',
qmd = 'quarto',
r = 'r',
raku = 'raku',
rb = 'ruby',
rmd = 'rmd',
roc = 'roc',
rs = 'rust',
rst = 'rst',
scala = 'scala',
sh = 'bash',
sol = 'solidity',
srt = 'srt',
ss = 'scheme',
ssa = 'ssa',
svg = 'svg',
swift = 'swift',
toml = 'toml',
ts = 'typescript',
tsv = 'tsv',
-- Although there are some exact basename matches in `vim.filetype.match()`,
-- it does not detect 'txt' extension as "text" in most cases.
txt = 'text',
vim = 'vim',
vue = 'vue',
yaml = 'yaml',
yml = 'yaml',
zig = 'zig',
zsh = 'zsh',
-- Video
['3gp'] = { glyph = '󰈫', hl = 'MiniIconsYellow' },
avi = { glyph = '󰈫', hl = 'MiniIconsGrey' },
cast = { glyph = '󰈫', hl = 'MiniIconsRed' },
m4v = { glyph = '󰈫', hl = 'MiniIconsOrange' },
mkv = { glyph = '󰈫', hl = 'MiniIconsGreen' },
mov = { glyph = '󰈫', hl = 'MiniIconsCyan' },
mp4 = { glyph = '󰈫', hl = 'MiniIconsAzure' },
mpeg = { glyph = '󰈫', hl = 'MiniIconsPurple' },
mpg = { glyph = '󰈫', hl = 'MiniIconsPurple' },
webm = { glyph = '󰈫', hl = 'MiniIconsGrey' },
wmv = { glyph = '󰈫', hl = 'MiniIconsBlue' },
-- Audio
aac = { glyph = '󰈣', hl = 'MiniIconsYellow' },
aif = { glyph = '󰈣', hl = 'MiniIconsCyan' },
flac = { glyph = '󰈣', hl = 'MiniIconsOrange' },
m4a = { glyph = '󰈣', hl = 'MiniIconsPurple' },
mp3 = { glyph = '󰈣', hl = 'MiniIconsAzure' },
ogg = { glyph = '󰈣', hl = 'MiniIconsGrey' },
snd = { glyph = '󰈣', hl = 'MiniIconsRed' },
wav = { glyph = '󰈣', hl = 'MiniIconsGreen' },
wma = { glyph = '󰈣', hl = 'MiniIconsBlue' },
-- Image
bmp = { glyph = '󰈟', hl = 'MiniIconsGreen' },
eps = { glyph = '', hl = 'MiniIconsRed' },
gif = { glyph = '󰵸', hl = 'MiniIconsAzure' },
jpeg = { glyph = '󰈥', hl = 'MiniIconsOrange' },
jpg = { glyph = '󰈥', hl = 'MiniIconsOrange' },
png = { glyph = '󰸭', hl = 'MiniIconsPurple' },
tif = { glyph = '󰈟', hl = 'MiniIconsYellow' },
tiff = { glyph = '󰈟', hl = 'MiniIconsYellow' },
webp = { glyph = '󰈟', hl = 'MiniIconsBlue' },
-- Archives
["7z"] = { glyph = '󰗄', hl = 'MiniIconsBlue' },
bz = { glyph = '󰗄', hl = 'MiniIconsOrange' },
bz2 = { glyph = '󰗄', hl = 'MiniIconsOrange' },
bz3 = { glyph = '󰗄', hl = 'MiniIconsOrange' },
gz = { glyph = '󰗄', hl = 'MiniIconsGrey' },
rar = { glyph = '󰗄', hl = 'MiniIconsGreen' },
rpm = { glyph = '󰗄', hl = 'MiniIconsRed' },
sit = { glyph = '󰗄', hl = 'MiniIconsRed' },
tar = { glyph = '󰗄', hl = 'MiniIconsCyan' },
tgz = { glyph = '󰗄', hl = 'MiniIconsGrey' },
txz = { glyph = '󰗄', hl = 'MiniIconsPurple' },
xz = { glyph = '󰗄', hl = 'MiniIconsGreen' },
z = { glyph = '󰗄', hl = 'MiniIconsGrey' },
zip = { glyph = '󰗄', hl = 'MiniIconsAzure' },
zst = { glyph = '󰗄', hl = 'MiniIconsYellow' },
-- Software
doc = { glyph = '󱎒', hl = 'MiniIconsAzure' },
docm = { glyph = '󱎒', hl = 'MiniIconsAzure' },
docx = { glyph = '󱎒', hl = 'MiniIconsAzure' },
dot = { glyph = '󱎒', hl = 'MiniIconsAzure' },
dotx = { glyph = '󱎒', hl = 'MiniIconsAzure' },
exe = { glyph = '󰒔', hl = 'MiniIconsGrey' },
pps = { glyph = '󱎐', hl = 'MiniIconsRed' },
ppsm = { glyph = '󱎐', hl = 'MiniIconsRed' },
ppsx = { glyph = '󱎐', hl = 'MiniIconsRed' },
ppt = { glyph = '󱎐', hl = 'MiniIconsRed' },
pptm = { glyph = '󱎐', hl = 'MiniIconsRed' },
pptx = { glyph = '󱎐', hl = 'MiniIconsRed' },
xls = { glyph = '󱎏', hl = 'MiniIconsGreen' },
xlsm = { glyph = '󱎏', hl = 'MiniIconsGreen' },
xlsx = { glyph = '󱎏', hl = 'MiniIconsGreen' },
xlt = { glyph = '󱎏', hl = 'MiniIconsGreen' },
xltm = { glyph = '󱎏', hl = 'MiniIconsGreen' },
xltx = { glyph = '󱎏', hl = 'MiniIconsGreen' },
}
-- File icons. Keys are mostly some popular *language-agnostic* file basenames
-- and the ones which can conflict with icon detection based on extension.
--stylua: ignore
H.file_icons = {
['.DS_Store'] = { glyph = '󰒓', hl = 'MiniIconsRed' },
['.bash_profile'] = { glyph = '󰒓', hl = 'MiniIconsGreen' },
['.bashrc'] = { glyph = '󰒓', hl = 'MiniIconsGreen' },
['.git'] = { glyph = '󰊢', hl = 'MiniIconsOrange' },
['.mailmap'] = { glyph = '󰊢', hl = 'MiniIconsCyan' },
['.npmignore'] = { glyph = '󰒓', hl = 'MiniIconsGrey' },
['.nvmrc'] = { glyph = '󰒓', hl = 'MiniIconsGreen' },
['.xinitrc'] = { glyph = '󰒓', hl = 'MiniIconsBlue' },
['.zshrc'] = { glyph = '󰒓', hl = 'MiniIconsGreen' },
CHANGELOG = { glyph = '󰉻', hl = 'MiniIconsBlue' },
['CHANGELOG.md'] = { glyph = '󰉻', hl = 'MiniIconsBlue' },
CODE_OF_CONDUCT = { glyph = '󱃱', hl = 'MiniIconsRed' },
['CODE_OF_CONDUCT.md'] = { glyph = '󱃱', hl = 'MiniIconsRed' },
CONTRIBUTING = { glyph = '󰺾', hl = 'MiniIconsAzure' },
['CONTRIBUTING.md'] = { glyph = '󰺾', hl = 'MiniIconsAzure' },
['FUNDING.yml'] = { glyph = '󰇁', hl = 'MiniIconsGreen' },
LICENSE = { glyph = '', hl = 'MiniIconsCyan' },
['LICENSE.md'] = { glyph = '', hl = 'MiniIconsCyan' },
PKGBUILD = { glyph = '󱁤', hl = 'MiniIconsPurple' },
README = { glyph = '', hl = 'MiniIconsYellow' },
['README.md'] = { glyph = '', hl = 'MiniIconsYellow' },
['init.lua'] = { glyph = '', hl = 'MiniIconsGreen' },
}
-- Filetype icons. Keys are filetypes explicitly supported by Neovim core
-- (i.e. present in `getcompletion('', 'filetype')` except technical ones)
-- and filetypes from some popular plugins.
-- Rough process of how glyphs and icons are chosen:
-- - Try to balance usage of highlight groups.
-- - Prefer using the following Nerd Fonts classes (from best to worst):
-- - `nf-md-*` (UTF codes seem to be more thought through). It is also
-- correctly has double width in Kitty.
-- - `nf-dev-*` (more supported devicons).
-- - `nf-seti-*` (more up to date extensions).
-- - If filetype is present in 'nvim-web-devicons', use highlight group with
-- most similar hue (based on OKLCH color space with equally spaced grid as
-- in 'mini.hues' and chroma=3 for grey cutoff; adjust manually if needed).
-- - Sets that have same/close glyphs but maybe different highlights:
-- - Generic configuration filetypes (".*conf.*", ".*rc", if stated in
-- filetype file description, etc.) have same glyph.
-- - Similar language: assembly ("asm"), SQL, Perl, HTML, CSV, shell.
-- - Log files.
-- - Make / build system.
-- - Related to Internet/Web.
-- - For newly assigned icons use semantically close (first by filetype origin,
-- then by name) abstract icons with `nf-md-*` Nerd Fonts class.
-- - If no semantically close abstract icon present, use plain letter/digit
-- icon (based on the first filetype character) with highlight groups picked
-- randomly to achieve overall balance (trying to minimize maximum number of
-- glyph-hl duplicates).
--stylua: ignore
H.filetype_icons = {
-- Neovim filetype plugins
['8th'] = { glyph = '󰭁', hl = 'MiniIconsYellow' },
a2ps = { glyph = '󰒓', hl = 'MiniIconsCyan' },
a65 = { glyph = '', hl = 'MiniIconsRed' },
aap = { glyph = '󰫮', hl = 'MiniIconsOrange' },
abap = { glyph = '󰫮', hl = 'MiniIconsGreen' },
abaqus = { glyph = '󰫮', hl = 'MiniIconsGreen' },
abc = { glyph = '󰝚', hl = 'MiniIconsAzure' },
abel = { glyph = '󰫮', hl = 'MiniIconsAzure' },
acedb = { glyph = '󰆼', hl = 'MiniIconsGrey' },
ada = { glyph = '󱁷', hl = 'MiniIconsAzure' },
aflex = { glyph = '󰫮', hl = 'MiniIconsCyan' },
ahdl = { glyph = '󰫮', hl = 'MiniIconsRed' },
aidl = { glyph = '󰫮', hl = 'MiniIconsYellow' },
alsaconf = { glyph = '󰒓', hl = 'MiniIconsPurple' },
amiga = { glyph = '󰫮', hl = 'MiniIconsCyan' },
aml = { glyph = '󰫮', hl = 'MiniIconsPurple' },
ampl = { glyph = '󰫮', hl = 'MiniIconsOrange' },
ant = { glyph = '󰫮', hl = 'MiniIconsRed' },
antlr = { glyph = '󰫮', hl = 'MiniIconsCyan' },
apache = { glyph = '󰒓', hl = 'MiniIconsGreen' },
apachestyle = { glyph = '󰒓', hl = 'MiniIconsGrey' },
aptconf = { glyph = '󰒓', hl = 'MiniIconsOrange' },
arch = { glyph = '󰣇', hl = 'MiniIconsBlue' },
arduino = { glyph = '', hl = 'MiniIconsAzure' },
art = { glyph = '󰫮', hl = 'MiniIconsPurple' },
asciidoc = { glyph = '󰪶', hl = 'MiniIconsYellow' },
asm = { glyph = '', hl = 'MiniIconsPurple' },
asm68k = { glyph = '', hl = 'MiniIconsRed' },
asmh8300 = { glyph = '', hl = 'MiniIconsOrange' },
asn = { glyph = '󰫮', hl = 'MiniIconsBlue' },
aspperl = { glyph = '', hl = 'MiniIconsBlue' },
aspvbs = { glyph = '󰫮', hl = 'MiniIconsGreen' },
asterisk = { glyph = '󰒓', hl = 'MiniIconsBlue' },
asteriskvm = { glyph = '󰒓', hl = 'MiniIconsGrey' },
astro = { glyph = '󰓎', hl = 'MiniIconsBlue' },
atlas = { glyph = '󰫮', hl = 'MiniIconsAzure' },
autodoc = { glyph = '󰪶', hl = 'MiniIconsGreen' },
autohotkey = { glyph = '󰫮', hl = 'MiniIconsYellow' },
autoit = { glyph = '󰫮', hl = 'MiniIconsCyan' },
automake = { glyph = '󱁤', hl = 'MiniIconsPurple' },
ave = { glyph = '󰫮', hl = 'MiniIconsGrey' },
avra = { glyph = '', hl = 'MiniIconsPurple' },
awk = { glyph = '', hl = 'MiniIconsGrey' },
ayacc = { glyph = '󰫮', hl = 'MiniIconsCyan' },
b = { glyph = '󰫯', hl = 'MiniIconsYellow' },
baan = { glyph = '󰫯', hl = 'MiniIconsOrange' },
bash = { glyph = '', hl = 'MiniIconsGreen' },
basic = { glyph = '󰫯', hl = 'MiniIconsPurple' },
bc = { glyph = '󰫯', hl = 'MiniIconsCyan' },
bdf = { glyph = '󰛖', hl = 'MiniIconsRed' },
bib = { glyph = '󱉟', hl = 'MiniIconsYellow' },
bindzone = { glyph = '󰫯', hl = 'MiniIconsCyan' },
bitbake = { glyph = '󰃫', hl = 'MiniIconsOrange' },
blank = { glyph = '󰫯', hl = 'MiniIconsPurple' },
bp = { glyph = '󰫯', hl = 'MiniIconsYellow' },
bsdl = { glyph = '󰫯', hl = 'MiniIconsPurple' },
bst = { glyph = '󰫯', hl = 'MiniIconsCyan' },
btm = { glyph = '󰫯', hl = 'MiniIconsGreen' },
bzl = { glyph = '', hl = 'MiniIconsGreen' },
bzr = { glyph = '󰜘', hl = 'MiniIconsRed' },
c = { glyph = '󰙱', hl = 'MiniIconsBlue' },
cabal = { glyph = '󰲒', hl = 'MiniIconsBlue' },
cabalconfig = { glyph = '󰒓', hl = 'MiniIconsGrey' },
cabalproject = { glyph = '󰫰', hl = 'MiniIconsBlue' },
calendar = { glyph = '󰃵', hl = 'MiniIconsRed' },
catalog = { glyph = '󰕲', hl = 'MiniIconsGrey' },
cdl = { glyph = '󰫰', hl = 'MiniIconsOrange' },
cdrdaoconf = { glyph = '󰒓', hl = 'MiniIconsRed' },
cdrtoc = { glyph = '󰠶', hl = 'MiniIconsRed' },
cf = { glyph = '󰫰', hl = 'MiniIconsRed' },
cfg = { glyph = '󰒓', hl = 'MiniIconsBlue' },
cgdbrc = { glyph = '󰒓', hl = 'MiniIconsRed' },
ch = { glyph = '󰫰', hl = 'MiniIconsCyan' },
chaiscript = { glyph = '󰶞', hl = 'MiniIconsOrange' },
change = { glyph = '󰹳', hl = 'MiniIconsYellow' },
changelog = { glyph = '󰷐', hl = 'MiniIconsBlue' },
chaskell = { glyph = '󰲒', hl = 'MiniIconsGreen' },
chatito = { glyph = '󰫰', hl = 'MiniIconsCyan' },
checkhealth = { glyph = '󰓙', hl = 'MiniIconsBlue' },
cheetah = { glyph = '󰫰', hl = 'MiniIconsGrey' },
chicken = { glyph = '󰫰', hl = 'MiniIconsRed' },
chill = { glyph = '󰫰', hl = 'MiniIconsBlue' },
chordpro = { glyph = '󰫰', hl = 'MiniIconsGreen' },
chuck = { glyph = '󰫰', hl = 'MiniIconsBlue' },
cl = { glyph = '󰫰', hl = 'MiniIconsCyan' },
clean = { glyph = '󰫰', hl = 'MiniIconsBlue' },
clipper = { glyph = '󰫰', hl = 'MiniIconsPurple' },
clojure = { glyph = '', hl = 'MiniIconsGreen' },
cmake = { glyph = '󱁤', hl = 'MiniIconsYellow' },
cmakecache = { glyph = '󱁤', hl = 'MiniIconsRed' },
cmod = { glyph = '󰫰', hl = 'MiniIconsCyan' },
cmusrc = { glyph = '󰒓', hl = 'MiniIconsRed' },
cobol = { glyph = '󱌼', hl = 'MiniIconsBlue' },
coco = { glyph = '󰫰', hl = 'MiniIconsRed' },
conaryrecipe = { glyph = '󰫰', hl = 'MiniIconsGrey' },
conf = { glyph = '󰒓', hl = 'MiniIconsGrey' },
config = { glyph = '󰒓', hl = 'MiniIconsCyan' },
confini = { glyph = '󰒓', hl = 'MiniIconsAzure' },
context = { glyph = '', hl = 'MiniIconsGreen' },
corn = { glyph = '󰞸', hl = 'MiniIconsYellow' },
cpp = { glyph = '󰙲', hl = 'MiniIconsAzure' },
crm = { glyph = '󰫰', hl = 'MiniIconsGreen' },
crontab = { glyph = '󰔠', hl = 'MiniIconsAzure' },
cs = { glyph = '󰌛', hl = 'MiniIconsGreen' },
csc = { glyph = '󰫰', hl = 'MiniIconsBlue' },
csdl = { glyph = '󰫰', hl = 'MiniIconsCyan' },
csh = { glyph = '', hl = 'MiniIconsGrey' },
csp = { glyph = '󰫰', hl = 'MiniIconsAzure' },
css = { glyph = '󰌜', hl = 'MiniIconsAzure' },
csv = { glyph = '', hl = 'MiniIconsGreen' },
csv_pipe = { glyph = '', hl = 'MiniIconsAzure' },
csv_semicolon = { glyph = '', hl = 'MiniIconsRed' },
csv_whitespace = { glyph = '', hl = 'MiniIconsPurple' },
cterm = { glyph = '󰫰', hl = 'MiniIconsCyan' },
ctrlh = { glyph = '󰫰', hl = 'MiniIconsOrange' },
cucumber = { glyph = '󰫰', hl = 'MiniIconsPurple' },
cuda = { glyph = '', hl = 'MiniIconsGreen' },
cupl = { glyph = '󰫰', hl = 'MiniIconsOrange' },
cuplsim = { glyph = '󰫰', hl = 'MiniIconsPurple' },
cvs = { glyph = '󰜘', hl = 'MiniIconsGreen' },
cvsrc = { glyph = '󰒓', hl = 'MiniIconsYellow' },
cweb = { glyph = '󰫰', hl = 'MiniIconsCyan' },
cynlib = { glyph = '󰙲', hl = 'MiniIconsPurple' },
cynpp = { glyph = '󰙲', hl = 'MiniIconsYellow' },
d = { glyph = '', hl = 'MiniIconsGreen' },
dart = { glyph = '', hl = 'MiniIconsBlue' },
datascript = { glyph = '󰫱', hl = 'MiniIconsGreen' },
dcd = { glyph = '󰫱', hl = 'MiniIconsCyan' },
dcl = { glyph = '󰫱', hl = 'MiniIconsAzure' },
deb822sources = { glyph = '󰫱', hl = 'MiniIconsCyan' },
debchangelog = { glyph = '󰷐', hl = 'MiniIconsBlue' },
debcontrol = { glyph = '󰫱', hl = 'MiniIconsOrange' },
debcopyright = { glyph = '', hl = 'MiniIconsRed' },
debsources = { glyph = '󰫱', hl = 'MiniIconsYellow' },
def = { glyph = '󰫱', hl = 'MiniIconsGrey' },
denyhosts = { glyph = '󰒓', hl = 'MiniIconsGrey' },
dep3patch = { glyph = '󰫱', hl = 'MiniIconsCyan' },
desc = { glyph = '󰫱', hl = 'MiniIconsCyan' },
desktop = { glyph = '󰍹', hl = 'MiniIconsPurple' },
dictconf = { glyph = '󰒓', hl = 'MiniIconsOrange' },
dictdconf = { glyph = '󰒓', hl = 'MiniIconsBlue' },
diff = { glyph = '󰦓', hl = 'MiniIconsRed' },
dircolors = { glyph = '󰫱', hl = 'MiniIconsRed' },
dirpager = { glyph = '󰙅', hl = 'MiniIconsYellow' },
diva = { glyph = '󰫱', hl = 'MiniIconsRed' },
django = { glyph = '', hl = 'MiniIconsGreen' },
dns = { glyph = '󰫱', hl = 'MiniIconsOrange' },
dnsmasq = { glyph = '󰫱', hl = 'MiniIconsGrey' },
docbk = { glyph = '󰫱', hl = 'MiniIconsYellow' },
docbksgml = { glyph = '󰫱', hl = 'MiniIconsGrey' },
docbkxml = { glyph = '󰫱', hl = 'MiniIconsGrey' },
dockerfile = { glyph = '󰡨', hl = 'MiniIconsBlue' },
dosbatch = { glyph = '󰯂', hl = 'MiniIconsGreen' },
dosini = { glyph = '󰯂', hl = 'MiniIconsAzure' },
dot = { glyph = '󱁉', hl = 'MiniIconsAzure' },
doxygen = { glyph = '󰋘', hl = 'MiniIconsBlue' },
dracula = { glyph = '󰭟', hl = 'MiniIconsGrey' },
dsl = { glyph = '󰫱', hl = 'MiniIconsAzure' },
dtd = { glyph = '󰫱', hl = 'MiniIconsCyan' },
dtml = { glyph = '󰫱', hl = 'MiniIconsRed' },
dtrace = { glyph = '󰫱', hl = 'MiniIconsRed' },
dts = { glyph = '󰫱', hl = 'MiniIconsRed' },
dune = { glyph = '', hl = 'MiniIconsGreen' },
dylan = { glyph = '󰫱', hl = 'MiniIconsRed' },
dylanintr = { glyph = '󰫱', hl = 'MiniIconsGrey' },
dylanlid = { glyph = '󰫱', hl = 'MiniIconsOrange' },
ecd = { glyph = '󰫲', hl = 'MiniIconsPurple' },
edif = { glyph = '󰫲', hl = 'MiniIconsCyan' },
editorconfig = { glyph = '', hl = 'MiniIconsGrey' },
eiffel = { glyph = '󱕫', hl = 'MiniIconsYellow' },
elf = { glyph = '󰫲', hl = 'MiniIconsGreen' },
elinks = { glyph = '󰒓', hl = 'MiniIconsOrange' },
elixir = { glyph = '', hl = 'MiniIconsPurple' },
elm = { glyph = '', hl = 'MiniIconsAzure' },
elmfilt = { glyph = '󰫲', hl = 'MiniIconsBlue' },
erlang = { glyph = '', hl = 'MiniIconsRed' },
eruby = { glyph = '󰴭', hl = 'MiniIconsOrange' },
esmtprc = { glyph = '󰒓', hl = 'MiniIconsYellow' },
esqlc = { glyph = '󰆼', hl = 'MiniIconsGrey' },
esterel = { glyph = '󰫲', hl = 'MiniIconsAzure' },
eterm = { glyph = '󰒓', hl = 'MiniIconsCyan' },
euphoria3 = { glyph = '󰫲', hl = 'MiniIconsRed' },
euphoria4 = { glyph = '󰫲', hl = 'MiniIconsYellow' },
eviews = { glyph = '󰫲', hl = 'MiniIconsCyan' },
exim = { glyph = '󰒓', hl = 'MiniIconsPurple' },
expect = { glyph = '󰫲', hl = 'MiniIconsGrey' },
exports = { glyph = '󰈇', hl = 'MiniIconsPurple' },
falcon = { glyph = '󱗆', hl = 'MiniIconsOrange' },
fan = { glyph = '󰫳', hl = 'MiniIconsAzure' },
fasm = { glyph = '', hl = 'MiniIconsPurple' },
fdcc = { glyph = '󰫳', hl = 'MiniIconsBlue' },
fennel = { glyph = '', hl = 'MiniIconsYellow' },
fetchmail = { glyph = '󰒓', hl = 'MiniIconsGrey' },
fgl = { glyph = '󰫳', hl = 'MiniIconsCyan' },
fish = { glyph = '', hl = 'MiniIconsGrey' },
flexwiki = { glyph = '󰖬', hl = 'MiniIconsPurple' },
focexec = { glyph = '󰫳', hl = 'MiniIconsPurple' },
form = { glyph = '󰫳', hl = 'MiniIconsCyan' },
forth = { glyph = '󰬽', hl = 'MiniIconsRed' },
fortran = { glyph = '󱈚', hl = 'MiniIconsPurple' },
foxpro = { glyph = '󰫳', hl = 'MiniIconsGreen' },
fpcmake = { glyph = '󱁤', hl = 'MiniIconsRed' },
framescript = { glyph = '󰫳', hl = 'MiniIconsCyan' },
freebasic = { glyph = '󰫳', hl = 'MiniIconsOrange' },
fsharp = { glyph = '', hl = 'MiniIconsBlue' },
fstab = { glyph = '󰋊', hl = 'MiniIconsGrey' },
fvwm = { glyph = '󰒓', hl = 'MiniIconsAzure' },
fvwm2m4 = { glyph = '󰒓', hl = 'MiniIconsCyan' },
gdb = { glyph = '󰈺', hl = 'MiniIconsGrey' },
gdmo = { glyph = '󰫴', hl = 'MiniIconsBlue' },
gdresource = { glyph = '', hl = 'MiniIconsGreen' },
gdscript = { glyph = '', hl = 'MiniIconsYellow' },
gdshader = { glyph = '', hl = 'MiniIconsPurple' },
gedcom = { glyph = '󰫴', hl = 'MiniIconsRed' },
gemtext = { glyph = '󰪁', hl = 'MiniIconsAzure' },
gift = { glyph = '󰹄', hl = 'MiniIconsRed' },
git = { glyph = '󰊢', hl = 'MiniIconsOrange' },
gitattributes = { glyph = '󰊢', hl = 'MiniIconsYellow' },
gitcommit = { glyph = '󰊢', hl = 'MiniIconsGreen' },
gitconfig = { glyph = '󰒓', hl = 'MiniIconsOrange' },
gitignore = { glyph = '󰊢', hl = 'MiniIconsPurple' },
gitolite = { glyph = '󰒓', hl = 'MiniIconsGreen' },
gitrebase = { glyph = '󰊢', hl = 'MiniIconsAzure' },
gitsendemail = { glyph = '󰊢', hl = 'MiniIconsBlue' },
gkrellmrc = { glyph = '󰒓', hl = 'MiniIconsRed' },
gnash = { glyph = '󰒓', hl = 'MiniIconsGreen' },
gnuplot = { glyph = '󰺒', hl = 'MiniIconsPurple' },
go = { glyph = '󰟓', hl = 'MiniIconsAzure' },
godoc = { glyph = '󰟓', hl = 'MiniIconsOrange' },
gp = { glyph = '󰫴', hl = 'MiniIconsCyan' },
gpg = { glyph = '󰒓', hl = 'MiniIconsGrey' },
gprof = { glyph = '󰫴', hl = 'MiniIconsAzure' },
grads = { glyph = '󰫴', hl = 'MiniIconsPurple' },
graphql = { glyph = '󰡷', hl = 'MiniIconsRed' },
0