feat: mini.hipatterns
This commit is contained in:
parent
ddd018042e
commit
5d588eaf82
4 changed files with 446 additions and 2 deletions
|
@ -34,6 +34,7 @@ with final.pkgs.lib; let
|
|||
plenary-nvim
|
||||
nui-nvim
|
||||
persistence-nvim
|
||||
mini-hipatterns
|
||||
|
||||
# Colorscheme
|
||||
rose-pine
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
---@type {[string]:"azure" | "blue" | "cyan" | "green" | "grey" | "orange" | "purple" | "red" | "yellow"}
|
||||
return {
|
||||
---@class colors
|
||||
---@field tailwind colors.tailwind
|
||||
---@field [string] colorNames
|
||||
local M = {}
|
||||
|
||||
---@alias colorNames "azure" | "blue" | "cyan" | "green" | "grey" | "orange" | "purple" | "red" | "yellow"
|
||||
|
||||
---@type {[string]:colorNames}
|
||||
M.colors = {
|
||||
around = 'purple',
|
||||
buffers = 'cyan',
|
||||
change = 'cyan',
|
||||
|
@ -22,3 +29,353 @@ return {
|
|||
window = 'blue',
|
||||
yank = 'yellow',
|
||||
}
|
||||
|
||||
---@class colorSteps
|
||||
---@field [50] string
|
||||
---@field [100] string
|
||||
---@field [200] string
|
||||
---@field [300] string
|
||||
---@field [400] string
|
||||
---@field [500] string
|
||||
---@field [600] string
|
||||
---@field [700] string
|
||||
---@field [800] string
|
||||
---@field [900] string
|
||||
---@field [950] string
|
||||
|
||||
---@class colors.tailwind
|
||||
---@field slate colorSteps
|
||||
---@field gray colorSteps
|
||||
---@field zinc colorSteps
|
||||
---@field neutral colorSteps
|
||||
---@field stone colorSteps
|
||||
---@field red colorSteps
|
||||
---@field orange colorSteps
|
||||
---@field amber colorSteps
|
||||
---@field yellow colorSteps
|
||||
---@field lime colorSteps
|
||||
---@field green colorSteps
|
||||
---@field emerald colorSteps
|
||||
---@field teal colorSteps
|
||||
---@field cyan colorSteps
|
||||
---@field sky colorSteps
|
||||
---@field blue colorSteps
|
||||
---@field indigo colorSteps
|
||||
---@field violet colorSteps
|
||||
---@field purple colorSteps
|
||||
---@field fuchsia colorSteps
|
||||
---@field pink colorSteps
|
||||
---@field rose colorSteps
|
||||
|
||||
---@type colors.tailwind
|
||||
M.tailwind = {
|
||||
slate = {
|
||||
[50] = 'f8fafc',
|
||||
[100] = 'f1f5f9',
|
||||
[200] = 'e2e8f0',
|
||||
[300] = 'cbd5e1',
|
||||
[400] = '94a3b8',
|
||||
[500] = '64748b',
|
||||
[600] = '475569',
|
||||
[700] = '334155',
|
||||
[800] = '1e293b',
|
||||
[900] = '0f172a',
|
||||
[950] = '020617',
|
||||
},
|
||||
|
||||
gray = {
|
||||
[50] = 'f9fafb',
|
||||
[100] = 'f3f4f6',
|
||||
[200] = 'e5e7eb',
|
||||
[300] = 'd1d5db',
|
||||
[400] = '9ca3af',
|
||||
[500] = '6b7280',
|
||||
[600] = '4b5563',
|
||||
[700] = '374151',
|
||||
[800] = '1f2937',
|
||||
[900] = '111827',
|
||||
[950] = '030712',
|
||||
},
|
||||
|
||||
zinc = {
|
||||
[50] = 'fafafa',
|
||||
[100] = 'f4f4f5',
|
||||
[200] = 'e4e4e7',
|
||||
[300] = 'd4d4d8',
|
||||
[400] = 'a1a1aa',
|
||||
[500] = '71717a',
|
||||
[600] = '52525b',
|
||||
[700] = '3f3f46',
|
||||
[800] = '27272a',
|
||||
[900] = '18181b',
|
||||
[950] = '09090B',
|
||||
},
|
||||
|
||||
neutral = {
|
||||
[50] = 'fafafa',
|
||||
[100] = 'f5f5f5',
|
||||
[200] = 'e5e5e5',
|
||||
[300] = 'd4d4d4',
|
||||
[400] = 'a3a3a3',
|
||||
[500] = '737373',
|
||||
[600] = '525252',
|
||||
[700] = '404040',
|
||||
[800] = '262626',
|
||||
[900] = '171717',
|
||||
[950] = '0a0a0a',
|
||||
},
|
||||
|
||||
stone = {
|
||||
[50] = 'fafaf9',
|
||||
[100] = 'f5f5f4',
|
||||
[200] = 'e7e5e4',
|
||||
[300] = 'd6d3d1',
|
||||
[400] = 'a8a29e',
|
||||
[500] = '78716c',
|
||||
[600] = '57534e',
|
||||
[700] = '44403c',
|
||||
[800] = '292524',
|
||||
[900] = '1c1917',
|
||||
[950] = '0a0a0a',
|
||||
},
|
||||
|
||||
red = {
|
||||
[50] = 'fef2f2',
|
||||
[100] = 'fee2e2',
|
||||
[200] = 'fecaca',
|
||||
[300] = 'fca5a5',
|
||||
[400] = 'f87171',
|
||||
[500] = 'ef4444',
|
||||
[600] = 'dc2626',
|
||||
[700] = 'b91c1c',
|
||||
[800] = '991b1b',
|
||||
[900] = '7f1d1d',
|
||||
[950] = '450a0a',
|
||||
},
|
||||
|
||||
orange = {
|
||||
[50] = 'fff7ed',
|
||||
[100] = 'ffedd5',
|
||||
[200] = 'fed7aa',
|
||||
[300] = 'fdba74',
|
||||
[400] = 'fb923c',
|
||||
[500] = 'f97316',
|
||||
[600] = 'ea580c',
|
||||
[700] = 'c2410c',
|
||||
[800] = '9a3412',
|
||||
[900] = '7c2d12',
|
||||
[950] = '431407',
|
||||
},
|
||||
|
||||
amber = {
|
||||
[50] = 'fffbeb',
|
||||
[100] = 'fef3c7',
|
||||
[200] = 'fde68a',
|
||||
[300] = 'fcd34d',
|
||||
[400] = 'fbbf24',
|
||||
[500] = 'f59e0b',
|
||||
[600] = 'd97706',
|
||||
[700] = 'b45309',
|
||||
[800] = '92400e',
|
||||
[900] = '78350f',
|
||||
[950] = '451a03',
|
||||
},
|
||||
|
||||
yellow = {
|
||||
[50] = 'fefce8',
|
||||
[100] = 'fef9c3',
|
||||
[200] = 'fef08a',
|
||||
[300] = 'fde047',
|
||||
[400] = 'facc15',
|
||||
[500] = 'eab308',
|
||||
[600] = 'ca8a04',
|
||||
[700] = 'a16207',
|
||||
[800] = '854d0e',
|
||||
[900] = '713f12',
|
||||
[950] = '422006',
|
||||
},
|
||||
|
||||
lime = {
|
||||
[50] = 'f7fee7',
|
||||
[100] = 'ecfccb',
|
||||
[200] = 'd9f99d',
|
||||
[300] = 'bef264',
|
||||
[400] = 'a3e635',
|
||||
[500] = '84cc16',
|
||||
[600] = '65a30d',
|
||||
[700] = '4d7c0f',
|
||||
[800] = '3f6212',
|
||||
[900] = '365314',
|
||||
[950] = '1a2e05',
|
||||
},
|
||||
|
||||
green = {
|
||||
[50] = 'f0fdf4',
|
||||
[100] = 'dcfce7',
|
||||
[200] = 'bbf7d0',
|
||||
[300] = '86efac',
|
||||
[400] = '4ade80',
|
||||
[500] = '22c55e',
|
||||
[600] = '16a34a',
|
||||
[700] = '15803d',
|
||||
[800] = '166534',
|
||||
[900] = '14532d',
|
||||
[950] = '052e16',
|
||||
},
|
||||
|
||||
emerald = {
|
||||
[50] = 'ecfdf5',
|
||||
[100] = 'd1fae5',
|
||||
[200] = 'a7f3d0',
|
||||
[300] = '6ee7b7',
|
||||
[400] = '34d399',
|
||||
[500] = '10b981',
|
||||
[600] = '059669',
|
||||
[700] = '047857',
|
||||
[800] = '065f46',
|
||||
[900] = '064e3b',
|
||||
[950] = '022c22',
|
||||
},
|
||||
|
||||
teal = {
|
||||
[50] = 'f0fdfa',
|
||||
[100] = 'ccfbf1',
|
||||
[200] = '99f6e4',
|
||||
[300] = '5eead4',
|
||||
[400] = '2dd4bf',
|
||||
[500] = '14b8a6',
|
||||
[600] = '0d9488',
|
||||
[700] = '0f766e',
|
||||
[800] = '115e59',
|
||||
[900] = '134e4a',
|
||||
[950] = '042f2e',
|
||||
},
|
||||
|
||||
cyan = {
|
||||
[50] = 'ecfeff',
|
||||
[100] = 'cffafe',
|
||||
[200] = 'a5f3fc',
|
||||
[300] = '67e8f9',
|
||||
[400] = '22d3ee',
|
||||
[500] = '06b6d4',
|
||||
[600] = '0891b2',
|
||||
[700] = '0e7490',
|
||||
[800] = '155e75',
|
||||
[900] = '164e63',
|
||||
[950] = '083344',
|
||||
},
|
||||
|
||||
sky = {
|
||||
[50] = 'f0f9ff',
|
||||
[100] = 'e0f2fe',
|
||||
[200] = 'bae6fd',
|
||||
[300] = '7dd3fc',
|
||||
[400] = '38bdf8',
|
||||
[500] = '0ea5e9',
|
||||
[600] = '0284c7',
|
||||
[700] = '0369a1',
|
||||
[800] = '075985',
|
||||
[900] = '0c4a6e',
|
||||
[950] = '082f49',
|
||||
},
|
||||
|
||||
blue = {
|
||||
[50] = 'eff6ff',
|
||||
[100] = 'dbeafe',
|
||||
[200] = 'bfdbfe',
|
||||
[300] = '93c5fd',
|
||||
[400] = '60a5fa',
|
||||
[500] = '3b82f6',
|
||||
[600] = '2563eb',
|
||||
[700] = '1d4ed8',
|
||||
[800] = '1e40af',
|
||||
[900] = '1e3a8a',
|
||||
[950] = '172554',
|
||||
},
|
||||
|
||||
indigo = {
|
||||
[50] = 'eef2ff',
|
||||
[100] = 'e0e7ff',
|
||||
[200] = 'c7d2fe',
|
||||
[300] = 'a5b4fc',
|
||||
[400] = '818cf8',
|
||||
[500] = '6366f1',
|
||||
[600] = '4f46e5',
|
||||
[700] = '4338ca',
|
||||
[800] = '3730a3',
|
||||
[900] = '312e81',
|
||||
[950] = '1e1b4b',
|
||||
},
|
||||
|
||||
violet = {
|
||||
[50] = 'f5f3ff',
|
||||
[100] = 'ede9fe',
|
||||
[200] = 'ddd6fe',
|
||||
[300] = 'c4b5fd',
|
||||
[400] = 'a78bfa',
|
||||
[500] = '8b5cf6',
|
||||
[600] = '7c3aed',
|
||||
[700] = '6d28d9',
|
||||
[800] = '5b21b6',
|
||||
[900] = '4c1d95',
|
||||
[950] = '2e1065',
|
||||
},
|
||||
|
||||
purple = {
|
||||
[50] = 'faf5ff',
|
||||
[100] = 'f3e8ff',
|
||||
[200] = 'e9d5ff',
|
||||
[300] = 'd8b4fe',
|
||||
[400] = 'c084fc',
|
||||
[500] = 'a855f7',
|
||||
[600] = '9333ea',
|
||||
[700] = '7e22ce',
|
||||
[800] = '6b21a8',
|
||||
[900] = '581c87',
|
||||
[950] = '3b0764',
|
||||
},
|
||||
|
||||
fuchsia = {
|
||||
[50] = 'fdf4ff',
|
||||
[100] = 'fae8ff',
|
||||
[200] = 'f5d0fe',
|
||||
[300] = 'f0abfc',
|
||||
[400] = 'e879f9',
|
||||
[500] = 'd946ef',
|
||||
[600] = 'c026d3',
|
||||
[700] = 'a21caf',
|
||||
[800] = '86198f',
|
||||
[900] = '701a75',
|
||||
[950] = '4a044e',
|
||||
},
|
||||
|
||||
pink = {
|
||||
[50] = 'fdf2f8',
|
||||
[100] = 'fce7f3',
|
||||
[200] = 'fbcfe8',
|
||||
[300] = 'f9a8d4',
|
||||
[400] = 'f472b6',
|
||||
[500] = 'ec4899',
|
||||
[600] = 'db2777',
|
||||
[700] = 'be185d',
|
||||
[800] = '9d174d',
|
||||
[900] = '831843',
|
||||
[950] = '500724',
|
||||
},
|
||||
|
||||
rose = {
|
||||
[50] = 'fff1f2',
|
||||
[100] = 'ffe4e6',
|
||||
[200] = 'fecdd3',
|
||||
[300] = 'fda4af',
|
||||
[400] = 'fb7185',
|
||||
[500] = 'f43f5e',
|
||||
[600] = 'e11d48',
|
||||
[700] = 'be123c',
|
||||
[800] = '9f1239',
|
||||
[900] = '881337',
|
||||
[950] = '4c0519',
|
||||
},
|
||||
}
|
||||
|
||||
return M
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
local req = MarleyVim.local_require('plugins.util')
|
||||
|
||||
return {
|
||||
req('mini-hipatterns'),
|
||||
req('nui-nvim'),
|
||||
req('persistance-nvim'),
|
||||
req('plenary'),
|
||||
|
|
85
nvim/lua/plugins/util/mini-hipatterns.lua
Normal file
85
nvim/lua/plugins/util/mini-hipatterns.lua
Normal file
|
@ -0,0 +1,85 @@
|
|||
return {
|
||||
'mini.hipatterns',
|
||||
event = { 'BufReadPost', 'BufWritePost', 'BufNewFile' },
|
||||
after = function()
|
||||
local hipatterns = require('mini.hipatterns')
|
||||
|
||||
-- Tailwind CSS support.
|
||||
local hls = {}
|
||||
local tailwindFts = {
|
||||
'astro',
|
||||
'css',
|
||||
'heex',
|
||||
'html',
|
||||
'html-eex',
|
||||
'javascript',
|
||||
'javascriptreact',
|
||||
'rust',
|
||||
'svelte',
|
||||
'typescript',
|
||||
'typescriptreact',
|
||||
'vue',
|
||||
}
|
||||
|
||||
-- Reset hl groups when colorscheme changes.
|
||||
vim.api.nvim_create_autocmd('ColorScheme', {
|
||||
callback = function()
|
||||
hls = {}
|
||||
end,
|
||||
})
|
||||
|
||||
hipatterns.setup({
|
||||
highlighters = {
|
||||
hex_color = hipatterns.gen_highlighter.hex_color({ priority = 2000 }),
|
||||
shorthand = {
|
||||
pattern = '()#%x%x%x()%f[^%x%w]',
|
||||
group = function(_, _, data)
|
||||
---@type string
|
||||
local match = data.full_match
|
||||
local r, g, b = match:sub(2, 2), match:sub(3, 3), match:sub(4, 4)
|
||||
local hex_color = '#' .. r .. r .. g .. g .. b .. b
|
||||
|
||||
return MiniHipatterns.compute_hex_color_group(hex_color, 'bg')
|
||||
end,
|
||||
extmark_opts = { priority = 2000 },
|
||||
},
|
||||
tailwind = {
|
||||
pattern = function()
|
||||
if not vim.tbl_contains(tailwindFts, vim.bo.filetype) then
|
||||
return
|
||||
end
|
||||
|
||||
return '%f[%w:-]()[%w:-]+%-[a-z%-]+%-%d+()%f[^%w:-]'
|
||||
end,
|
||||
group = function(_, _, m)
|
||||
---@type string
|
||||
local match = m.full_match
|
||||
|
||||
---@type string, number?
|
||||
local color, shade = match:match('[%w-]+%-([a-z%-]+)%-(%d+)')
|
||||
shade = tonumber(shade)
|
||||
|
||||
local c = require('colors')
|
||||
local bg = vim.tbl_get(c.tailwind, color, shade)
|
||||
if bg then
|
||||
local hl = 'MiniHipatternsTailwind' .. color .. shade
|
||||
if not hls[hl] then
|
||||
hls[hl] = true
|
||||
|
||||
local bg_shade = shade == 500 and 950
|
||||
or shade < 500 and 900
|
||||
or 100
|
||||
local fg = vim.tbl_get(c.tailwind, color, bg_shade)
|
||||
|
||||
vim.api.nvim_set_hl(0, hl, { bg = '#' .. bg, fg = '#' .. fg })
|
||||
end
|
||||
|
||||
return hl
|
||||
end
|
||||
end,
|
||||
extmark_opts = { priority = 2000 },
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
Loading…
Reference in a new issue