diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index cd69062..4cee468 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -15,14 +15,30 @@ body: required: true - type: input attributes: - label: "Terminal / multiplexer" - placeholder: "Kitty / tmux" + label: "Terminal" + placeholder: "Kitty" validations: required: true - type: textarea attributes: label: Describe the bug - description: A clear and concise description of what the bug is. Please include screenshots if possible and any related errors you see in Neovim. + description: A clear and concise description of what the bug is. Please include any related errors you see in Neovim. + validations: + required: true + - type: textarea + attributes: + label: Steps To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. + 2. + 3. + validations: + required: true + - type: textarea + attributes: + label: Expected Behavior + description: A concise description of what you expected to happen. validations: required: true - type: textarea @@ -45,7 +61,7 @@ body: end require("rose-pine").setup({ - -- ADD ROSÉ PINE CONFIG THAT IS _NECESSARY_ TO REPRODUCE THE ISSUE + -- ADD ROSÉ PINE CONFIG THAT IS _NECESSARY_ FOR REPRODUCING THE ISSUE }) vim.cmd("colorscheme rose-pine") diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index bd9d3f6..2b45cdb 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -3,12 +3,24 @@ description: Suggest a new feature title: "feature: " labels: [enhancement] body: + - type: textarea + validations: + required: true + attributes: + label: Is your feature request related to a problem? Please describe. + description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - type: textarea validations: required: true attributes: label: Describe the solution you'd like description: A clear and concise description of what you want to happen. + - type: textarea + validations: + required: true + attributes: + label: Describe alternatives you've considered + description: A clear and concise description of any alternative solutions or features you've considered. - type: textarea validations: required: false diff --git a/.stylua.toml b/.stylua.toml new file mode 100644 index 0000000..9d5f247 --- /dev/null +++ b/.stylua.toml @@ -0,0 +1,4 @@ +column_width = 80 +indent_type = "Tabs" +line_endings = "Unix" +quote_style = "AutoPreferSingle" diff --git a/changelog.md b/changelog.md deleted file mode 100644 index bd583ba..0000000 --- a/changelog.md +++ /dev/null @@ -1,82 +0,0 @@ -# Changelog - -## v2.0.0-next.1 - -### What's new - -- Add proper support for `StatusLineTerm` & `StatusLineTermNC`, controlled via `enable.terminal` -- Add background glow to diagnostic virtual text -- Add `extend_background_behind_borders` -- Add `styles.bold` and alternatively styling when disabled -- Add `before_highlight` hook to allow changing palette values and behaviours -- Increase contrast of search, visual selections, and more - -### Features - -**extend_background_behind_borders** - -Extend float backgrounds behind borders. Results vary depending on your border characters. - -```lua -{ - extend_background_behind_borders = true -} -``` - -**styles.transparency** - -Enable a unique experience focused around transparent terminals, avoiding large backgrounds and differentiating selections with foreground colours when possible. - -```lua -{ - styles = { - transparency = true - } -} -``` - -**before_highlight** - -```lua -{ - before_highlight = function(group, highlight, palette) - -- Disable all undercurls - if highlight.undercurl then - highlight.undercurl = false - end - - -- Change palette colour - if highlight.fg == palette.pine then - highlight.fg = palette.foam - end - end, -} -``` - -### Breaking changes - -> [!WARNING] -> Removed or renamed options should continue to work via internal migrations but backwards compatibility is not tested and may break at any time. - -```diff -- dim_nc_background = true, -+ dim_inactive_windows = true, - -- disable_background = true, -- disable_float_background = true, -+ styles.transparency = true - -- disable_italics = true, -+ styles.italic = false, - -- groups = { -- background = "...", -- comment = "...", -- punctuation = "...", -- }, -+ highlight_groups = { -+ Normal = { bg = "..." }, -+ Comment = { fg = "..." }, -+ ["@punctuation"] = { fg = "..." }, -+ } -``` diff --git a/colors/rose-pine-dawn.lua b/colors/rose-pine-dawn.lua index a95b327..3ce1680 100644 --- a/colors/rose-pine-dawn.lua +++ b/colors/rose-pine-dawn.lua @@ -1,2 +1,2 @@ -package.loaded["rose-pine.palette"] = nil -require("rose-pine").colorscheme("dawn") +package.loaded['rose-pine.palette'] = nil +require('rose-pine').colorscheme('dawn') diff --git a/colors/rose-pine-main.lua b/colors/rose-pine-main.lua index 15729c9..e09c69d 100644 --- a/colors/rose-pine-main.lua +++ b/colors/rose-pine-main.lua @@ -1,2 +1,2 @@ -package.loaded["rose-pine.palette"] = nil -require("rose-pine").colorscheme("main") +package.loaded['rose-pine.palette'] = nil +require('rose-pine').colorscheme('main') diff --git a/colors/rose-pine-moon.lua b/colors/rose-pine-moon.lua index 34b58c0..7196100 100644 --- a/colors/rose-pine-moon.lua +++ b/colors/rose-pine-moon.lua @@ -1,2 +1,2 @@ -package.loaded["rose-pine.palette"] = nil -require("rose-pine").colorscheme("moon") +package.loaded['rose-pine.palette'] = nil +require('rose-pine').colorscheme('moon') diff --git a/colors/rose-pine.lua b/colors/rose-pine.lua index f705290..71f155f 100644 --- a/colors/rose-pine.lua +++ b/colors/rose-pine.lua @@ -1,2 +1,2 @@ -package.loaded["rose-pine.palette"] = nil -require("rose-pine").colorscheme() +package.loaded['rose-pine.palette'] = nil +require('rose-pine').colorscheme() diff --git a/lua/lualine/themes/rose-pine-alt.lua b/lua/lualine/themes/rose-pine-alt.lua index 287144f..1e1ee36 100644 --- a/lua/lualine/themes/rose-pine-alt.lua +++ b/lua/lualine/themes/rose-pine-alt.lua @@ -1,32 +1,26 @@ -local p = require("rose-pine.palette") -local config = require("rose-pine.config") - -local bg_base = p.base -if config.options.styles.transparency then - bg_base = "NONE" -end +local p = require('rose-pine.palette') return { normal = { - a = { bg = p.surface, fg = p.rose, gui = "bold" }, + a = { bg = p.surface, fg = p.rose, gui = 'bold' }, b = { bg = p.surface, fg = p.text }, - c = { bg = p.surface, fg = p.subtle, gui = "italic" }, + c = { bg = p.surface, fg = p.subtle, gui = 'italic' }, }, insert = { - a = { bg = p.surface, fg = p.foam, gui = "bold" }, + a = { bg = p.surface, fg = p.foam, gui = 'bold' }, }, visual = { - a = { bg = p.surface, fg = p.iris, gui = "bold" }, + a = { bg = p.surface, fg = p.iris, gui = 'bold' }, }, replace = { - a = { bg = p.surface, fg = p.pine, gui = "bold" }, + a = { bg = p.surface, fg = p.pine, gui = 'bold' }, }, command = { - a = { bg = p.surface, fg = p.love, gui = "bold" }, + a = { bg = p.surface, fg = p.love, gui = 'bold' }, }, inactive = { - a = { bg = bg_base, fg = p.subtle, gui = "bold" }, - b = { bg = bg_base, fg = p.subtle }, - c = { bg = bg_base, fg = p.subtle, gui = "italic" }, + a = { bg = p.base, fg = p.subtle, gui = 'bold' }, + b = { bg = p.base, fg = p.subtle }, + c = { bg = p.base, fg = p.subtle, gui = 'italic' }, }, } diff --git a/lua/lualine/themes/rose-pine.lua b/lua/lualine/themes/rose-pine.lua index e409130..dde3075 100644 --- a/lua/lualine/themes/rose-pine.lua +++ b/lua/lualine/themes/rose-pine.lua @@ -1,40 +1,34 @@ -local p = require("rose-pine.palette") -local config = require("rose-pine.config") - -local bg_base = p.surface -if config.options.styles.transparency then - bg_base = "NONE" -end +local p = require('rose-pine.palette') return { normal = { - a = { bg = p.rose, fg = p.base, gui = "bold" }, + a = { bg = p.rose, fg = p.base, gui = 'bold' }, b = { bg = p.overlay, fg = p.rose }, - c = { bg = bg_base, fg = p.text }, + c = { bg = p.base, fg = p.text }, }, insert = { - a = { bg = p.foam, fg = p.base, gui = "bold" }, + a = { bg = p.foam, fg = p.base, gui = 'bold' }, b = { bg = p.overlay, fg = p.foam }, - c = { bg = bg_base, fg = p.text }, + c = { bg = p.base, fg = p.text }, }, visual = { - a = { bg = p.iris, fg = p.base, gui = "bold" }, + a = { bg = p.iris, fg = p.base, gui = 'bold' }, b = { bg = p.overlay, fg = p.iris }, - c = { bg = bg_base, fg = p.text }, + c = { bg = p.base, fg = p.text }, }, replace = { - a = { bg = p.pine, fg = p.base, gui = "bold" }, + a = { bg = p.pine, fg = p.base, gui = 'bold' }, b = { bg = p.overlay, fg = p.pine }, - c = { bg = bg_base, fg = p.text }, + c = { bg = p.base, fg = p.text }, }, command = { - a = { bg = p.love, fg = p.base, gui = "bold" }, + a = { bg = p.love, fg = p.base, gui = 'bold' }, b = { bg = p.overlay, fg = p.love }, - c = { bg = bg_base, fg = p.text }, + c = { bg = p.base, fg = p.text }, }, inactive = { - a = { bg = bg_base, fg = p.muted, gui = "bold" }, - b = { bg = bg_base, fg = p.muted }, - c = { bg = bg_base, fg = p.muted }, + a = { bg = p.base, fg = p.muted, gui = 'bold' }, + b = { bg = p.base, fg = p.muted }, + c = { bg = p.base, fg = p.muted }, }, } diff --git a/lua/rose-pine.lua b/lua/rose-pine.lua index f10ffcd..b3cf3ea 100644 --- a/lua/rose-pine.lua +++ b/lua/rose-pine.lua @@ -1,1242 +1,22 @@ +local config = require('rose-pine.config') local M = {} -local config = require("rose-pine.config") -local function set_highlights() - local utilities = require("rose-pine.utilities") - local palette = require("rose-pine.palette") - local styles = config.options.styles - - local groups = {} - for group, color in pairs(config.options.groups) do - groups[group] = utilities.parse_color(color) - end - - local function make_border(fg) - fg = fg or groups.border - return { - fg = fg, - bg = (config.options.extend_background_behind_borders and not styles.transparency) and palette.surface - or "NONE", - } - end - - local highlights = {} - local legacy_highlights = { - ["@attribute.diff"] = { fg = palette.gold }, - ["@boolean"] = { link = "Boolean" }, - ["@class"] = { fg = palette.foam }, - ["@conditional"] = { link = "Conditional" }, - ["@field"] = { fg = palette.foam }, - ["@include"] = { link = "Include" }, - ["@interface"] = { fg = palette.foam }, - ["@macro"] = { link = "Macro" }, - ["@method"] = { fg = palette.rose }, - ["@namespace"] = { link = "Include" }, - ["@number"] = { link = "Number" }, - ["@parameter"] = { fg = palette.iris, italic = styles.italic }, - ["@preproc"] = { link = "PreProc" }, - ["@punctuation"] = { fg = palette.subtle }, - ["@punctuation.bracket"] = { link = "@punctuation" }, - ["@punctuation.delimiter"] = { link = "@punctuation" }, - ["@punctuation.special"] = { link = "@punctuation" }, - ["@regexp"] = { link = "String" }, - ["@repeat"] = { link = "Repeat" }, - ["@storageclass"] = { link = "StorageClass" }, - ["@symbol"] = { link = "Identifier" }, - ["@text"] = { fg = palette.text }, - ["@text.danger"] = { fg = groups.error }, - ["@text.diff.add"] = { fg = groups.git_add, bg = groups.git_add, blend = 20 }, - ["@text.diff.delete"] = { fg = groups.git_delete, bg = groups.git_delete, blend = 20 }, - ["@text.emphasis"] = { italic = styles.italic }, - ["@text.environment"] = { link = "Macro" }, - ["@text.environment.name"] = { link = "Type" }, - ["@text.math"] = { link = "Special" }, - ["@text.note"] = { link = "SpecialComment" }, - ["@text.strike"] = { strikethrough = true }, - ["@text.strong"] = { bold = styles.bold }, - ["@text.title"] = { link = "Title" }, - ["@text.title.1.markdown"] = { link = "markdownH1" }, - ["@text.title.1.marker.markdown"] = { link = "markdownH1Delimiter" }, - ["@text.title.2.markdown"] = { link = "markdownH2" }, - ["@text.title.2.marker.markdown"] = { link = "markdownH2Delimiter" }, - ["@text.title.3.markdown"] = { link = "markdownH3" }, - ["@text.title.3.marker.markdown"] = { link = "markdownH3Delimiter" }, - ["@text.title.4.markdown"] = { link = "markdownH4" }, - ["@text.title.4.marker.markdown"] = { link = "markdownH4Delimiter" }, - ["@text.title.5.markdown"] = { link = "markdownH5" }, - ["@text.title.5.marker.markdown"] = { link = "markdownH5Delimiter" }, - ["@text.title.6.markdown"] = { link = "markdownH6" }, - ["@text.title.6.marker.markdown"] = { link = "markdownH6Delimiter" }, - ["@text.underline"] = { underline = true }, - ["@text.uri"] = { fg = groups.link }, - ["@text.warning"] = { fg = groups.warn }, - ["@todo"] = { link = "Todo" }, - - -- lukas-reineke/indent-blankline.nvim - IndentBlanklineChar = { fg = palette.muted, nocombine = true }, - IndentBlanklineSpaceChar = { fg = palette.muted, nocombine = true }, - IndentBlanklineSpaceCharBlankline = { fg = palette.muted, nocombine = true }, - } - local default_highlights = { - ColorColumn = { bg = palette.surface }, - Conceal = { bg = "NONE" }, - CurSearch = { fg = palette.base, bg = palette.gold }, - Cursor = { fg = palette.text, bg = palette.highlight_high }, - CursorColumn = { bg = palette.overlay }, - -- CursorIM = {}, - CursorLine = { bg = palette.overlay }, - CursorLineNr = { fg = palette.text, bold = styles.bold }, - -- DarkenedPanel = { }, - -- DarkenedStatusline = {}, - DiffAdd = { bg = groups.git_add, blend = 20 }, - DiffChange = { bg = groups.git_change, blend = 20 }, - DiffDelete = { bg = groups.git_delete, blend = 20 }, - DiffText = { bg = groups.git_text, blend = 40 }, - diffAdded = { link = "DiffAdd" }, - diffChanged = { link = "DiffChange" }, - diffRemoved = { link = "DiffDelete" }, - Directory = { fg = palette.foam, bold = styles.bold }, - -- EndOfBuffer = {}, - ErrorMsg = { fg = groups.error, bold = styles.bold }, - FloatBorder = make_border(), - FloatTitle = { fg = palette.foam, bg = groups.panel, bold = styles.bold }, - FoldColumn = { fg = palette.muted }, - Folded = { fg = palette.text, bg = groups.panel }, - IncSearch = { link = "CurSearch" }, - LineNr = { fg = palette.muted }, - MatchParen = { fg = palette.pine, bg = palette.pine, blend = 25 }, - ModeMsg = { fg = palette.subtle }, - MoreMsg = { fg = palette.iris }, - NonText = { fg = palette.muted }, - Normal = { fg = palette.text, bg = palette.base }, - NormalFloat = { bg = groups.panel }, - NormalNC = { fg = palette.text, bg = config.options.dim_inactive_windows and palette._nc or palette.base }, - NvimInternalError = { link = "ErrorMsg" }, - Pmenu = { fg = palette.subtle, bg = groups.panel }, - PmenuExtra = { fg = palette.muted, bg = groups.panel }, - PmenuExtraSel = { fg = palette.subtle, bg = palette.overlay }, - PmenuKind = { fg = palette.foam, bg = groups.panel }, - PmenuKindSel = { fg = palette.subtle, bg = palette.overlay }, - PmenuSbar = { bg = groups.panel }, - PmenuSel = { fg = palette.text, bg = palette.overlay }, - PmenuThumb = { bg = palette.muted }, - Question = { fg = palette.gold }, - QuickFixLine = { fg = palette.foam }, - -- RedrawDebugNormal = {}, - RedrawDebugClear = { fg = palette.base, bg = palette.gold }, - RedrawDebugComposed = { fg = palette.base, bg = palette.pine }, - RedrawDebugRecompose = { fg = palette.base, bg = palette.love }, - Search = { fg = palette.text, bg = palette.gold, blend = 20 }, - SignColumn = { fg = palette.text, bg = "NONE" }, - SpecialKey = { fg = palette.foam }, - SpellBad = { sp = palette.subtle, undercurl = true }, - SpellCap = { sp = palette.subtle, undercurl = true }, - SpellLocal = { sp = palette.subtle, undercurl = true }, - SpellRare = { sp = palette.subtle, undercurl = true }, - StatusLine = { fg = palette.subtle, bg = groups.panel }, - StatusLineNC = { fg = palette.muted, bg = groups.panel, blend = 60 }, - StatusLineTerm = { fg = palette.base, bg = palette.pine }, - StatusLineTermNC = { fg = palette.base, bg = palette.pine, blend = 60 }, - Substitute = { link = "IncSearch" }, - TabLine = { fg = palette.subtle, bg = groups.panel }, - TabLineFill = { bg = groups.panel }, - TabLineSel = { fg = palette.text, bg = palette.overlay, bold = styles.bold }, - Title = { fg = palette.foam, bold = styles.bold }, - VertSplit = { fg = groups.border }, - Visual = { bg = palette.iris, blend = 15 }, - -- VisualNOS = {}, - WarningMsg = { fg = groups.warn, bold = styles.bold }, - -- Whitespace = {}, - WildMenu = { link = "IncSearch" }, - WinBar = { fg = palette.subtle, bg = groups.panel }, - WinBarNC = { fg = palette.muted, bg = groups.panel, blend = 60 }, - WinSeparator = { fg = groups.border }, - - DiagnosticError = { fg = groups.error }, - DiagnosticHint = { fg = groups.hint }, - DiagnosticInfo = { fg = groups.info }, - DiagnosticOk = { fg = groups.ok }, - DiagnosticWarn = { fg = groups.warn }, - DiagnosticDefaultError = { link = "DiagnosticError" }, - DiagnosticDefaultHint = { link = "DiagnosticHint" }, - DiagnosticDefaultInfo = { link = "DiagnosticInfo" }, - DiagnosticDefaultOk = { link = "DiagnosticOk" }, - DiagnosticDefaultWarn = { link = "DiagnosticWarn" }, - DiagnosticFloatingError = { link = "DiagnosticError" }, - DiagnosticFloatingHint = { link = "DiagnosticHint" }, - DiagnosticFloatingInfo = { link = "DiagnosticInfo" }, - DiagnosticFloatingOk = { link = "DiagnosticOk" }, - DiagnosticFloatingWarn = { link = "DiagnosticWarn" }, - DiagnosticSignError = { link = "DiagnosticError" }, - DiagnosticSignHint = { link = "DiagnosticHint" }, - DiagnosticSignInfo = { link = "DiagnosticInfo" }, - DiagnosticSignOk = { link = "DiagnosticOk" }, - DiagnosticSignWarn = { link = "DiagnosticWarn" }, - DiagnosticUnderlineError = { sp = groups.error, undercurl = true }, - DiagnosticUnderlineHint = { sp = groups.hint, undercurl = true }, - DiagnosticUnderlineInfo = { sp = groups.info, undercurl = true }, - DiagnosticUnderlineOk = { sp = groups.ok, undercurl = true }, - DiagnosticUnderlineWarn = { sp = groups.warn, undercurl = true }, - DiagnosticVirtualTextError = { fg = groups.error, bg = groups.error, blend = 10 }, - DiagnosticVirtualTextHint = { fg = groups.hint, bg = groups.hint, blend = 10 }, - DiagnosticVirtualTextInfo = { fg = groups.info, bg = groups.info, blend = 10 }, - DiagnosticVirtualTextOk = { fg = groups.ok, bg = groups.ok, blend = 10 }, - DiagnosticVirtualTextWarn = { fg = groups.warn, bg = groups.warn, blend = 10 }, - - Boolean = { fg = palette.rose }, - Character = { fg = palette.gold }, - Comment = { fg = palette.subtle, italic = styles.italic }, - Conditional = { fg = palette.pine }, - Constant = { fg = palette.gold }, - Debug = { fg = palette.rose }, - Define = { fg = palette.iris }, - Delimiter = { fg = palette.subtle }, - Error = { fg = palette.love }, - Exception = { fg = palette.pine }, - Float = { fg = palette.gold }, - Function = { fg = palette.rose }, - Identifier = { fg = palette.text }, - Include = { fg = palette.pine }, - Keyword = { fg = palette.pine }, - Label = { fg = palette.foam }, - LspCodeLens = { fg = palette.subtle }, - LspCodeLensSeparator = { fg = palette.muted }, - LspInlayHint = { fg = palette.muted, bg = palette.muted, blend = 10 }, - LspReferenceRead = { bg = palette.highlight_med }, - LspReferenceText = { bg = palette.highlight_med }, - LspReferenceWrite = { bg = palette.highlight_med }, - Macro = { fg = palette.iris }, - Number = { fg = palette.gold }, - Operator = { fg = palette.subtle }, - PreCondit = { fg = palette.iris }, - PreProc = { link = "PreCondit" }, - Repeat = { fg = palette.pine }, - Special = { fg = palette.foam }, - SpecialChar = { link = "Special" }, - SpecialComment = { fg = palette.iris }, - Statement = { fg = palette.pine, bold = styles.bold }, - StorageClass = { fg = palette.foam }, - String = { fg = palette.gold }, - Structure = { fg = palette.foam }, - Tag = { fg = palette.foam }, - Todo = { fg = palette.rose, bg = palette.rose, blend = 20 }, - Type = { fg = palette.foam }, - TypeDef = { link = "Type" }, - Underlined = { fg = palette.iris, underline = true }, - - healthError = { fg = groups.error }, - healthSuccess = { fg = groups.info }, - healthWarning = { fg = groups.warn }, - - htmlArg = { fg = palette.iris }, - htmlBold = { bold = styles.bold }, - htmlEndTag = { fg = palette.subtle }, - htmlH1 = { link = "markdownH1" }, - htmlH2 = { link = "markdownH2" }, - htmlH3 = { link = "markdownH3" }, - htmlH4 = { link = "markdownH4" }, - htmlH5 = { link = "markdownH5" }, - htmlItalic = { italic = styles.italic }, - htmlLink = { link = "markdownUrl" }, - htmlTag = { fg = palette.subtle }, - htmlTagN = { fg = palette.text }, - htmlTagName = { fg = palette.foam }, - - markdownDelimiter = { fg = palette.subtle }, - markdownH1 = { fg = groups.h1, bold = styles.bold }, - markdownH1Delimiter = { link = "markdownH1" }, - markdownH2 = { fg = groups.h2, bold = styles.bold }, - markdownH2Delimiter = { link = "markdownH2" }, - markdownH3 = { fg = groups.h3, bold = styles.bold }, - markdownH3Delimiter = { link = "markdownH3" }, - markdownH4 = { fg = groups.h4, bold = styles.bold }, - markdownH4Delimiter = { link = "markdownH4" }, - markdownH5 = { fg = groups.h5, bold = styles.bold }, - markdownH5Delimiter = { link = "markdownH5" }, - markdownH6 = { fg = groups.h6, bold = styles.bold }, - markdownH6Delimiter = { link = "markdownH6" }, - markdownLinkText = { link = "markdownUrl" }, - markdownUrl = { fg = groups.link, sp = groups.link, underline = true }, - - mkdCode = { fg = palette.foam, italic = styles.italic }, - mkdCodeDelimiter = { fg = palette.rose }, - mkdCodeEnd = { fg = palette.foam }, - mkdCodeStart = { fg = palette.foam }, - mkdFootnotes = { fg = palette.foam }, - mkdID = { fg = palette.foam, underline = true }, - mkdInlineURL = { link = "markdownUrl" }, - mkdLink = { link = "markdownUrl" }, - mkdLinkDef = { link = "markdownUrl" }, - mkdListItemLine = { fg = palette.text }, - mkdRule = { fg = palette.subtle }, - mkdURL = { link = "markdownUrl" }, - - --- Treesitter - --- |:help treesitter-highlight-groups| - ["@variable"] = { fg = palette.text, italic = styles.italic }, - ["@variable.builtin"] = { fg = palette.love, italic = styles.italic, bold = styles.bold }, - ["@variable.parameter"] = { fg = palette.iris, italic = styles.italic }, - ["@variable.parameter.builtin"] = { fg = palette.iris, italic = styles.italic, bold = styles.bold }, - ["@variable.member"] = { fg = palette.foam }, - - ["@constant"] = { fg = palette.gold }, - ["@constant.builtin"] = { fg = palette.gold, bold = styles.bold }, - ["@constant.macro"] = { fg = palette.gold }, - - ["@module"] = { fg = palette.text }, - ["@module.builtin"] = { fg = palette.text, bold = styles.bold }, - ["@label"] = { link = "Label" }, - - ["@string"] = { link = "String" }, - -- ["@string.documentation"] = {}, - ["@string.regexp"] = { fg = palette.iris }, - ["@string.escape"] = { fg = palette.pine }, - ["@string.special"] = { link = "String" }, - ["@string.special.symbol"] = { link = "Identifier" }, - ["@string.special.url"] = { fg = groups.link }, - -- ["@string.special.path"] = {}, - - ["@character"] = { link = "Character" }, - ["@character.special"] = { link = "Character" }, - - ["@boolean"] = { link = "Boolean" }, - ["@number"] = { link = "Number" }, - ["@number.float"] = { link = "Number" }, - ["@float"] = { link = "Number" }, - - ["@type"] = { fg = palette.foam }, - ["@type.builtin"] = { fg = palette.foam, bold = styles.bold }, - -- ["@type.definition"] = {}, - - ["@attribute"] = { fg = palette.iris }, - ["@attribute.builtin"] = { fg = palette.iris, bold = styles.bold }, - ["@property"] = { fg = palette.foam, italic = styles.italic }, - - ["@function"] = { fg = palette.rose }, - ["@function.builtin"] = { fg = palette.rose, bold = styles.bold }, - -- ["@function.call"] = {}, - ["@function.macro"] = { link = "Function" }, - - ["@function.method"] = { fg = palette.rose }, - ["@function.method.call"] = { fg = palette.iris }, - - ["@constructor"] = { fg = palette.foam }, - ["@operator"] = { link = "Operator" }, - - ["@keyword"] = { link = "Keyword" }, - -- ["@keyword.coroutine"] = {}, - -- ["@keyword.function"] = {}, - ["@keyword.operator"] = { fg = palette.subtle }, - ["@keyword.import"] = { fg = palette.pine }, - ["@keyword.storage"] = { fg = palette.foam }, - ["@keyword.repeat"] = { fg = palette.pine }, - ["@keyword.return"] = { fg = palette.pine }, - ["@keyword.debug"] = { fg = palette.rose }, - ["@keyword.exception"] = { fg = palette.pine }, - - ["@keyword.conditional"] = { fg = palette.pine }, - ["@keyword.conditional.ternary"] = { fg = palette.pine }, - - ["@keyword.directive"] = { fg = palette.iris }, - ["@keyword.directive.define"] = { fg = palette.iris }, - - --- Punctuation - ["@punctuation.delimiter"] = { fg = palette.subtle }, - ["@punctuation.bracket"] = { fg = palette.subtle }, - ["@punctuation.special"] = { fg = palette.subtle }, - - --- Comments - ["@comment"] = { link = "Comment" }, - -- ["@comment.documentation"] = {}, - - ["@comment.error"] = { fg = groups.error }, - ["@comment.warning"] = { fg = groups.warn }, - ["@comment.todo"] = { fg = groups.todo, bg = groups.todo, blend = 15 }, - ["@comment.hint"] = { fg = groups.hint, bg = groups.hint, blend = 15 }, - ["@comment.info"] = { fg = groups.info, bg = groups.info, blend = 15 }, - ["@comment.note"] = { fg = groups.note, bg = groups.note, blend = 15 }, - - --- Markup - ["@markup.strong"] = { bold = styles.bold }, - ["@markup.italic"] = { italic = styles.italic }, - ["@markup.strikethrough"] = { strikethrough = true }, - ["@markup.underline"] = { underline = true }, - - ["@markup.heading"] = { fg = palette.foam, bold = styles.bold }, - - ["@markup.quote"] = { fg = palette.text }, - ["@markup.math"] = { link = "Special" }, - ["@markup.environment"] = { link = "Macro" }, - ["@markup.environment.name"] = { link = "@type" }, - - -- ["@markup.link"] = {}, - ["@markup.link.markdown_inline"] = { fg = palette.subtle }, - ["@markup.link.label.markdown_inline"] = { fg = palette.foam }, - ["@markup.link.url"] = { fg = groups.link }, - - -- ["@markup.raw"] = { bg = palette.surface }, - -- ["@markup.raw.block"] = { bg = palette.surface }, - ["@markup.raw.delimiter.markdown"] = { fg = palette.subtle }, - - ["@markup.list"] = { fg = palette.pine }, - ["@markup.list.checked"] = { fg = palette.foam, bg = palette.foam, blend = 10 }, - ["@markup.list.unchecked"] = { fg = palette.text }, - - -- Markdown headings - ["@markup.heading.1.markdown"] = { link = "markdownH1" }, - ["@markup.heading.2.markdown"] = { link = "markdownH2" }, - ["@markup.heading.3.markdown"] = { link = "markdownH3" }, - ["@markup.heading.4.markdown"] = { link = "markdownH4" }, - ["@markup.heading.5.markdown"] = { link = "markdownH5" }, - ["@markup.heading.6.markdown"] = { link = "markdownH6" }, - ["@markup.heading.1.marker.markdown"] = { link = "markdownH1Delimiter" }, - ["@markup.heading.2.marker.markdown"] = { link = "markdownH2Delimiter" }, - ["@markup.heading.3.marker.markdown"] = { link = "markdownH3Delimiter" }, - ["@markup.heading.4.marker.markdown"] = { link = "markdownH4Delimiter" }, - ["@markup.heading.5.marker.markdown"] = { link = "markdownH5Delimiter" }, - ["@markup.heading.6.marker.markdown"] = { link = "markdownH6Delimiter" }, - - ["@diff.plus"] = { fg = groups.git_add, bg = groups.git_add, blend = 20 }, - ["@diff.minus"] = { fg = groups.git_delete, bg = groups.git_delete, blend = 20 }, - ["@diff.delta"] = { bg = groups.git_change, blend = 20 }, - - ["@tag"] = { link = "Tag" }, - ["@tag.attribute"] = { fg = palette.iris }, - ["@tag.delimiter"] = { fg = palette.subtle }, - - --- Non-highlighting captures - -- ["@none"] = {}, - ["@conceal"] = { link = "Conceal" }, - ["@conceal.markdown"] = { fg = palette.subtle }, - - -- ["@spell"] = {}, - -- ["@nospell"] = {}, - - --- Semantic - ["@lsp.type.comment"] = {}, - ["@lsp.type.comment.c"] = { link = "@comment" }, - ["@lsp.type.comment.cpp"] = { link = "@comment" }, - ["@lsp.type.enum"] = { link = "@type" }, - ["@lsp.type.interface"] = { link = "@interface" }, - ["@lsp.type.keyword"] = { link = "@keyword" }, - ["@lsp.type.namespace"] = { link = "@namespace" }, - ["@lsp.type.namespace.python"] = { link = "@variable" }, - ["@lsp.type.parameter"] = { link = "@parameter" }, - ["@lsp.type.property"] = { link = "@property" }, - ["@lsp.type.variable"] = {}, -- defer to treesitter for regular variables - ["@lsp.type.variable.svelte"] = { link = "@variable" }, - ["@lsp.typemod.function.defaultLibrary"] = { link = "@function.builtin" }, - ["@lsp.typemod.operator.injected"] = { link = "@operator" }, - ["@lsp.typemod.string.injected"] = { link = "@string" }, - ["@lsp.typemod.variable.constant"] = { link = "@constant" }, - ["@lsp.typemod.variable.defaultLibrary"] = { link = "@variable.builtin" }, - ["@lsp.typemod.variable.injected"] = { link = "@variable" }, - - --- Plugins - -- romgrk/barbar.nvim - BufferCurrent = { fg = palette.text, bg = palette.overlay }, - BufferCurrentIndex = { fg = palette.text, bg = palette.overlay }, - BufferCurrentMod = { fg = palette.foam, bg = palette.overlay }, - BufferCurrentSign = { fg = palette.subtle, bg = palette.overlay }, - BufferCurrentTarget = { fg = palette.gold, bg = palette.overlay }, - BufferInactive = { fg = palette.subtle }, - BufferInactiveIndex = { fg = palette.subtle }, - BufferInactiveMod = { fg = palette.foam }, - BufferInactiveSign = { fg = palette.muted }, - BufferInactiveTarget = { fg = palette.gold }, - BufferTabpageFill = { fg = "NONE", bg = "NONE" }, - BufferVisible = { fg = palette.subtle }, - BufferVisibleIndex = { fg = palette.subtle }, - BufferVisibleMod = { fg = palette.foam }, - BufferVisibleSign = { fg = palette.muted }, - BufferVisibleTarget = { fg = palette.gold }, - - -- lewis6991/gitsigns.nvim - GitSignsAdd = { fg = groups.git_add, bg = "NONE" }, - GitSignsChange = { fg = groups.git_change, bg = "NONE" }, - GitSignsDelete = { fg = groups.git_delete, bg = "NONE" }, - SignAdd = { fg = groups.git_add, bg = "NONE" }, - SignChange = { fg = groups.git_change, bg = "NONE" }, - SignDelete = { fg = groups.git_delete, bg = "NONE" }, - - -- mvllow/modes.nvim - ModesCopy = { bg = palette.gold }, - ModesDelete = { bg = palette.love }, - ModesFormat = { bg = palette.rose }, - ModesInsert = { bg = palette.foam }, - ModesReplace = { bg = palette.pine }, - ModesVisual = { bg = palette.iris }, - - -- kyazdani42/nvim-tree.lua - NvimTreeEmptyFolderName = { fg = palette.muted }, - NvimTreeFileDeleted = { fg = groups.git_delete }, - NvimTreeFileDirty = { fg = groups.git_dirty }, - NvimTreeFileMerge = { fg = groups.git_merge }, - NvimTreeFileNew = { fg = palette.foam }, - NvimTreeFileRenamed = { fg = groups.git_rename }, - NvimTreeFileStaged = { fg = groups.git_stage }, - NvimTreeFolderIcon = { fg = palette.subtle }, - NvimTreeFolderName = { fg = palette.foam }, - NvimTreeGitDeleted = { fg = groups.git_delete }, - NvimTreeGitDirty = { fg = groups.git_dirty }, - NvimTreeGitIgnored = { fg = groups.git_ignore }, - NvimTreeGitMerge = { fg = groups.git_merge }, - NvimTreeGitNew = { fg = groups.git_add }, - NvimTreeGitRenamed = { fg = groups.git_rename }, - NvimTreeGitStaged = { fg = groups.git_stage }, - NvimTreeImageFile = { fg = palette.text }, - NvimTreeNormal = { link = "Normal" }, - NvimTreeOpenedFile = { fg = palette.text, bg = palette.overlay }, - NvimTreeOpenedFolderName = { link = "NvimTreeFolderName" }, - NvimTreeRootFolder = { fg = palette.foam, bold = styles.bold }, - NvimTreeSpecialFile = { link = "NvimTreeNormal" }, - NvimTreeWindowPicker = { link = "StatusLineTerm" }, - - -- nvim-neotest/neotest - NeotestAdapterName = { fg = palette.iris }, - NeotestBorder = { fg = palette.highlight_med }, - NeotestDir = { fg = palette.foam }, - NeotestExpandMarker = { fg = palette.highlight_med }, - NeotestFailed = { fg = palette.love }, - NeotestFile = { fg = palette.text }, - NeotestFocused = { fg = palette.gold, bg = palette.highlight_med }, - NeotestIndent = { fg = palette.highlight_med }, - NeotestMarked = { fg = palette.rose, bold = styles.bold }, - NeotestNamespace = { fg = palette.gold }, - NeotestPassed = { fg = palette.pine }, - NeotestRunning = { fg = palette.gold }, - NeotestWinSelect = { fg = palette.muted }, - NeotestSkipped = { fg = palette.subtle }, - NeotestTarget = { fg = palette.love }, - NeotestTest = { fg = palette.gold }, - NeotestUnknown = { fg = palette.subtle }, - NeotestWatching = { fg = palette.iris }, - - -- nvim-neo-tree/neo-tree.nvim - NeoTreeGitAdded = { fg = groups.git_add }, - NeoTreeGitConflict = { fg = groups.git_merge }, - NeoTreeGitDeleted = { fg = groups.git_delete }, - NeoTreeGitIgnored = { fg = groups.git_ignore }, - NeoTreeGitModified = { fg = groups.git_dirty }, - NeoTreeGitRenamed = { fg = groups.git_rename }, - NeoTreeGitUntracked = { fg = groups.git_untracked }, - NeoTreeTabActive = { fg = palette.text, bg = palette.overlay }, - NeoTreeTabInactive = { fg = palette.subtle }, - NeoTreeTabSeparatorActive = { link = "WinSeparator" }, - NeoTreeTabSeparatorInactive = { link = "WinSeparator" }, - NeoTreeTitleBar = { link = "StatusLineTerm" }, - - -- folke/flash.nvim - FlashLabel = { fg = palette.base, bg = palette.love }, - - -- folke/which-key.nvim - WhichKey = { fg = palette.iris }, - WhichKeyBorder = make_border(), - WhichKeyDesc = { fg = palette.gold }, - WhichKeyFloat = { bg = groups.panel }, - WhichKeyGroup = { fg = palette.foam }, - WhichKeyIcon = { fg = palette.pine }, - WhichKeyIconAzure = { fg = palette.pine }, - WhichKeyIconBlue = { fg = palette.pine }, - WhichKeyIconCyan = { fg = palette.foam }, - WhichKeyIconGreen = { fg = palette.leaf }, - WhichKeyIconGrey = { fg = palette.subtle }, - WhichKeyIconOrange = { fg = palette.rose }, - WhichKeyIconPurple = { fg = palette.iris }, - WhichKeyIconRed = { fg = palette.love }, - WhichKeyIconYellow = { fg = palette.gold }, - WhichKeyNormal = { link = "NormalFloat" }, - WhichKeySeparator = { fg = palette.subtle }, - WhichKeyTitle = { link = "FloatTitle" }, - WhichKeyValue = { fg = palette.rose }, - - -- lukas-reineke/indent-blankline.nvim - IblIndent = { fg = palette.overlay }, - IblScope = { fg = palette.foam }, - IblWhitespace = { fg = palette.overlay }, - - -- hrsh7th/nvim-cmp - CmpItemAbbr = { fg = palette.subtle }, - CmpItemAbbrDeprecated = { fg = palette.subtle, strikethrough = true }, - CmpItemAbbrMatch = { fg = palette.text, bold = styles.bold }, - CmpItemAbbrMatchFuzzy = { fg = palette.text, bold = styles.bold }, - CmpItemKind = { fg = palette.subtle }, - CmpItemKindClass = { link = "StorageClass" }, - CmpItemKindFunction = { link = "Function" }, - CmpItemKindInterface = { link = "Type" }, - CmpItemKindMethod = { link = "PreProc" }, - CmpItemKindSnippet = { link = "String" }, - CmpItemKindVariable = { link = "Identifier" }, - - -- NeogitOrg/neogit - -- https://github.com/NeogitOrg/neogit/blob/master/lua/neogit/lib/hl.lua#L109-L198 - NeogitChangeAdded = { fg = groups.git_add, bold = styles.bold, italic = styles.italic }, - NeogitChangeBothModified = { fg = groups.git_change, bold = styles.bold, italic = styles.italic }, - NeogitChangeCopied = { fg = groups.git_untracked, bold = styles.bold, italic = styles.italic }, - NeogitChangeDeleted = { fg = groups.git_delete, bold = styles.bold, italic = styles.italic }, - NeogitChangeModified = { fg = groups.git_change, bold = styles.bold, italic = styles.italic }, - NeogitChangeNewFile = { fg = groups.git_stage, bold = styles.bold, italic = styles.italic }, - NeogitChangeRenamed = { fg = groups.git_rename, bold = styles.bold, italic = styles.italic }, - NeogitChangeUpdated = { fg = groups.git_change, bold = styles.bold, italic = styles.italic }, - NeogitDiffAddHighlight = { link = "DiffAdd" }, - NeogitDiffContextHighlight = { bg = palette.surface }, - NeogitDiffDeleteHighlight = { link = "DiffDelete" }, - NeogitFilePath = { fg = palette.foam, italic = styles.italic }, - NeogitHunkHeader = { bg = groups.panel }, - NeogitHunkHeaderHighlight = { bg = groups.panel }, - - -- vimwiki/vimwiki - VimwikiHR = { fg = palette.subtle }, - VimwikiHeader1 = { link = "markdownH1" }, - VimwikiHeader2 = { link = "markdownH2" }, - VimwikiHeader3 = { link = "markdownH3" }, - VimwikiHeader4 = { link = "markdownH4" }, - VimwikiHeader5 = { link = "markdownH5" }, - VimwikiHeader6 = { link = "markdownH6" }, - VimwikiHeaderChar = { fg = palette.subtle }, - VimwikiLink = { link = "markdownUrl" }, - VimwikiList = { fg = palette.iris }, - VimwikiNoExistsLink = { fg = palette.love }, - - -- nvim-neorg/neorg - NeorgHeading1Prefix = { link = "markdownH1Delimiter" }, - NeorgHeading1Title = { link = "markdownH1" }, - NeorgHeading2Prefix = { link = "markdownH2Delimiter" }, - NeorgHeading2Title = { link = "markdownH2" }, - NeorgHeading3Prefix = { link = "markdownH3Delimiter" }, - NeorgHeading3Title = { link = "markdownH3" }, - NeorgHeading4Prefix = { link = "markdownH4Delimiter" }, - NeorgHeading4Title = { link = "markdownH4" }, - NeorgHeading5Prefix = { link = "markdownH5Delimiter" }, - NeorgHeading5Title = { link = "markdownH5" }, - NeorgHeading6Prefix = { link = "markdownH6Delimiter" }, - NeorgHeading6Title = { link = "markdownH6" }, - NeorgMarkerTitle = { fg = palette.foam, bold = styles.bold }, - - -- tami5/lspsaga.nvim (fork of glepnir/lspsaga.nvim) - DefinitionCount = { fg = palette.rose }, - DefinitionIcon = { fg = palette.rose }, - DefinitionPreviewTitle = { fg = palette.rose, bold = styles.bold }, - LspFloatWinBorder = make_border(), - LspFloatWinNormal = { bg = groups.panel }, - LspSagaAutoPreview = { fg = palette.subtle }, - LspSagaCodeActionBorder = make_border(palette.rose), - LspSagaCodeActionContent = { fg = palette.foam }, - LspSagaCodeActionTitle = { fg = palette.gold, bold = styles.bold }, - LspSagaCodeActionTruncateLine = { link = "LspSagaCodeActionBorder" }, - LspSagaDefPreviewBorder = make_border(), - LspSagaDiagnosticBorder = make_border(palette.gold), - LspSagaDiagnosticHeader = { fg = palette.foam, bold = styles.bold }, - LspSagaDiagnosticTruncateLine = { link = "LspSagaDiagnosticBorder" }, - LspSagaDocTruncateLine = { link = "LspSagaHoverBorder" }, - LspSagaFinderSelection = { fg = palette.gold }, - LspSagaHoverBorder = { link = "LspFloatWinBorder" }, - LspSagaLspFinderBorder = { link = "LspFloatWinBorder" }, - LspSagaRenameBorder = make_border(palette.pine), - LspSagaRenamePromptPrefix = { fg = palette.love }, - LspSagaShTruncateLine = { link = "LspSagaSignatureHelpBorder" }, - LspSagaSignatureHelpBorder = make_border(palette.foam), - ReferencesCount = { fg = palette.rose }, - ReferencesIcon = { fg = palette.rose }, - SagaShadow = { bg = palette.overlay }, - TargetWord = { fg = palette.iris }, - - -- ray-x/lsp_signature.nvim - LspSignatureActiveParameter = { bg = palette.overlay }, - - -- rlane/pounce.nvim - PounceAccept = { fg = palette.love, bg = palette.love, blend = 20 }, - PounceAcceptBest = { fg = palette.gold, bg = palette.gold, blend = 20 }, - PounceGap = { link = "Search" }, - PounceMatch = { link = "Search" }, - - -- ggandor/leap.nvim - LeapLabelPrimary = { link = "IncSearch" }, - LeapLabelSecondary = { link = "StatusLineTerm" }, - LeapMatch = { link = "MatchParen" }, - - -- phaazon/hop.nvim - -- smoka7/hop.nvim - HopNextKey = { fg = palette.love, bg = palette.love, blend = 20 }, - HopNextKey1 = { fg = palette.foam, bg = palette.foam, blend = 20 }, - HopNextKey2 = { fg = palette.pine, bg = palette.pine, blend = 20 }, - HopUnmatched = { fg = palette.muted }, - - -- nvim-telescope/telescope.nvim - TelescopeBorder = make_border(), - TelescopeMatching = { fg = palette.rose }, - TelescopeNormal = { link = "NormalFloat" }, - TelescopePromptNormal = { link = "TelescopeNormal" }, - TelescopePromptPrefix = { fg = palette.subtle }, - TelescopeSelection = { fg = palette.text, bg = palette.overlay }, - TelescopeSelectionCaret = { fg = palette.rose, bg = palette.overlay }, - TelescopeTitle = { fg = palette.foam, bold = styles.bold }, - - -- ibhagwan/fzf-lua - FzfLuaBorder = make_border(), - FzfLuaBufFlagAlt = { fg = palette.subtle }, - FzfLuaBufFlagCur = { fg = palette.subtle }, - FzfLuaCursorLine = { fg = palette.text, bg = palette.overlay }, - FzfLuaFilePart = { fg = palette.text }, - FzfLuaHeaderBind = { fg = palette.rose }, - FzfLuaHeaderText = { fg = palette.love }, - FzfLuaNormal = { link = "NormalFloat" }, - FzfLuaTitle = { link = "FloatTitle" }, - - -- rcarriga/nvim-notify - NotifyBackground = { link = "NormalFloat" }, - NotifyDEBUGBody = { link = "NormalFloat" }, - NotifyDEBUGBorder = make_border(), - NotifyDEBUGIcon = { link = "NotifyDEBUGTitle" }, - NotifyDEBUGTitle = { fg = palette.muted }, - NotifyERRORBody = { link = "NormalFloat" }, - NotifyERRORBorder = make_border(groups.error), - NotifyERRORIcon = { link = "NotifyERRORTitle" }, - NotifyERRORTitle = { fg = groups.error }, - NotifyINFOBody = { link = "NormalFloat" }, - NotifyINFOBorder = make_border(groups.info), - NotifyINFOIcon = { link = "NotifyINFOTitle" }, - NotifyINFOTitle = { fg = groups.info }, - NotifyTRACEBody = { link = "NormalFloat" }, - NotifyTRACEBorder = make_border(palette.iris), - NotifyTRACEIcon = { link = "NotifyTRACETitle" }, - NotifyTRACETitle = { fg = palette.iris }, - NotifyWARNBody = { link = "NormalFloat" }, - NotifyWARNBorder = make_border(groups.warn), - NotifyWARNIcon = { link = "NotifyWARNTitle" }, - NotifyWARNTitle = { fg = groups.warn }, - - -- rcarriga/nvim-dap-ui - DapUIBreakpointsCurrentLine = { fg = palette.gold, bold = styles.bold }, - DapUIBreakpointsDisabledLine = { fg = palette.muted }, - DapUIBreakpointsInfo = { link = "DapUIThread" }, - DapUIBreakpointsLine = { link = "DapUIBreakpointsPath" }, - DapUIBreakpointsPath = { fg = palette.foam }, - DapUIDecoration = { link = "DapUIBreakpointsPath" }, - DapUIFloatBorder = make_border(), - DapUIFrameName = { fg = palette.text }, - DapUILineNumber = { link = "DapUIBreakpointsPath" }, - DapUIModifiedValue = { fg = palette.foam, bold = styles.bold }, - DapUIScope = { link = "DapUIBreakpointsPath" }, - DapUISource = { fg = palette.iris }, - DapUIStoppedThread = { link = "DapUIBreakpointsPath" }, - DapUIThread = { fg = palette.gold }, - DapUIValue = { fg = palette.text }, - DapUIVariable = { fg = palette.text }, - DapUIType = { fg = palette.iris }, - DapUIWatchesEmpty = { fg = palette.love }, - DapUIWatchesError = { link = "DapUIWatchesEmpty" }, - DapUIWatchesValue = { link = "DapUIThread" }, - - -- glepnir/dashboard-nvim - DashboardCenter = { fg = palette.gold }, - DashboardFooter = { fg = palette.iris }, - DashboardHeader = { fg = palette.pine }, - DashboardShortcut = { fg = palette.love }, - - -- SmiteshP/nvim-navic - NavicIconsArray = { fg = palette.gold }, - NavicIconsBoolean = { fg = palette.rose }, - NavicIconsClass = { fg = palette.foam }, - NavicIconsConstant = { fg = palette.gold }, - NavicIconsConstructor = { fg = palette.gold }, - NavicIconsEnum = { fg = palette.gold }, - NavicIconsEnumMember = { fg = palette.foam }, - NavicIconsEvent = { fg = palette.gold }, - NavicIconsField = { fg = palette.foam }, - NavicIconsFile = { fg = palette.muted }, - NavicIconsFunction = { fg = palette.pine }, - NavicIconsInterface = { fg = palette.foam }, - NavicIconsKey = { fg = palette.iris }, - NavicIconsKeyword = { fg = palette.pine }, - NavicIconsMethod = { fg = palette.iris }, - NavicIconsModule = { fg = palette.rose }, - NavicIconsNamespace = { fg = palette.muted }, - NavicIconsNull = { fg = palette.love }, - NavicIconsNumber = { fg = palette.gold }, - NavicIconsObject = { fg = palette.gold }, - NavicIconsOperator = { fg = palette.subtle }, - NavicIconsPackage = { fg = palette.muted }, - NavicIconsProperty = { fg = palette.foam }, - NavicIconsString = { fg = palette.gold }, - NavicIconsStruct = { fg = palette.foam }, - NavicIconsTypeParameter = { fg = palette.foam }, - NavicIconsVariable = { fg = palette.text }, - NavicSeparator = { fg = palette.subtle }, - NavicText = { fg = palette.subtle }, - - -- folke/noice.nvim - NoiceCursor = { fg = palette.highlight_high, bg = palette.text }, - - -- folke/trouble.nvim - TroubleText = { fg = palette.subtle }, - TroubleCount = { fg = palette.iris, bg = palette.surface }, - TroubleNormal = { fg = palette.text, bg = groups.panel }, - - -- echasnovski/mini.nvim - MiniAnimateCursor = { reverse = true, nocombine = true }, - MiniAnimateNormalFloat = { link = "NormalFloat" }, - - MiniClueBorder = { link = "FloatBorder" }, - MiniClueDescGroup = { link = "DiagnosticFloatingWarn" }, - MiniClueDescSingle = { link = "NormalFloat" }, - MiniClueNextKey = { link = "DiagnosticFloatingHint" }, - MiniClueNextKeyWithPostkeys = { link = "DiagnosticFloatingError" }, - MiniClueSeparator = { link = "DiagnosticFloatingInfo" }, - MiniClueTitle = { bg = groups.panel, bold = styles.bold }, - - MiniCompletionActiveParameter = { underline = true }, - - MiniCursorword = { underline = true }, - MiniCursorwordCurrent = { underline = true }, - - MiniDepsChangeAdded = { fg = groups.git_add }, - MiniDepsChangeRemoved = { fg = groups.git_delete }, - MiniDepsHint = { link = "DiagnosticHint" }, - MiniDepsInfo = { link = "DiagnosticInfo" }, - MiniDepsMsgBreaking = { link = "DiagnosticWarn" }, - MiniDepsPlaceholder = { link = "Comment" }, - MiniDepsTitle = { link = "Title" }, - MiniDepsTitleError = { link = "DiffDelete" }, - MiniDepsTitleSame = { link = "DiffText" }, - MiniDepsTitleUpdate = { link = "DiffAdd" }, - - MiniDiffOverAdd = { fg = groups.git_add, bg = groups.git_add, blend = 20 }, - MiniDiffOverChange = { fg = groups.git_change, bg = groups.git_change, blend = 20 }, - MiniDiffOverContext = { bg = palette.surface }, - MiniDiffOverDelete = { fg = groups.git_delete, bg = groups.git_delete, blend = 20 }, - MiniDiffSignAdd = { fg = groups.git_add }, - MiniDiffSignChange = { fg = groups.git_change }, - MiniDiffSignDelete = { fg = groups.git_delete }, - - MiniFilesBorder = { link = "FloatBorder" }, - MiniFilesBorderModified = { link = "DiagnosticFloatingWarn" }, - MiniFilesCursorLine = { link = "CursorLine" }, - MiniFilesDirectory = { link = "Directory" }, - MiniFilesFile = { fg = palette.text }, - MiniFilesNormal = { link = "NormalFloat" }, - MiniFilesTitle = { link = "FloatTitle" }, - MiniFilesTitleFocused = { fg = palette.rose, bg = groups.panel, bold = styles.bold }, - - MiniHipatternsFixme = { fg = palette.base, bg = groups.error, bold = styles.bold }, - MiniHipatternsHack = { fg = palette.base, bg = groups.warn, bold = styles.bold }, - MiniHipatternsNote = { fg = palette.base, bg = groups.info, bold = styles.bold }, - MiniHipatternsTodo = { fg = palette.base, bg = groups.hint, bold = styles.bold }, - - MiniIconsAzure = { fg = palette.foam }, - MiniIconsBlue = { fg = palette.pine }, - MiniIconsCyan = { fg = palette.foam }, - MiniIconsGreen = { fg = palette.leaf }, - MiniIconsGrey = { fg = palette.subtle }, - MiniIconsOrange = { fg = palette.rose }, - MiniIconsPurple = { fg = palette.iris }, - MiniIconsRed = { fg = palette.love }, - MiniIconsYellow = { fg = palette.gold }, - - MiniIndentscopeSymbol = { fg = palette.muted }, - MiniIndentscopeSymbolOff = { fg = palette.gold }, - - MiniJump = { sp = palette.gold, undercurl = true }, - - MiniJump2dDim = { fg = palette.subtle }, - MiniJump2dSpot = { fg = palette.gold, bold = styles.bold, nocombine = true }, - MiniJump2dSpotAhead = { fg = palette.foam, bg = palette.surface, nocombine = true }, - MiniJump2dSpotUnique = { fg = palette.rose, bold = styles.bold, nocombine = true }, - - MiniMapNormal = { link = "NormalFloat" }, - MiniMapSymbolCount = { link = "Special" }, - MiniMapSymbolLine = { link = "Title" }, - MiniMapSymbolView = { link = "Delimiter" }, - - MiniNotifyBorder = { link = "FloatBorder" }, - MiniNotifyNormal = { link = "NormalFloat" }, - MiniNotifyTitle = { link = "FloatTitle" }, - - MiniOperatorsExchangeFrom = { link = "IncSearch" }, - - MiniPickBorder = { link = "FloatBorder" }, - MiniPickBorderBusy = { link = "DiagnosticFloatingWarn" }, - MiniPickBorderText = { bg = groups.panel }, - MiniPickIconDirectory = { link = "Directory" }, - MiniPickIconFile = { link = "MiniPickNormal" }, - MiniPickHeader = { link = "DiagnosticFloatingHint" }, - MiniPickMatchCurrent = { link = "CursorLine" }, - MiniPickMatchMarked = { link = "Visual" }, - MiniPickMatchRanges = { fg = palette.foam }, - MiniPickNormal = { link = "NormalFloat" }, - MiniPickPreviewLine = { link = "CursorLine" }, - MiniPickPreviewRegion = { link = "IncSearch" }, - MiniPickPrompt = { bg = groups.panel, bold = styles.bold }, - - MiniStarterCurrent = { nocombine = true }, - MiniStarterFooter = { fg = palette.subtle }, - MiniStarterHeader = { link = "Title" }, - MiniStarterInactive = { link = "Comment" }, - MiniStarterItem = { link = "Normal" }, - MiniStarterItemBullet = { link = "Delimiter" }, - MiniStarterItemPrefix = { link = "WarningMsg" }, - MiniStarterSection = { fg = palette.rose }, - MiniStarterQuery = { link = "MoreMsg" }, - - MiniStatuslineDevinfo = { fg = palette.subtle, bg = palette.overlay }, - MiniStatuslineFileinfo = { link = "MiniStatuslineDevinfo" }, - MiniStatuslineFilename = { fg = palette.muted, bg = palette.surface }, - MiniStatuslineInactive = { link = "MiniStatuslineFilename" }, - MiniStatuslineModeCommand = { fg = palette.base, bg = palette.love, bold = styles.bold }, - MiniStatuslineModeInsert = { fg = palette.base, bg = palette.foam, bold = styles.bold }, - MiniStatuslineModeNormal = { fg = palette.base, bg = palette.rose, bold = styles.bold }, - MiniStatuslineModeOther = { fg = palette.base, bg = palette.rose, bold = styles.bold }, - MiniStatuslineModeReplace = { fg = palette.base, bg = palette.pine, bold = styles.bold }, - MiniStatuslineModeVisual = { fg = palette.base, bg = palette.iris, bold = styles.bold }, - - MiniSurround = { link = "IncSearch" }, - - MiniTablineCurrent = { fg = palette.text, bg = palette.overlay, bold = styles.bold }, - MiniTablineFill = { link = "TabLineFill" }, - MiniTablineHidden = { fg = palette.subtle, bg = groups.panel }, - MiniTablineModifiedCurrent = { fg = palette.overlay, bg = palette.text, bold = styles.bold }, - MiniTablineModifiedHidden = { fg = groups.panel, bg = palette.subtle }, - MiniTablineModifiedVisible = { fg = groups.panel, bg = palette.text }, - MiniTablineTabpagesection = { link = "Search" }, - MiniTablineVisible = { fg = palette.text, bg = groups.panel }, - - MiniTestEmphasis = { bold = styles.bold }, - MiniTestFail = { fg = palette.love, bold = styles.bold }, - MiniTestPass = { fg = palette.foam, bold = styles.bold }, - - MiniTrailspace = { bg = palette.love }, - - -- goolord/alpha-nvim - AlphaButtons = { fg = palette.foam }, - AlphaFooter = { fg = palette.gold }, - AlphaHeader = { fg = palette.pine }, - AlphaShortcut = { fg = palette.rose }, - - -- github/copilot.vim - CopilotSuggestion = { fg = palette.muted, italic = styles.italic }, - - -- nvim-treesitter/nvim-treesitter-context - TreesitterContext = { bg = palette.overlay }, - TreesitterContextLineNumber = { fg = palette.rose, bg = palette.overlay }, - - -- RRethy/vim-illuminate - IlluminatedWordRead = { link = "LspReferenceRead" }, - IlluminatedWordText = { link = "LspReferenceText" }, - IlluminatedWordWrite = { link = "LspReferenceWrite" }, - - -- HiPhish/rainbow-delimiters.nvim - RainbowDelimiterBlue = { fg = palette.pine }, - RainbowDelimiterCyan = { fg = palette.foam }, - RainbowDelimiterGreen = { fg = palette.leaf }, - RainbowDelimiterOrange = { fg = palette.rose }, - RainbowDelimiterRed = { fg = palette.love }, - RainbowDelimiterViolet = { fg = palette.iris }, - RainbowDelimiterYellow = { fg = palette.gold }, - - -- MeanderingProgrammer/render-markdown.nvim - RenderMarkdownBullet = { fg = palette.rose }, - RenderMarkdownChecked = { fg = palette.foam }, - RenderMarkdownCode = { bg = palette.overlay }, - RenderMarkdownCodeInline = { fg = palette.text, bg = palette.overlay }, - RenderMarkdownDash = { fg = palette.muted }, - RenderMarkdownH1Bg = { bg = groups.h1, blend = 20 }, - RenderMarkdownH2Bg = { bg = groups.h2, blend = 20 }, - RenderMarkdownH3Bg = { bg = groups.h3, blend = 20 }, - RenderMarkdownH4Bg = { bg = groups.h4, blend = 20 }, - RenderMarkdownH5Bg = { bg = groups.h5, blend = 20 }, - RenderMarkdownH6Bg = { bg = groups.h6, blend = 20 }, - RenderMarkdownQuote = { fg = palette.subtle }, - RenderMarkdownTableFill = { link = "Conceal" }, - RenderMarkdownTableHead = { fg = palette.subtle }, - RenderMarkdownTableRow = { fg = palette.subtle }, - RenderMarkdownUnchecked = { fg = palette.subtle }, - - -- MagicDuck/grug-far.nvim - GrugFarHelpHeader = { fg = palette.pine }, - GrugFarHelpHeaderKey = { fg = palette.gold }, - GrugFarHelpWinActionKey = { fg = palette.gold }, - GrugFarHelpWinActionPrefix = { fg = palette.foam }, - GrugFarHelpWinActionText = { fg = palette.pine }, - GrugFarHelpWinHeader = { link = "FloatTitle" }, - GrugFarInputLabel = { fg = palette.foam }, - GrugFarInputPlaceholder = { link = "Comment" }, - GrugFarResultsActionMessage = { fg = palette.foam }, - GrugFarResultsChangeIndicator = { fg = groups.git_change }, - GrugFarResultsRemoveIndicator = { fg = groups.git_delete }, - GrugFarResultsAddIndicator = { fg = groups.git_add }, - GrugFarResultsHeader = { fg = palette.pine }, - GrugFarResultsLineNo = { fg = palette.iris }, - GrugFarResultsLineColumn = { link = "GrugFarResultsLineNo" }, - GrugFarResultsMatch = { link = "CurSearch" }, - GrugFarResultsPath = { fg = palette.foam }, - GrugFarResultsStats = { fg = palette.iris }, - - -- yetone/avante.nvim - AvanteTitle = { fg = palette.highlight_high, bg = palette.rose }, - AvanteReversedTitle = { fg = palette.rose }, - AvanteSubtitle = { fg = palette.highlight_med, bg = palette.foam }, - AvanteReversedSubtitle = { fg = palette.foam }, - AvanteThirdTitle = { fg = palette.highlight_med, bg = palette.iris }, - AvanteReversedThirdTitle = { fg = palette.iris }, - AvantePromptInput = { fg = palette.text, bg = groups.panel }, - AvantePromptInputBorder = { fg = groups.border }, - - -- Saghen/blink.cmp - BlinkCmpDoc = { bg = palette.highlight_low }, - BlinkCmpDocSeparator = { bg = palette.highlight_low }, - BlinkCmpDocBorder = { fg = palette.highlight_high }, - BlinkCmpGhostText = { fg = palette.muted }, - - BlinkCmpLabel = { fg = palette.muted }, - BlinkCmpLabelDeprecated = { fg = palette.muted, strikethrough = true }, - BlinkCmpLabelMatch = { fg = palette.text, bold = styles.bold }, - - BlinkCmpDefault = { fg = palette.highlight_med }, - BlinkCmpKindText = { fg = palette.pine }, - BlinkCmpKindMethod = { fg = palette.foam }, - BlinkCmpKindFunction = { fg = palette.foam }, - BlinkCmpKindConstructor = { fg = palette.foam }, - BlinkCmpKindField = { fg = palette.pine }, - BlinkCmpKindVariable = { fg = palette.rose }, - BlinkCmpKindClass = { fg = palette.gold }, - BlinkCmpKindInterface = { fg = palette.gold }, - BlinkCmpKindModule = { fg = palette.foam }, - BlinkCmpKindProperty = { fg = palette.foam }, - BlinkCmpKindUnit = { fg = palette.pine }, - BlinkCmpKindValue = { fg = palette.love }, - BlinkCmpKindKeyword = { fg = palette.iris }, - BlinkCmpKindSnippet = { fg = palette.rose }, - BlinkCmpKindColor = { fg = palette.love }, - BlinkCmpKindFile = { fg = palette.foam }, - BlinkCmpKindReference = { fg = palette.love }, - BlinkCmpKindFolder = { fg = palette.foam }, - BlinkCmpKindEnum = { fg = palette.foam }, - BlinkCmpKindEnumMember = { fg = palette.foam }, - BlinkCmpKindConstant = { fg = palette.gold }, - BlinkCmpKindStruct = { fg = palette.foam }, - BlinkCmpKindEvent = { fg = palette.foam }, - BlinkCmpKindOperator = { fg = palette.foam }, - BlinkCmpKindTypeParameter = { fg = palette.iris }, - BlinkCmpKindCodeium = { fg = palette.foam }, - BlinkCmpKindCopilot = { fg = palette.foam }, - BlinkCmpKindSupermaven = { fg = palette.foam }, - BlinkCmpKindTabNine = { fg = palette.foam }, - - -- folke/snacks.nvim - SnacksIndent = { fg = palette.overlay }, - SnacksIndentChunk = { fg = palette.overlay }, - SnacksIndentBlank = { fg = palette.overlay }, - SnacksIndentScope = { fg = palette.foam }, - - SnacksPickerMatch = { fg = palette.rose, bold = styles.bold }, - - -- justinmk/vim-sneak - Sneak = { fg = palette.base, bg = palette.love }, - SneakCurrent = { link = "StatusLineTerm" }, - SneakScope = { link = "IncSearch" }, - - -- sindrets/diffview.nvim - DiffviewPrimary = { fg = palette.pine }, - DiffviewSecondary = { fg = palette.foam }, - DiffviewNormal = { fg = palette.text, bg = palette.surface }, - DiffviewWinSeparator = { fg = palette.text, bg = palette.surface }, - - DiffviewFilePanelTitle = { fg = palette.foam, bold = styles.bold }, - DiffviewFilePanelCounter = { fg = palette.rose }, - DiffviewFilePanelRootPath = { fg = palette.foam, bold = styles.bold }, - DiffviewFilePanelFileName = { fg = palette.text }, - DiffviewFilePanelSelected = { fg = palette.gold }, - DiffviewFilePanelPath = { link = "Comment" }, - - DiffviewFilePanelInsertions = { fg = groups.git_add }, - DiffviewFilePanelDeletions = { fg = groups.git_delete }, - DiffviewFilePanelConflicts = { fg = groups.git_merge }, - DiffviewFolderName = { fg = palette.foam, bold = styles.bold }, - DiffviewFolderSign = { fg = palette.subtle }, - DiffviewHash = { fg = palette.rose }, - DiffviewReference = { fg = palette.foam, bold = styles.bold }, - DiffviewReflogSelector = { fg = palette.rose }, - DiffviewStatusAdded = { fg = groups.git_add }, - DiffviewStatusUntracked = { fg = groups.untracked }, - DiffviewStatusModified = { fg = groups.git_change }, - DiffviewStatusRenamed = { fg = groups.git_rename }, - DiffviewStatusCopied = { fg = groups.untracked }, - DiffviewStatusTypeChange = { fg = groups.git_change }, - DiffviewStatusUnmerged = { fg = groups.git_change }, - DiffviewStatusUnknown = { fg = groups.git_delete }, - DiffviewStatusDeleted = { fg = groups.git_delete }, - DiffviewStatusBroken = { fg = groups.git_delete }, - DiffviewStatusIgnored = { fg = groups.git_ignore }, - } - local transparency_highlights = { - DiagnosticVirtualTextError = { fg = groups.error }, - DiagnosticVirtualTextHint = { fg = groups.hint }, - DiagnosticVirtualTextInfo = { fg = groups.info }, - DiagnosticVirtualTextOk = { fg = groups.ok }, - DiagnosticVirtualTextWarn = { fg = groups.warn }, - - FloatBorder = { fg = palette.muted, bg = "NONE" }, - FloatTitle = { fg = palette.foam, bg = "NONE", bold = styles.bold }, - Folded = { fg = palette.text, bg = "NONE" }, - NormalFloat = { bg = "NONE" }, - Normal = { fg = palette.text, bg = "NONE" }, - NormalNC = { fg = palette.text, bg = config.options.dim_inactive_windows and palette._nc or "NONE" }, - Pmenu = { fg = palette.subtle, bg = "NONE" }, - PmenuKind = { fg = palette.foam, bg = "NONE" }, - SignColumn = { fg = palette.text, bg = "NONE" }, - StatusLine = { fg = palette.subtle, bg = "NONE" }, - StatusLineNC = { fg = palette.muted, bg = "NONE" }, - TabLine = { bg = "NONE", fg = palette.subtle }, - TabLineFill = { bg = "NONE" }, - TabLineSel = { fg = palette.text, bg = "NONE", bold = styles.bold }, - - -- ["@markup.raw"] = { bg = "none" }, - ["@markup.raw.markdown_inline"] = { fg = palette.gold }, - -- ["@markup.raw.block"] = { bg = "none" }, - - TelescopeNormal = { fg = palette.subtle, bg = "NONE" }, - TelescopePromptNormal = { fg = palette.text, bg = "NONE" }, - TelescopeSelection = { fg = palette.text, bg = "NONE", bold = styles.bold }, - TelescopeSelectionCaret = { fg = palette.rose }, - - TroubleNormal = { bg = "NONE" }, - - WhichKeyFloat = { bg = "NONE" }, - WhichKeyNormal = { bg = "NONE" }, - - IblIndent = { fg = palette.overlay, bg = "NONE" }, - IblScope = { fg = palette.foam, bg = "NONE" }, - IblWhitespace = { fg = palette.overlay, bg = "NONE" }, - - TreesitterContext = { bg = "NONE" }, - TreesitterContextLineNumber = { fg = palette.rose, bg = "NONE" }, - - MiniFilesTitleFocused = { fg = palette.rose, bg = "NONE", bold = styles.bold }, - - MiniPickPrompt = { bg = "NONE", bold = styles.bold }, - MiniPickBorderText = { bg = "NONE" }, - } - - if config.options.enable.legacy_highlights then - for group, highlight in pairs(legacy_highlights) do - highlights[group] = highlight - end - end - for group, highlight in pairs(default_highlights) do - highlights[group] = highlight - end - if styles.transparency then - for group, highlight in pairs(transparency_highlights) do - highlights[group] = highlight - end - end - - -- Reconcile highlights with config - if config.options.highlight_groups ~= nil and next(config.options.highlight_groups) ~= nil then - for group, highlight in pairs(config.options.highlight_groups) do - local existing = highlights[group] or {} - -- Traverse link due to - -- "If link is used in combination with other attributes; only the link will take effect" - -- see: https://neovim.io/doc/user/api.html#nvim_set_hl() - while existing.link ~= nil do - existing = highlights[existing.link] or {} - end - local parsed = vim.tbl_extend("force", {}, highlight) - - if highlight.fg ~= nil then - parsed.fg = utilities.parse_color(highlight.fg) or highlight.fg - end - if highlight.bg ~= nil then - parsed.bg = utilities.parse_color(highlight.bg) or highlight.bg - end - if highlight.sp ~= nil then - parsed.sp = utilities.parse_color(highlight.sp) or highlight.sp - end - - if (highlight.inherit == nil or highlight.inherit) and existing ~= nil then - parsed.inherit = nil - highlights[group] = vim.tbl_extend("force", existing, parsed) - else - parsed.inherit = nil - highlights[group] = parsed - end - end - end - - for group, highlight in pairs(highlights) do - if config.options.before_highlight ~= nil then - config.options.before_highlight(group, highlight, palette) - end - - if highlight.blend ~= nil and (highlight.blend >= 0 and highlight.blend <= 100) and highlight.bg ~= nil then - highlight.bg = utilities.blend(highlight.bg, highlight.blend_on or palette.base, highlight.blend / 100) - end - - highlight.blend = nil - highlight.blend_on = nil - - if highlight._nvim_blend ~= nil then - highlight.blend = highlight._nvim_blend - end - - vim.api.nvim_set_hl(0, group, highlight) - end - - --- Terminal - if config.options.enable.terminal then - vim.g.terminal_color_0 = palette.overlay -- black - vim.g.terminal_color_8 = palette.subtle -- bright black - vim.g.terminal_color_1 = palette.love -- red - vim.g.terminal_color_9 = palette.love -- bright red - vim.g.terminal_color_2 = palette.pine -- green - vim.g.terminal_color_10 = palette.pine -- bright green - vim.g.terminal_color_3 = palette.gold -- yellow - vim.g.terminal_color_11 = palette.gold -- bright yellow - vim.g.terminal_color_4 = palette.foam -- blue - vim.g.terminal_color_12 = palette.foam -- bright blue - vim.g.terminal_color_5 = palette.iris -- magenta - vim.g.terminal_color_13 = palette.iris -- bright magenta - vim.g.terminal_color_6 = palette.rose -- cyan - vim.g.terminal_color_14 = palette.rose -- bright cyan - vim.g.terminal_color_7 = palette.text -- white - vim.g.terminal_color_15 = palette.text -- bright white - - -- Support StatusLineTerm & StatusLineTermNC from vim - vim.cmd([[ - augroup rose-pine - autocmd! - autocmd TermOpen * if &buftype=='terminal' - \|setlocal winhighlight=StatusLine:StatusLineTerm,StatusLineNC:StatusLineTermNC - \|else|setlocal winhighlight=|endif - autocmd ColorSchemePre * autocmd! rose-pine - augroup END - ]]) - end -end - ----@param variant Variant | nil +---@param variant Variant|nil function M.colorscheme(variant) - config.extend_options({ variant = variant }) + config.extend({ variant = variant }) vim.opt.termguicolors = true if vim.g.colors_name then - vim.cmd("hi clear") - vim.cmd("syntax reset") + vim.cmd('hi clear') + vim.cmd('syntax reset') end - vim.g.colors_name = "rose-pine" + vim.g.colors_name = 'rose-pine' - if variant == "dawn" then - vim.o.background = "light" - elseif variant == "main" or variant == "moon" then - vim.o.background = "dark" - end - - set_highlights() + require('rose-pine.theme')._load(config.options) end ----@param options Options function M.setup(options) - config.extend_options(options or {}) + config.extend(options) end return M diff --git a/lua/rose-pine/config.lua b/lua/rose-pine/config.lua index bbc9967..58674d7 100644 --- a/lua/rose-pine/config.lua +++ b/lua/rose-pine/config.lua @@ -1,176 +1,68 @@ ---@alias Variant "main" | "moon" | "dawn" ----@alias Palette { base: string, surface: string, overlay: string, muted: string, subtle: string, text: string, love: string, gold: string, rose: string, pine: string, foam: string, iris: string } ----@alias PaletteColor "base" | "surface" | "overlay" | "muted" | "subtle" | "text" | "love" | "gold" | "rose" | "pine" | "foam" | "iris" | "highlight_low" | "highlight_med" | "highlight_high" ----@alias Highlight { link: string, inherit: boolean } | { fg: string, bg: string, sp: string, bold: boolean, italic: boolean, undercurl: boolean, underline: boolean, underdouble: boolean, underdotted: boolean, underdashed: boolean, strikethrough: boolean, inherit: boolean } +---@alias Color { fg: string, bg: string, sp: string, bold: boolean, italic: boolean, undercurl: boolean, underline: boolean, underdouble: boolean, underdotted: boolean, underdashed: boolean, strikethrough: boolean } -local config = {} +local M = {} ---@class Options -config.options = { +M.options = { ---Set the desired variant: "auto" will follow the vim background, - ---defaulting to `dark_variant` or "main" for dark and "dawn" for light. + ---defaulting to "main" for dark and "dawn" for light. To change the dark + ---variant, use `options.dark_variant = "moon"`. ---@type "auto" | Variant - variant = "auto", + variant = 'auto', - ---Set the desired dark variant when `options.variant` is set to "auto". + ---Set the desired dark variant: applies when `options.variant` is set to + ---"auto" to match `vim.o.background`. ---@type Variant - dark_variant = "main", + dark_variant = 'main', - ---Differentiate between active and inactive windows and panels. - dim_inactive_windows = false, + bold_vert_split = false, - ---Extend background behind borders. Appearance differs based on which - ---border characters you are using. - extend_background_behind_borders = true, + dim_nc_background = false, - enable = { - legacy_highlights = true, - migrations = true, - terminal = true, - }, + disable_background = false, + disable_float_background = false, + disable_italics = false, - styles = { - bold = true, - italic = true, - transparency = false, - }, - - ---@type table> - palette = {}, - - ---@type table groups = { - border = "muted", - link = "iris", - panel = "surface", - - error = "love", - hint = "iris", - info = "foam", - ok = "leaf", - warn = "gold", - note = "pine", - todo = "rose", - - git_add = "foam", - git_change = "rose", - git_delete = "love", - git_dirty = "rose", - git_ignore = "muted", - git_merge = "iris", - git_rename = "pine", - git_stage = "iris", - git_text = "rose", - git_untracked = "subtle", - - ---@type string | PaletteColor - h1 = "iris", - h2 = "foam", - h3 = "rose", - h4 = "gold", - h5 = "pine", - h6 = "leaf", - - ---@deprecated Replaced by `options.highlight_groups["Normal"]` - -- background = "base", - ---@deprecated Replaced by `options.highlight_groups["Comment"]` - -- comment = "subtle", - ---@deprecated Replaced by `options.highlight_groups["@punctuation"]` - -- punctuation = "muted", - ---@deprecated Expects a table with values h1...h6 - -- headings = "text", + background = 'base', + background_nc = 'nc', + panel = 'surface', + panel_nc = 'base', + border = 'highlight_med', + comment = 'muted', + link = 'iris', + punctuation = 'muted', + error = 'love', + hint = 'iris', + info = 'foam', + warn = 'gold', + git_add = 'foam', + git_change = 'rose', + git_delete = 'love', + git_dirty = 'rose', + git_ignore = 'muted', + git_merge = 'iris', + git_rename = 'pine', + git_stage = 'iris', + git_text = 'rose', + headings = { + h1 = 'iris', + h2 = 'foam', + h3 = 'rose', + h4 = 'gold', + h5 = 'pine', + h6 = 'foam', + }, }, - ---@type table + ---@type table highlight_groups = {}, - - ---Called before each highlight group, before setting the highlight. - ---@param group string - ---@param highlight Highlight - ---@param palette Palette - ---@diagnostic disable-next-line: unused-local - before_highlight = function(group, highlight, palette) end, - - ---@deprecated Replaced by `options.dim_inactive_windows` - -- dim_nc_background = false, - ---@deprecated Replaced by `options.enable.transparency` - -- disable_background = false, - ---@deprecated Replaced by `options.highlight_groups["NormalFloat"]` - -- disable_float_background = false, - ---@deprecated Replaced by `options.styles.italic` - -- disable_italics = false, - ---@deprecated Replaced by `options.highlight_groups` - -- bold_vert_split = false } -local function migrate(options) - if options.bold_vert_split then - local border = options.groups.border or "muted" - options.highlight_groups["VertSplit"] = { fg = border, bg = border } - options.highlight_groups["WinSeparator"] = { fg = border, bg = border } - end - - if options.disable_background then - options.highlight_groups["Normal"] = { bg = "NONE" } - end - - if options.disable_float_background then - options.highlight_groups["NormalFloat"] = { bg = "NONE" } - end - - options.dim_inactive_windows = options.dim_nc_background or options.dim_inactive_windows - - if options.groups.background ~= nil then - options.highlight_groups["Normal"] = { bg = options.groups.background } - end - - if options.groups.comment ~= nil then - options.highlight_groups["Comment"] = { fg = options.groups.comment } - end - - if options.groups.punctuation ~= nil then - options.highlight_groups["@punctuation"] = { fg = options.groups.punctuation } - end - - options.styles.transparency = (options.disable_background and options.disable_float_background) - or options.styles.transparency - - -- These never actually existed, but may be set intuitively by the user - -- because of `disable_italics` existing. - options.styles.bold = not (options.disable_bold or options.disable_bolds) and options.styles.bold or false - - -- Similar to bold options, `disable_italic` never existed but could be a - -- common typo of the actual `disable_italics`. - options.styles.italic = not (options.disable_italic or options.disable_italics) and options.styles.italic or false - - -- Set h1 through h6 to the same color if only one is specified - if type(options.groups.headings) == "string" then - options.groups.h1 = options.groups.headings - options.groups.h2 = options.groups.headings - options.groups.h3 = options.groups.headings - options.groups.h4 = options.groups.headings - options.groups.h5 = options.groups.headings - options.groups.h6 = options.groups.headings - elseif options.groups.headings == "table" then - options.groups.h1 = options.groups.headings.h1 or options.groups.h1 - options.groups.h2 = options.groups.headings.h2 or options.groups.h2 - options.groups.h3 = options.groups.headings.h3 or options.groups.h3 - options.groups.h4 = options.groups.headings.h4 or options.groups.h4 - options.groups.h5 = options.groups.headings.h5 or options.groups.h5 - options.groups.h6 = options.groups.headings.h6 or options.groups.h6 - end - options.groups.headings = nil - - return options +---@param options Options|nil +function M.extend(options) + M.options = vim.tbl_deep_extend('force', M.options, options or {}) end ----@param options Options | nil -function config.extend_options(options) - config.options = vim.tbl_deep_extend("force", config.options, options or {}) - - if config.options.enable.migrations then - config.options = migrate(config.options) - end -end - -return config +return M diff --git a/lua/rose-pine/palette.lua b/lua/rose-pine/palette.lua index cfefd65..66d6438 100644 --- a/lua/rose-pine/palette.lua +++ b/lua/rose-pine/palette.lua @@ -1,78 +1,74 @@ -local options = require("rose-pine.config").options +local options = require('rose-pine.config').options + local variants = { main = { - _nc = "#16141f", - base = "#191724", - surface = "#1f1d2e", - overlay = "#26233a", - muted = "#6e6a86", - subtle = "#908caa", - text = "#e0def4", - love = "#eb6f92", - gold = "#f6c177", - rose = "#ebbcba", - pine = "#31748f", - foam = "#9ccfd8", - iris = "#c4a7e7", - leaf = "#95b1ac", - highlight_low = "#21202e", - highlight_med = "#403d52", - highlight_high = "#524f67", - none = "NONE", + ---@deprecated for backwards compatibility + _experimental_nc = '#16141f', + nc = '#16141f', + base = '#191724', + surface = '#1f1d2e', + overlay = '#26233a', + muted = '#6e6a86', + subtle = '#908caa', + text = '#e0def4', + love = '#eb6f92', + gold = '#f6c177', + rose = '#ebbcba', + pine = '#31748f', + foam = '#9ccfd8', + iris = '#c4a7e7', + highlight_low = '#21202e', + highlight_med = '#403d52', + highlight_high = '#524f67', + none = 'NONE', }, moon = { - _nc = "#1f1d30", - base = "#232136", - surface = "#2a273f", - overlay = "#393552", - muted = "#6e6a86", - subtle = "#908caa", - text = "#e0def4", - love = "#eb6f92", - gold = "#f6c177", - rose = "#ea9a97", - pine = "#3e8fb0", - foam = "#9ccfd8", - iris = "#c4a7e7", - leaf = "#95b1ac", - highlight_low = "#2a283e", - highlight_med = "#44415a", - highlight_high = "#56526e", - none = "NONE", + ---@deprecated for backwards compatibility + _experimental_nc = '#1f1d30', + nc = '#1f1d30', + base = '#232136', + surface = '#2a273f', + overlay = '#393552', + muted = '#6e6a86', + subtle = '#908caa', + text = '#e0def4', + love = '#eb6f92', + gold = '#f6c177', + rose = '#ea9a97', + pine = '#3e8fb0', + foam = '#9ccfd8', + iris = '#c4a7e7', + highlight_low = '#2a283e', + highlight_med = '#44415a', + highlight_high = '#56526e', + none = 'NONE', }, dawn = { - _nc = "#f8f0e7", - base = "#faf4ed", - surface = "#fffaf3", - overlay = "#f2e9e1", - muted = "#9893a5", - subtle = "#797593", - text = "#464261", - love = "#b4637a", - gold = "#ea9d34", - rose = "#d7827e", - pine = "#286983", - foam = "#56949f", - iris = "#907aa9", - leaf = "#6d8f89", - highlight_low = "#f4ede8", - highlight_med = "#dfdad9", - highlight_high = "#cecacd", - none = "NONE", + ---@deprecated for backwards compatibility + _experimental_nc = '#f8f0e7', + nc = '#f8f0e7', + base = '#faf4ed', + surface = '#fffaf3', + overlay = '#f2e9e1', + muted = '#9893a5', + subtle = '#797593', + text = '#575279', + love = '#b4637a', + gold = '#ea9d34', + rose = '#d7827e', + pine = '#286983', + foam = '#56949f', + iris = '#907aa9', + highlight_low = '#f4ede8', + highlight_med = '#dfdad9', + highlight_high = '#cecacd', + none = 'NONE', }, } -if options.palette ~= nil and next(options.palette) then - -- handle variant specific overrides - for variant_name, override_palette in pairs(options.palette) do - if variants[variant_name] then - variants[variant_name] = vim.tbl_extend("force", variants[variant_name], override_palette or {}) - end - end -end - if variants[options.variant] ~= nil then return variants[options.variant] end -return vim.o.background == "light" and variants.dawn or variants[options.dark_variant or "main"] +return vim.o.background == 'light' and variants.dawn + or variants[options.dark_variant or 'main'] diff --git a/lua/rose-pine/plugins/bufferline.lua b/lua/rose-pine/plugins/bufferline.lua index 7a96026..1a5eaac 100644 --- a/lua/rose-pine/plugins/bufferline.lua +++ b/lua/rose-pine/plugins/bufferline.lua @@ -2,43 +2,43 @@ --- https://github.com/akinsho/bufferline.nvim --- --- @usage ---- local highlights = require("rose-pine.plugins.bufferline") ---- require("bufferline").setup({ highlights = highlights }) +--- local highlights = require('rose-pine.plugins.bufferline') +--- require('bufferline').setup({ highlights = highlights }) -local p = require("rose-pine.palette") +local p = require('rose-pine.palette') return { -- fill = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- background = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- tab = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, tab_selected = { fg = p.text, bg = p.overlay, }, -- tab_close = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- close_button = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- close_button_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- close_button_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, buffer_visible = { fg = p.subtle, @@ -51,172 +51,172 @@ return { italic = true, }, -- diagnostic = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- diagnostic_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- diagnostic_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, -- }, -- info = { - -- fg = "", - -- sp = "", - -- bg = "", + -- fg = '', + -- sp = '', + -- bg = '', -- }, -- info_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- info_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, - -- sp = "", + -- sp = '', -- }, -- info_diagnostic = { - -- fg = "", - -- sp = "", - -- bg = "", + -- fg = '', + -- sp = '', + -- bg = '', -- }, -- info_diagnostic_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- info_diagnostic_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, - -- sp = "", + -- sp = '', -- }, -- warning = { - -- fg = "", - -- sp = "", - -- bg = "", + -- fg = '', + -- sp = '', + -- bg = '', -- }, -- warning_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- warning_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, - -- sp = "", + -- sp = '', -- }, -- warning_diagnostic = { - -- fg = "", - -- sp = "", - -- bg = "", + -- fg = '', + -- sp = '', + -- bg = '', -- }, -- warning_diagnostic_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- warning_diagnostic_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, -- sp = warning_diagnostic_fg, -- }, -- error = { - -- fg = "", - -- bg = "", - -- sp = "", + -- fg = '', + -- bg = '', + -- sp = '', -- }, -- error_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- error_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, - -- sp = "", + -- sp = '', -- }, -- error_diagnostic = { - -- fg = "", - -- bg = "", - -- sp = "", + -- fg = '', + -- bg = '', + -- sp = '', -- }, -- error_diagnostic_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- error_diagnostic_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, - -- sp = "", + -- sp = '', -- }, -- modified = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- modified_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- modified_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- duplicate_selected = { - -- fg = "", + -- fg = '', -- italic = true, - -- bg = "", + -- bg = '', -- }, -- duplicate_visible = { - -- fg = "", + -- fg = '', -- italic = true, - -- bg = "", + -- bg = '', -- }, -- duplicate = { - -- fg = "", + -- fg = '', -- italic = true, - -- bg = "", + -- bg = '', -- }, -- separator_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- separator_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- separator = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- indicator_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- }, -- pick_selected = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- italic = true, -- }, -- pick_visible = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, -- }, -- pick = { - -- fg = "", - -- bg = "", + -- fg = '', + -- bg = '', -- bold = true, -- italic = true, -- }, diff --git a/lua/rose-pine/plugins/galaxyline.lua b/lua/rose-pine/plugins/galaxyline.lua index 05d9b28..348559a 100644 --- a/lua/rose-pine/plugins/galaxyline.lua +++ b/lua/rose-pine/plugins/galaxyline.lua @@ -2,9 +2,9 @@ --- https://github.com/NTBBloodbath/galaxyline.nvim --- --- @usage ---- local highlights = require("rose-pine.plugins.galaxyline") +--- local highlights = require('rose-pine.plugins.galaxyline') -local p = require("rose-pine.palette") +local p = require('rose-pine.palette') return { bg = p.surface, diff --git a/lua/rose-pine/plugins/markid.lua b/lua/rose-pine/plugins/markid.lua index 3d6d8f9..9279adb 100644 --- a/lua/rose-pine/plugins/markid.lua +++ b/lua/rose-pine/plugins/markid.lua @@ -2,9 +2,9 @@ --- https://github.com/David-Kunz/markid --- --- @usage ---- local highlights = require("rose-pine.plugins.markid") +--- local highlights = require('rose-pine.plugins.markid') --- require("nvim-treesitter.configs").setup({ markid = { enable = true, colors = highlights } }) -local p = require("rose-pine.palette") +local p = require('rose-pine.palette') return { p.foam, p.rose, p.iris } diff --git a/lua/rose-pine/plugins/obsidian.lua b/lua/rose-pine/plugins/obsidian.lua deleted file mode 100644 index 43cc3b3..0000000 --- a/lua/rose-pine/plugins/obsidian.lua +++ /dev/null @@ -1,14 +0,0 @@ ---- Rosé Pine for Obsidian(epwalsh) ---- https://github.com/epwalsh/obsidian.nvim ---- ---- @usage ---- local highlights = require("rose-pine.plugins.obsidian") ---- require("obsidian").setup({ ui = {hl_groups = highlights} }) - -local p = require("rose-pine.palette") - -return { - ObsidianBullet = { fg = p.muted }, - ObsidianRefText = { underline = true, fg = p.iris }, - ObsidianDone = { bold = true, fg = p.foam } -} diff --git a/lua/rose-pine/plugins/toggleterm.lua b/lua/rose-pine/plugins/toggleterm.lua index 7f808eb..38924f9 100644 --- a/lua/rose-pine/plugins/toggleterm.lua +++ b/lua/rose-pine/plugins/toggleterm.lua @@ -2,14 +2,14 @@ --- https://github.com/akinsho/toggleterm.nvim --- --- @usage ---- local highlights = require("rose-pine.plugins.toggleterm") ---- require("toggleterm").setup({ highlights = highlights }) +--- local highlights = require('rose-pine.plugins.toggleterm') +--- require('toggleterm').setup({ highlights = highlights }) return { - Normal = { link = "Normal" }, - NormalFloat = { link = "Normal" }, - FloatBorder = { link = "FloatBorder" }, - SignColumn = { link = "SignColumn" }, - StatusLine = { link = "StatusLine" }, - StatusLineNC = { link = "StatusLineNC" }, + Normal = { link = 'Normal' }, + NormalFloat = { link = 'Normal' }, + FloatBorder = { link = 'FloatBorder' }, + SignColumn = { link = 'SignColumn' }, + StatusLine = { link = 'StatusLine' }, + StatusLineNC = { link = 'StatusLineNC' }, } diff --git a/lua/rose-pine/theme.lua b/lua/rose-pine/theme.lua new file mode 100644 index 0000000..d5e4faf --- /dev/null +++ b/lua/rose-pine/theme.lua @@ -0,0 +1,629 @@ +local M = {} + +---@param options Options +function M._load(options) + local h = require('rose-pine.util').highlight + local p = require('rose-pine.palette') + + local groups = options.groups or {} + local maybe = { + base = (options.disable_background and p.none) or groups.background, + surface = (options.disable_float_background and p.none) or groups.panel, + italic = not options.disable_italics, + } + maybe.bold_vert_split = (options.bold_vert_split and groups.border) + or p.none + maybe.dim_nc_background = ( + options.dim_nc_background and groups.background_nc + ) or maybe.base + + local float_background = options.dim_nc_background + and (options.disable_float_background and groups.panel_nc or groups.panel) + or maybe.surface + + M.defaults = { + ['ColorColumn'] = { bg = p.overlay }, + ['Conceal'] = { bg = p.none }, + ['CurSearch'] = { link = 'IncSearch' }, + ['Cursor'] = { fg = p.text, bg = p.highlight_high }, + ['CursorColumn'] = { bg = p.highlight_low }, + -- CursorIM = {}, + ['CursorLine'] = { bg = p.highlight_low }, + ['CursorLineNr'] = { fg = p.text }, + ['DarkenedPanel'] = { bg = maybe.surface }, + ['DarkenedStatusline'] = { bg = maybe.surface }, + ['DiffAdd'] = { bg = groups.git_add, blend = 20 }, + + ['DiffChange'] = { bg = p.overlay }, + ['DiffDelete'] = { bg = groups.git_delete, blend = 20 }, + ['DiffText'] = { bg = groups.git_text, blend = 20 }, + ['diffAdded'] = { link = 'DiffAdd' }, + ['diffChanged'] = { link = 'DiffChange' }, + ['diffRemoved'] = { link = 'DiffDelete' }, + ['Directory'] = { fg = p.foam, bg = p.none }, + -- EndOfBuffer = {}, + ['ErrorMsg'] = { fg = p.love, bold = true }, + ['FloatBorder'] = { fg = groups.border, bg = maybe.surface }, + ['FloatTitle'] = { fg = p.muted }, + ['FoldColumn'] = { fg = p.muted }, + ['Folded'] = { fg = p.text, bg = maybe.surface }, + ['IncSearch'] = { fg = groups.background, bg = p.rose }, + ['LineNr'] = { fg = p.muted }, + ['MatchParen'] = { fg = p.text, bg = p.highlight_med }, + ['ModeMsg'] = { fg = p.subtle }, + ['MoreMsg'] = { fg = p.iris }, + ['NonText'] = { fg = p.muted }, + ['Normal'] = { fg = p.text, bg = maybe.base }, + ['NormalFloat'] = { fg = p.text, bg = maybe.surface }, + ['NormalNC'] = { fg = p.text, bg = maybe.dim_nc_background }, + ['NvimInternalError'] = { fg = '#ffffff', bg = p.love }, + ['Pmenu'] = { fg = p.subtle, bg = maybe.surface }, + ['PmenuSbar'] = { bg = p.highlight_low }, + ['PmenuSel'] = { fg = p.text, bg = p.overlay }, + ['PmenuThumb'] = { bg = p.highlight_med }, + ['Question'] = { fg = p.gold }, + -- QuickFixLine = {}, + -- RedrawDebugNormal = {} + ['RedrawDebugClear'] = { fg = '#ffffff', bg = p.gold }, + ['RedrawDebugComposed'] = { fg = '#ffffff', bg = p.pine }, + ['RedrawDebugRecompose'] = { fg = '#ffffff', bg = p.love }, + ['Search'] = { bg = p.highlight_med }, + ['SpecialKey'] = { fg = p.foam }, + ['SpellBad'] = { sp = p.subtle, undercurl = true }, + ['SpellCap'] = { sp = p.subtle, undercurl = true }, + ['SpellLocal'] = { sp = p.subtle, undercurl = true }, + ['SpellRare'] = { sp = p.subtle, undercurl = true }, + ['SignColumn'] = { + fg = p.text, + bg = (options.dim_nc_background and p.none) or maybe.base, + }, + ['Substitute'] = { fg = p.base, bg = p.love }, + ['StatusLine'] = { fg = p.subtle, bg = groups.panel }, + ['StatusLineNC'] = { fg = p.muted, bg = groups.panel_nc }, + ['StatusLineTerm'] = { link = 'StatusLine' }, + ['StatusLineTermNC'] = { link = 'StatusLineNC' }, + ['TabLine'] = { fg = p.subtle, bg = groups.panel }, + ['TabLineFill'] = { bg = groups.panel }, + ['TabLineSel'] = { fg = p.text, bg = p.overlay }, + ['Title'] = { fg = p.text }, + ['VertSplit'] = { fg = groups.border, bg = maybe.bold_vert_split }, + ['Visual'] = { bg = p.highlight_med }, + -- VisualNOS = {}, + ['WarningMsg'] = { fg = p.gold }, + -- Whitespace = {}, + ['WildMenu'] = { link = 'IncSearch' }, + + ['Boolean'] = { fg = p.rose }, + ['Character'] = { fg = p.gold }, + ['Comment'] = { fg = groups.comment, italic = maybe.italic }, + ['Conditional'] = { fg = p.pine }, + ['Constant'] = { fg = p.gold }, + ['Debug'] = { fg = p.rose }, + ['Define'] = { fg = p.iris }, + ['Delimiter'] = { fg = p.subtle }, + ['Error'] = { fg = p.love }, + ['Exception'] = { fg = p.pine }, + ['Float'] = { fg = p.gold }, + ['Function'] = { fg = p.rose }, + ['Identifier'] = { fg = p.rose }, + -- Ignore = {}, + ['Include'] = { fg = p.pine }, + ['Keyword'] = { fg = p.pine }, + ['Label'] = { fg = p.foam }, + ['Macro'] = { fg = p.iris }, + ['Number'] = { fg = p.gold }, + ['Operator'] = { fg = p.subtle }, + ['PreCondit'] = { fg = p.iris }, + ['PreProc'] = { fg = p.iris }, + ['Repeat'] = { fg = p.pine }, + ['Special'] = { fg = p.rose }, + ['SpecialChar'] = { fg = p.rose }, + ['SpecialComment'] = { fg = p.iris }, + ['Statement'] = { fg = p.pine }, + ['StorageClass'] = { fg = p.foam }, + ['String'] = { fg = p.gold }, + ['Structure'] = { fg = p.foam }, + ['Tag'] = { fg = p.foam }, + ['Todo'] = { fg = p.iris }, + ['Type'] = { fg = p.foam }, + ['Typedef'] = { link = 'Type' }, + ['Underlined'] = { underline = true }, + + ['htmlArg'] = { fg = p.iris }, + ['htmlBold'] = { bold = true }, + ['htmlEndTag'] = { fg = p.subtle }, + ['htmlH1'] = { fg = groups.headings.h1, bold = true }, + ['htmlH2'] = { fg = groups.headings.h2, bold = true }, + ['htmlH3'] = { fg = groups.headings.h3, bold = true }, + ['htmlH4'] = { fg = groups.headings.h4, bold = true }, + ['htmlH5'] = { fg = groups.headings.h5, bold = true }, + ['htmlItalic'] = { italic = maybe.italic }, + ['htmlLink'] = { fg = groups.link }, + ['htmlTag'] = { fg = p.subtle }, + ['htmlTagN'] = { fg = p.text }, + ['htmlTagName'] = { fg = p.foam }, + + ['markdownDelimiter'] = { fg = p.subtle }, + ['markdownH1'] = { fg = groups.headings.h1, bold = true }, + ['markdownH1Delimiter'] = { link = 'markdownH1' }, + ['markdownH2'] = { fg = groups.headings.h2, bold = true }, + ['markdownH2Delimiter'] = { link = 'markdownH2' }, + ['markdownH3'] = { fg = groups.headings.h3, bold = true }, + ['markdownH3Delimiter'] = { link = 'markdownH3' }, + ['markdownH4'] = { fg = groups.headings.h4, bold = true }, + ['markdownH4Delimiter'] = { link = 'markdownH4' }, + ['markdownH5'] = { fg = groups.headings.h5, bold = true }, + ['markdownH5Delimiter'] = { link = 'markdownH5' }, + ['markdownH6'] = { fg = groups.headings.h6, bold = true }, + ['markdownH6Delimiter'] = { link = 'markdownH6' }, + ['markdownLinkText'] = { fg = groups.link, sp = groups.link, underline = true }, + ['markdownUrl'] = { link = 'markdownLinkText' }, + + ['mkdCode'] = { fg = p.foam, italic = maybe.italic }, + ['mkdCodeDelimiter'] = { fg = p.rose }, + ['mkdCodeEnd'] = { fg = p.foam }, + ['mkdCodeStart'] = { fg = p.foam }, + ['mkdFootnotes'] = { fg = p.foam }, + ['mkdID'] = { fg = p.foam, underline = true }, + ['mkdInlineURL'] = { fg = groups.link, underline = true }, + ['mkdLink'] = { link = 'mkdInlineURL' }, + ['mkdLinkDef'] = { link = 'mkdInlineURL' }, + ['mkdListItemLine'] = { fg = p.text }, + ['mkdRule'] = { fg = p.subtle }, + ['mkdURL'] = { link = 'mkdInlineURL' }, + + ['DiagnosticError'] = { fg = groups.error }, + ['DiagnosticHint'] = { fg = groups.hint }, + ['DiagnosticInfo'] = { fg = groups.info }, + ['DiagnosticWarn'] = { fg = groups.warn }, + ['DiagnosticDefaultError'] = { fg = groups.error }, + ['DiagnosticDefaultHint'] = { fg = groups.hint }, + ['DiagnosticDefaultInfo'] = { fg = groups.info }, + ['DiagnosticDefaultWarn'] = { fg = groups.warn }, + ['DiagnosticFloatingError'] = { fg = groups.error }, + ['DiagnosticFloatingHint'] = { fg = groups.hint }, + ['DiagnosticFloatingInfo'] = { fg = groups.info }, + ['DiagnosticFloatingWarn'] = { fg = groups.warn }, + ['DiagnosticSignError'] = { fg = groups.error }, + ['DiagnosticSignHint'] = { fg = groups.hint }, + ['DiagnosticSignInfo'] = { fg = groups.info }, + ['DiagnosticSignWarn'] = { fg = groups.warn }, + ['DiagnosticStatusLineError'] = { fg = groups.error, bg = groups.panel }, + ['DiagnosticStatusLineHint'] = { fg = groups.hint, bg = groups.panel }, + ['DiagnosticStatusLineInfo'] = { fg = groups.info, bg = groups.panel }, + ['DiagnosticStatusLineWarn'] = { fg = groups.warn, bg = groups.panel }, + ['DiagnosticUnderlineError'] = { sp = groups.error, undercurl = true }, + ['DiagnosticUnderlineHint'] = { sp = groups.hint, undercurl = true }, + ['DiagnosticUnderlineInfo'] = { sp = groups.info, undercurl = true }, + ['DiagnosticUnderlineWarn'] = { sp = groups.warn, undercurl = true }, + ['DiagnosticVirtualTextError'] = { fg = groups.error }, + ['DiagnosticVirtualTextHint'] = { fg = groups.hint }, + ['DiagnosticVirtualTextInfo'] = { fg = groups.info }, + ['DiagnosticVirtualTextWarn'] = { fg = groups.warn }, + + -- healthcheck + ['healthError'] = { fg = groups.error }, + ['healthSuccess'] = { fg = groups.info }, + ['healthWarning'] = { fg = groups.warn }, + + -- Treesitter + ['@boolean'] = { link = 'Boolean' }, + ['@character'] = { link = 'Character' }, + ['@character.special'] = { link = '@character' }, + ['@class'] = { fg = p.foam }, + ['@comment'] = { link = 'Comment' }, + ['@conditional'] = { link = 'Conditional' }, + ['@constant'] = { link = 'Constant' }, + ['@constant.builtin'] = { fg = p.love }, + ['@constant.macro'] = { link = '@constant' }, + ['@constructor'] = { fg = p.foam }, + ['@field'] = { fg = p.foam }, + ['@function'] = { link = 'Function' }, + ['@function.builtin'] = { fg = p.love }, + ['@function.macro'] = { link = '@function' }, + ['@include'] = { link = 'Include' }, + ['@interface'] = { fg = p.foam }, + ['@keyword'] = { link = 'Keyword' }, + ['@keyword.operator'] = { fg = p.subtle }, + ['@label'] = { link = 'Label' }, + ['@macro'] = { link = 'Macro' }, + ['@method'] = { fg = p.rose }, + ['@number'] = { link = 'Number' }, + ['@operator'] = { link = 'Operator' }, + ['@parameter'] = { fg = p.iris, italic = maybe.italic }, + ['@preproc'] = { link = 'PreProc' }, + ['@property'] = { fg = p.foam, italic = maybe.italic }, + ['@punctuation'] = { fg = groups.punctuation }, + ['@punctuation.bracket'] = { link = '@punctuation' }, + ['@punctuation.delimiter'] = { link = '@punctuation' }, + ['@punctuation.special'] = { link = '@punctuation' }, + ['@regexp'] = { link = 'String' }, + ['@repeat'] = { link = 'Repeat' }, + ['@storageclass'] = { link = 'StorageClass' }, + ['@string'] = { link = 'String' }, + ['@string.escape'] = { fg = p.pine }, + ['@string.special'] = { link = '@string' }, + ['@symbol'] = { link = 'Identifier' }, + ['@tag'] = { link = 'Tag' }, + ['@tag.attribute'] = { fg = p.iris }, + ['@tag.delimiter'] = { fg = p.subtle }, + ['@text'] = { fg = p.text }, + ['@text.strong'] = { bold = true }, + ['@text.emphasis'] = { italic = true }, + ['@text.underline'] = { underline = true }, + ['@text.strike'] = { strikethrough = true }, + ['@text.math'] = { link = 'Special' }, + ['@text.environment'] = { link = 'Macro' }, + ['@text.environment.name'] = { link = 'Type' }, + ['@text.title'] = { link = 'Title' }, + ['@text.uri'] = { fg = groups.link }, + ['@text.note'] = { link = 'SpecialComment' }, + ['@text.warning'] = { fg = groups.warn }, + ['@text.danger'] = { fg = groups.error }, + ['@todo'] = { link = 'Todo' }, + ['@type'] = { link = 'Type' }, + ['@variable'] = { fg = p.text, italic = maybe.italic }, + ['@variable.builtin'] = { fg = p.love }, + ['@namespace'] = { link = '@include' }, + + -- LSP Semantic Token Groups + ['@lsp.type.comment'] = {}, + ['@lsp.type.enum'] = { link = '@type' }, + ['@lsp.type.keyword'] = { link = '@keyword' }, + ['@lsp.type.interface'] = { link = '@interface' }, + ['@lsp.type.namespace'] = { link = '@namespace' }, + ['@lsp.type.parameter'] = { link = '@parameter' }, + ['@lsp.type.property'] = { link = '@property' }, + ['@lsp.type.variable'] = {}, -- use treesitter styles for regular variables + ['@lsp.typemod.function.defaultLibrary'] = { link = 'Special' }, + ['@lsp.typemod.variable.defaultLibrary'] = { link = '@variable.builtin' }, + + -- LSP Injected Groups + ['@lsp.typemod.operator.injected'] = { link = '@operator' }, + ['@lsp.typemod.string.injected'] = { link = '@string' }, + ['@lsp.typemod.variable.injected'] = { link = '@variable' }, + + -- nvim-treesitter Markdown Headings + ['@text.title.1.markdown'] = { link = 'markdownH1' }, + ['@text.title.1.marker.markdown'] = { link = 'markdownH1Delimiter' }, + ['@text.title.2.markdown'] = { link = 'markdownH2' }, + ['@text.title.2.marker.markdown'] = { link = 'markdownH2Delimiter' }, + ['@text.title.3.markdown'] = { link = 'markdownH3' }, + ['@text.title.3.marker.markdown'] = { link = 'markdownH3Delimiter' }, + ['@text.title.4.markdown'] = { link = 'markdownH4' }, + ['@text.title.4.marker.markdown'] = { link = 'markdownH4Delimiter' }, + ['@text.title.5.markdown'] = { link = 'markdownH5' }, + ['@text.title.5.marker.markdown'] = { link = 'markdownH5Delimiter' }, + ['@text.title.6.markdown'] = { link = 'markdownH6' }, + ['@text.title.6.marker.markdown'] = { link = 'markdownH6Delimiter' }, + + -- vim.lsp.buf.document_highlight() + ['LspReferenceText'] = { bg = p.highlight_med }, + ['LspReferenceRead'] = { bg = p.highlight_med }, + ['LspReferenceWrite'] = { bg = p.highlight_med }, + + -- lsp-highlight-codelens + ['LspCodeLens'] = { fg = p.subtle }, -- virtual text of code len + ['LspCodeLensSeparator'] = { fg = p.highlight_high }, -- separator between two or more code len + + -- romgrk/barbar.nvim + ['BufferCurrent'] = { fg = p.text, bg = p.overlay }, + ['BufferCurrentIndex'] = { fg = p.text, bg = p.overlay }, + ['BufferCurrentMod'] = { fg = p.foam, bg = p.overlay }, + ['BufferCurrentSign'] = { fg = p.subtle, bg = p.overlay }, + ['BufferCurrentTarget'] = { fg = p.gold, bg = p.overlay }, + ['BufferInactive'] = { fg = p.subtle }, + ['BufferInactiveIndex'] = { fg = p.subtle }, + ['BufferInactiveMod'] = { fg = p.foam }, + ['BufferInactiveSign'] = { fg = p.muted }, + ['BufferInactiveTarget'] = { fg = p.gold }, + ['BufferTabpageFill'] = { fg = groups.background, bg = groups.background }, + ['BufferVisible'] = { fg = p.subtle }, + ['BufferVisibleIndex'] = { fg = p.subtle }, + ['BufferVisibleMod'] = { fg = p.foam }, + ['BufferVisibleSign'] = { fg = p.muted }, + ['BufferVisibleTarget'] = { fg = p.gold }, + + -- lewis6991/gitsigns.nvim + ['GitSignsAdd'] = { fg = groups.git_add, bg = groups.background }, + ['GitSignsChange'] = { fg = groups.git_change, bg = groups.background }, + ['GitSignsDelete'] = { fg = groups.git_delete, bg = groups.background }, + ['SignAdd'] = { link = 'GitSignsAdd' }, + ['SignChange'] = { link = 'GitSignsChange' }, + ['SignDelete'] = { link = 'GitSignsDelete' }, + + -- mvllow/modes.nvim + ['ModesCopy'] = { bg = p.gold }, + ['ModesDelete'] = { bg = p.love }, + ['ModesInsert'] = { bg = p.foam }, + ['ModesVisual'] = { bg = p.iris }, + + -- kyazdani42/nvim-tree.lua + ['NvimTreeEmptyFolderName'] = { fg = p.muted }, + ['NvimTreeFileDeleted'] = { fg = p.love }, + ['NvimTreeFileDirty'] = { fg = p.rose }, + ['NvimTreeFileMerge'] = { fg = p.iris }, + ['NvimTreeFileNew'] = { fg = p.foam }, + ['NvimTreeFileRenamed'] = { fg = p.pine }, + ['NvimTreeFileStaged'] = { fg = p.iris }, + ['NvimTreeFolderIcon'] = { fg = p.subtle }, + ['NvimTreeFolderName'] = { fg = p.foam }, + ['NvimTreeGitDeleted'] = { fg = groups.git_delete }, + ['NvimTreeGitDirty'] = { fg = groups.git_dirty }, + ['NvimTreeGitIgnored'] = { fg = groups.git_ignore }, + ['NvimTreeGitMerge'] = { fg = groups.git_merge }, + ['NvimTreeGitNew'] = { fg = groups.git_add }, + ['NvimTreeGitRenamed'] = { fg = groups.git_rename }, + ['NvimTreeGitStaged'] = { fg = groups.git_stage }, + ['NvimTreeImageFile'] = { fg = p.text }, + ['NvimTreeNormal'] = { fg = p.text }, + ['NvimTreeOpenedFile'] = { fg = p.text, bg = p.highlight_med }, + ['NvimTreeOpenedFolderName'] = { link = 'NvimTreeFolderName' }, + ['NvimTreeRootFolder'] = { fg = p.iris }, + ['NvimTreeSpecialFile'] = { link = 'NvimTreeNormal' }, + ['NvimTreeWindowPicker'] = { fg = p.love, bg = p.love, blend = 10 }, + + -- nvim-neo-tree/neo-tree.nvim + ['NeoTreeTitleBar'] = { fg = p.surface, bg = p.pine }, + ['NeoTreeGitAdded'] = { fg = p.foam }, + ['NeoTreeGitModified'] = { fg = p.rose }, + ['NeoTreeGitDeleted'] = { fg = p.love }, + ['NeoTreeGitRenamed'] = { fg = p.pine }, + ['NeoTreeGitIgnored'] = { fg = p.muted }, + ['NeoTreeGitUntracked'] = { fg = p.gold }, + ['NeoTreeGitConflict'] = { fg = p.iris }, + + -- folke/which-key.nvim + ['WhichKey'] = { fg = p.iris }, + ['WhichKeyGroup'] = { fg = p.foam }, + ['WhichKeySeparator'] = { fg = p.subtle }, + ['WhichKeyDesc'] = { fg = p.gold }, + ['WhichKeyFloat'] = { bg = maybe.surface }, + ['WhichKeyValue'] = { fg = p.rose }, + + -- luka-reineke/indent-blankline.nvim + ['IndentBlanklineChar'] = { fg = p.muted, nocombine = true }, + ['IndentBlanklineSpaceChar'] = { fg = p.muted, nocombine = true }, + ['IndentBlanklineSpaceCharBlankline'] = { fg = p.muted, nocombine = true }, + + -- hrsh7th/nvim-cmp + ['CmpItemAbbr'] = { fg = p.subtle }, + ['CmpItemAbbrDeprecated'] = { fg = p.subtle, strikethrough = true }, + ['CmpItemAbbrMatch'] = { fg = p.text, bold = true }, + ['CmpItemAbbrMatchFuzzy'] = { fg = p.text, bold = true }, + ['CmpItemKind'] = { fg = p.subtle }, + ['CmpItemKindClass'] = { fg = p.pine }, + ['CmpItemKindFunction'] = { fg = p.rose }, + ['CmpItemKindInterface'] = { fg = p.foam }, + ['CmpItemKindMethod'] = { fg = p.iris }, + ['CmpItemKindSnippet'] = { fg = p.gold }, + ['CmpItemKindVariable'] = { fg = p.text }, + + -- TimUntersberger/neogit + ['NeogitDiffAddHighlight'] = { fg = p.foam, bg = p.highlight_med }, + ['NeogitDiffContextHighlight'] = { bg = p.highlight_low }, + ['NeogitDiffDeleteHighlight'] = { fg = p.love, bg = p.highlight_med }, + ['NeogitHunkHeader'] = { bg = p.highlight_low }, + ['NeogitHunkHeaderHighlight'] = { bg = p.highlight_low }, + + -- vimwiki/vimwiki + ['VimwikiHR'] = { fg = p.subtle }, + ['VimwikiHeader1'] = { fg = groups.headings.h1, bold = true }, + ['VimwikiHeader2'] = { fg = groups.headings.h2, bold = true }, + ['VimwikiHeader3'] = { fg = groups.headings.h3, bold = true }, + ['VimwikiHeader4'] = { fg = groups.headings.h4, bold = true }, + ['VimwikiHeader5'] = { fg = groups.headings.h5, bold = true }, + ['VimwikiHeader6'] = { fg = groups.headings.h6, bold = true }, + ['VimwikiHeaderChar'] = { fg = p.pine }, + ['VimwikiLink'] = { fg = groups.link, underline = true }, + ['VimwikiList'] = { fg = p.iris }, + ['VimwikiNoExistsLink'] = { fg = p.love }, + + -- nvim-neorg/neorg + ['NeorgHeading1Prefix'] = { fg = groups.headings.h1, bold = true }, + ['NeorgHeading1Title'] = { link = 'NeorgHeading1Prefix' }, + ['NeorgHeading2Prefix'] = { fg = groups.headings.h2, bold = true }, + ['NeorgHeading2Title'] = { link = 'NeorgHeading2Prefix' }, + ['NeorgHeading3Prefix'] = { fg = groups.headings.h3, bold = true }, + ['NeorgHeading3Title'] = { link = 'NeorgHeading3Prefix' }, + ['NeorgHeading4Prefix'] = { fg = groups.headings.h4, bold = true }, + ['NeorgHeading4Title'] = { link = 'NeorgHeading4Prefix' }, + ['NeorgHeading5Prefix'] = { fg = groups.headings.h5, bold = true }, + ['NeorgHeading5Title'] = { link = 'NeorgHeading5Prefix' }, + ['NeorgHeading6Prefix'] = { fg = groups.headings.h6, bold = true }, + ['NeorgHeading6Title'] = { link = 'NeorgHeading6Prefix' }, + ['NeorgMarkerTitle'] = { fg = p.text, bold = true }, + + -- tami5/lspsaga.nvim (fork of glepnir/lspsaga.nvim) + ['DefinitionCount'] = { fg = p.rose }, + ['DefinitionIcon'] = { fg = p.rose }, + ['DefintionPreviewTitle'] = { fg = p.rose, bold = true }, + ['LspFloatWinBorder'] = { fg = groups.border }, + ['LspFloatWinNormal'] = { bg = maybe.surface }, + ['LspSagaAutoPreview'] = { fg = p.subtle }, + ['LspSagaCodeActionBorder'] = { fg = groups.border }, + ['LspSagaCodeActionContent'] = { fg = p.foam }, + ['LspSagaCodeActionTitle'] = { fg = p.gold, bold = true }, + ['LspSagaCodeActionTruncateLine'] = { link = 'LspSagaCodeActionBorder' }, + ['LspSagaDefPreviewBorder'] = { fg = groups.border }, + ['LspSagaDiagnosticBorder'] = { fg = groups.border }, + ['LspSagaDiagnosticHeader'] = { fg = p.gold, bold = true }, + ['LspSagaDiagnosticTruncateLine'] = { link = 'LspSagaDiagnosticBorder' }, + ['LspSagaDocTruncateLine'] = { link = 'LspSagaHoverBorder' }, + ['LspSagaFinderSelection'] = { fg = p.gold }, + ['LspSagaHoverBorder'] = { fg = groups.border }, + ['LspSagaLspFinderBorder'] = { fg = groups.border }, + ['LspSagaRenameBorder'] = { fg = p.pine }, + ['LspSagaRenamePromptPrefix'] = { fg = p.love }, + ['LspSagaShTruncateLine'] = { link = 'LspSagaSignatureHelpBorder' }, + ['LspSagaSignatureHelpBorder'] = { fg = p.pine }, + ['ReferencesCount'] = { fg = p.rose }, + ['ReferencesIcon'] = { fg = p.rose }, + ['SagaShadow'] = { bg = p.overlay }, + ['TargetWord'] = { fg = p.iris }, + + -- ray-x/lsp_signature.nvim + ['LspSignatureActiveParameter'] = { bg = p.overlay }, + + -- rlane/pounce.nvim + ['PounceAccept'] = { fg = p.love, bg = p.highlight_high }, + ['PounceAcceptBest'] = { fg = p.base, bg = p.gold }, + ['PounceGap'] = { link = 'Search' }, + ['PounceMatch'] = { link = 'Search' }, + + -- ggandor/leap.nvim + ['LeapMatch'] = { link = 'MatchParen' }, + ['LeapLabelPrimary'] = { link = 'IncSearch' }, + ['LeapLabelSecondary'] = { fg = p.base, bg = p.pine }, + + -- phaazon/hop.nvim + ['HopNextKey'] = { fg = p.love }, + ['HopNextKey1'] = { fg = p.foam }, + ['HopNextKey2'] = { fg = p.pine }, + ['HopUnmatched'] = { fg = p.highlight_high }, + + -- nvim-telescope/telescope.nvim + ['TelescopeBorder'] = { fg = groups.border, bg = float_background }, + ['TelescopeMatching'] = { fg = p.rose }, + ['TelescopeNormal'] = { fg = p.subtle, bg = float_background }, + ['TelescopePromptNormal'] = { fg = p.text, bg = float_background }, + ['TelescopePromptPrefix'] = { fg = p.subtle }, + ['TelescopeSelection'] = { fg = p.text, bg = p.overlay }, + ['TelescopeSelectionCaret'] = { fg = p.rose, bg = p.overlay }, + ['TelescopeTitle'] = { fg = p.subtle }, + + -- ibhagwan/fzf-lua + ['FzfLuaNormal'] = { fg = p.subtle, bg = float_background }, + ['FzfLuaTitle'] = { fg = p.subtle }, + ['FzfLuaBorder'] = { fg = groups.border, bg = float_background }, + ['FzfLuaHeaderText'] = { fg = p.love }, + ['FzfLuaHeaderBind'] = { fg = p.rose }, + ['FzfLuaBufFlagCur'] = { fg = p.subtle }, + ['FzfLuaBufFlagAlt'] = { fg = p.subtle }, + + -- rcarriga/nvim-notify + ['NotifyINFOBorder'] = { fg = p.foam }, + ['NotifyINFOTitle'] = { link = 'NotifyINFOBorder' }, + ['NotifyINFOIcon'] = { link = 'NotifyINFOBorder' }, + ['NotifyWARNBorder'] = { fg = p.gold }, + ['NotifyWARNTitle'] = { link = 'NotifyWARNBorder' }, + ['NotifyWARNIcon'] = { link = 'NotifyWARNBorder' }, + ['NotifyDEBUGBorder'] = { fg = p.muted }, + ['NotifyDEBUGTitle'] = { link = 'NotifyDEBUGBorder' }, + ['NotifyDEBUGIcon'] = { link = 'NotifyDEBUGBorder' }, + ['NotifyTRACEBorder'] = { fg = p.iris }, + ['NotifyTRACETitle'] = { link = 'NotifyTRACEBorder' }, + ['NotifyTRACEIcon'] = { link = 'NotifyTRACEBorder' }, + ['NotifyERRORBorder'] = { fg = p.love }, + ['NotifyERRORTitle'] = { link = 'NotifyERRORBorder' }, + ['NotifyERRORIcon'] = { link = 'NotifyERRORBorder' }, + + -- rcarriga/nvim-dap-ui + ['DapUIVariable'] = { link = 'Normal' }, + ['DapUIValue'] = { link = 'Normal' }, + ['DapUIFrameName'] = { link = 'Normal' }, + ['DapUIThread'] = { fg = p.gold }, + ['DapUIWatchesValue'] = { link = 'DapUIThread' }, + ['DapUIBreakpointsInfo'] = { link = 'DapUIThread' }, + ['DapUIBreakpointsCurrentLine'] = { fg = p.gold, bold = true }, + ['DapUIWatchesEmpty'] = { fg = p.love }, + ['DapUIWatchesError'] = { link = 'DapUIWatchesEmpty' }, + ['DapUIBreakpointsDisabledLine'] = { fg = p.muted }, + ['DapUISource'] = { fg = p.iris }, + ['DapUIBreakpointsPath'] = { fg = p.foam }, + ['DapUIScope'] = { link = 'DapUIBreakpointsPath' }, + ['DapUILineNumber'] = { link = 'DapUIBreakpointsPath' }, + ['DapUIBreakpointsLine'] = { link = 'DapUIBreakpointsPath' }, + ['DapUIFloatBorder'] = { link = 'DapUIBreakpointsPath' }, + ['DapUIStoppedThread'] = { link = 'DapUIBreakpointsPath' }, + ['DapUIDecoration'] = { link = 'DapUIBreakpointsPath' }, + ['DapUIModifiedValue'] = { fg = p.foam, bold = true }, + + -- glepnir/dashboard-nvim + ['DashboardShortcut'] = { fg = p.love }, + ['DashboardHeader'] = { fg = p.pine }, + ['DashboardCenter'] = { fg = p.gold }, + ['DashboardFooter'] = { fg = p.iris }, + + -- SmiteshP/nvim-navic + ['NavicIconsFile'] = { fg = p.base }, + ['NavicIconsModule'] = { fg = p.rose }, + ['NavicIconsNamespace'] = { fg = p.base }, + ['NavicIconsPackage'] = { fg = p.base }, + ['NavicIconsClass'] = { fg = p.foam }, + ['NavicIconsMethod'] = { fg = p.iris }, + ['NavicIconsProperty'] = { fg = p.foam }, + ['NavicIconsField'] = { fg = p.foam }, + ['NavicIconsConstructor'] = { fg = p.gold }, + ['NavicIconsEnum'] = { fg = p.gold }, + ['NavicIconsInterface'] = { fg = p.foam }, + ['NavicIconsFunction'] = { fg = p.pine }, + ['NavicIconsVariable'] = { fg = p.text }, + ['NavicIconsConstant'] = { fg = p.gold }, + ['NavicIconsString'] = { fg = p.gold }, + ['NavicIconsNumber'] = { fg = p.gold }, + ['NavicIconsBoolean'] = { fg = p.rose }, + ['NavicIconsArray'] = { fg = p.gold }, + ['NavicIconsObject'] = { fg = p.gold }, + ['NavicIconsKey'] = { fg = p.iris }, + ['NavicIconsKeyword'] = { fg = p.pine }, + ['NavicIconsNull'] = { fg = p.love }, + ['NavicIconsEnumMember'] = { fg = p.foam }, + ['NavicIconsStruct'] = { fg = p.foam }, + ['NavicIconsEvent'] = { fg = p.gold }, + ['NavicIconsOperator'] = { fg = p.subtle }, + ['NavicIconsTypeParameter'] = { fg = p.foam }, + ['NavicText'] = { fg = p.subtle }, + ['NavicSeparator'] = { fg = p.subtle }, + + -- folke/noice.nvim + ['NoiceCursor'] = { fg = p.highlight_high, bg = p.text }, + + -- echasnovski/mini.indentscope + ['MiniIndentscopeSymbol'] = { fg = p.highlight_med }, + ['MiniIndentscopeSymbolOff'] = { fg = p.highlight_med }, + + -- goolord/alpha-nvim + ['AlphaHeader'] = { fg = p.pine }, + ['AlphaButtons'] = { fg = p.foam }, + ['AlphaShortcut'] = { fg = p.rose }, + ['AlphaFooter'] = { fg = p.gold }, + } + + vim.g.terminal_color_0 = p.overlay -- black + vim.g.terminal_color_8 = p.subtle -- bright black + vim.g.terminal_color_1 = p.love -- red + vim.g.terminal_color_9 = p.love -- bright red + vim.g.terminal_color_2 = p.pine -- green + vim.g.terminal_color_10 = p.pine -- bright green + vim.g.terminal_color_3 = p.gold -- yellow + vim.g.terminal_color_11 = p.gold -- bright yellow + vim.g.terminal_color_4 = p.foam -- blue + vim.g.terminal_color_12 = p.foam -- bright blue + vim.g.terminal_color_5 = p.iris -- magenta + vim.g.terminal_color_13 = p.iris -- bright magenta + vim.g.terminal_color_6 = p.rose -- cyan + vim.g.terminal_color_14 = p.rose -- bright cyan + vim.g.terminal_color_7 = p.text -- white + vim.g.terminal_color_15 = p.text -- bright white + + -- Set users highlight_group customisations. + for group, opts in pairs(options.highlight_groups) do + local default_opts = M.defaults[group] + + if (opts.inherit == nil or opts.inherit) and default_opts ~= nil then -- On merge. + opts.inherit = nil -- Don't add this key to the highlight_group after merge. + M.defaults[group] = vim.tbl_extend('force', default_opts, opts) + else -- On overwrite. + opts.inherit = nil -- Don't add this key to the highlight_group. + M.defaults[group] = opts + end + end + + -- Set highlights. + for group, color in pairs(M.defaults) do + h(group, color) + end +end + +return M diff --git a/lua/rose-pine/util.lua b/lua/rose-pine/util.lua new file mode 100644 index 0000000..f8b84f9 --- /dev/null +++ b/lua/rose-pine/util.lua @@ -0,0 +1,71 @@ +local util = {} + +local function byte(value, offset) + return bit.band(bit.rshift(value, offset), 0xFF) +end + +local function rgb(color) + color = vim.api.nvim_get_color_by_name(color) + + if color == -1 then + color = vim.opt.background:get() == 'dark' and 000 or 255255255 + end + + return { byte(color, 16), byte(color, 8), byte(color, 0) } +end + +local function parse_color(color) + if color == nil then + return print('invalid color') + end + + color = color:lower() + + if not color:find('#') and color ~= 'none' then + color = require('rose-pine.palette')[color] + or vim.api.nvim_get_color_by_name(color) + end + + return color +end + +---@param fg string foreground color +---@param bg string background color +---@param alpha number number between 0 (background) and 1 (foreground) +util.blend = function(fg, bg, alpha) + local fg_rgb = rgb(parse_color(fg)) + local bg_rgb = rgb(parse_color(bg)) + + local function blend_channel(i) + local ret = (alpha * fg_rgb[i] + ((1 - alpha) * bg_rgb[i])) + return math.floor(math.min(math.max(0, ret), 255) + 0.5) + end + + return string.format( + '#%02X%02X%02X', + blend_channel(1), + blend_channel(2), + blend_channel(3) + ) +end + +---@param group string +---@param color table +util.highlight = function(group, color) + local fg = color.fg and parse_color(color.fg) or 'none' + local bg = color.bg and parse_color(color.bg) or 'none' + local sp = color.sp and parse_color(color.sp) or '' + + if + color.blend ~= nil + and (color.blend >= 0 or color.blend <= 100) + and bg ~= nil + then + bg = util.blend(bg, parse_color('base') or '', color.blend / 100) + end + + color = vim.tbl_extend('force', color, { fg = fg, bg = bg, sp = sp }) + vim.api.nvim_set_hl(0, group, color) +end + +return util diff --git a/lua/rose-pine/utilities.lua b/lua/rose-pine/utilities.lua deleted file mode 100644 index 32a8575..0000000 --- a/lua/rose-pine/utilities.lua +++ /dev/null @@ -1,65 +0,0 @@ -local utilities = {} - ----@param color string -local function color_to_rgb(color) - local function byte(value, offset) - return bit.band(bit.rshift(value, offset), 0xFF) - end - - local new_color = vim.api.nvim_get_color_by_name(color) - if new_color == -1 then - new_color = vim.opt.background:get() == "dark" and 000 or 255255255 - end - - return { byte(new_color, 16), byte(new_color, 8), byte(new_color, 0) } -end - -local color_cache = {} - ----@param color string Palette key or hex value -function utilities.parse_color(color) - if color_cache[color] then - return color_cache[color] - end - - if color == nil then - print("Invalid color: " .. color) - return nil - end - - color = color:lower() - - if not color:find("#") and color ~= "NONE" then - color = require("rose-pine.palette")[color] or vim.api.nvim_get_color_by_name(color) - end - - color_cache[color] = color - return color -end - -local blend_cache = {} - ----@param fg string Foreground color ----@param bg string Background color ----@param alpha number Between 0 (background) and 1 (foreground) -function utilities.blend(fg, bg, alpha) - local cache_key = fg .. bg .. alpha - if blend_cache[cache_key] then - return blend_cache[cache_key] - end - - local fg_rgb = color_to_rgb(fg) - local bg_rgb = color_to_rgb(bg) - - local function blend_channel(i) - local ret = (alpha * fg_rgb[i] + ((1 - alpha) * bg_rgb[i])) - return math.floor(math.min(math.max(0, ret), 255) + 0.5) - end - - local result = string.format("#%02X%02X%02X", blend_channel(1), blend_channel(2), blend_channel(3)) - - blend_cache[cache_key] = result - return result -end - -return utilities diff --git a/readme.md b/readme.md index 6ef48bc..ed6d466 100644 --- a/readme.md +++ b/readme.md @@ -11,35 +11,30 @@

-## Getting started +## Install -Install `rose-pine/neovim` using your favourite package manager: - -### [pam.nvim](https://github.com/mvllow/pam.nvim) +**[Paq](https://github.com/savq/paq-nvim)** ```lua -{ source = "rose-pine/neovim", as = "rose-pine" } +require('paq')({ + { 'rose-pine/neovim', as = 'rose-pine' } +}) ``` -### [lazy.nvim](https://lazy.folke.io/installation) - -**Structured Setup** +**[lazy.nvim](https://github.com/folke/lazy.nvim)** ```lua --- lua/plugins/rose-pine.lua -return { - "rose-pine/neovim", - name = "rose-pine", - config = function() - vim.cmd("colorscheme rose-pine") - end -} +require("lazy").setup({ + { 'rose-pine/neovim', name = 'rose-pine' } +}) ``` -**Single file** +**[packer.nvim](https://github.com/wbthomason/packer.nvim)** ```lua -{ "rose-pine/neovim", name = "rose-pine" } +require('packer').startup(function(use) + use({ 'rose-pine/neovim', as = 'rose-pine' }) +end) ``` ## Gallery @@ -58,104 +53,75 @@ return { ## Options -> [!IMPORTANT] -> Configure options _before_ setting colorscheme. +> [!NOTE] +> Options should be set **before** colorscheme -Rosé Pine has three variants: main, moon, and dawn. By default, `vim.o.background` is followed, using dawn when light and `dark_variant` when dark. - -Colour values accept named colours from the [Rosé Pine palette](https://rosepinetheme.com/palette/ingredients/), e.g. "foam", or valid hex, e.g. "#fa8072". +Variant respects `vim.o.background`, using dawn when light and `dark_variant` when dark ```lua -require("rose-pine").setup({ - variant = "auto", -- auto, main, moon, or dawn - dark_variant = "main", -- main, moon, or dawn - dim_inactive_windows = false, - extend_background_behind_borders = true, +require('rose-pine').setup({ + --- @usage 'auto'|'main'|'moon'|'dawn' + variant = 'auto', + --- @usage 'main'|'moon'|'dawn' + dark_variant = 'main', + bold_vert_split = false, + dim_nc_background = false, + disable_background = false, + disable_float_background = false, + disable_italics = false, - enable = { - terminal = true, - legacy_highlights = true, -- Improve compatibility for previous versions of Neovim - migrations = true, -- Handle deprecated options automatically - }, + --- @usage string hex value or named color from rosepinetheme.com/palette + groups = { + background = 'base', + background_nc = '_experimental_nc', + panel = 'surface', + panel_nc = 'base', + border = 'highlight_med', + comment = 'muted', + link = 'iris', + punctuation = 'subtle', - styles = { - bold = true, - italic = true, - transparency = false, - }, + error = 'love', + hint = 'iris', + info = 'foam', + warn = 'gold', - groups = { - border = "muted", - link = "iris", - panel = "surface", + headings = { + h1 = 'iris', + h2 = 'foam', + h3 = 'rose', + h4 = 'gold', + h5 = 'pine', + h6 = 'foam', + } + -- or set all headings at once + -- headings = 'subtle' + }, - error = "love", - hint = "iris", - info = "foam", - note = "pine", - todo = "rose", - warn = "gold", + -- Change specific vim highlight groups + -- https://github.com/rose-pine/neovim/wiki/Recipes + highlight_groups = { + ColorColumn = { bg = 'rose' }, - git_add = "foam", - git_change = "rose", - git_delete = "love", - git_dirty = "rose", - git_ignore = "muted", - git_merge = "iris", - git_rename = "pine", - git_stage = "iris", - git_text = "rose", - git_untracked = "subtle", + -- Blend colours against the "base" background + CursorLine = { bg = 'foam', blend = 10 }, + StatusLine = { fg = 'love', bg = 'love', blend = 10 }, - h1 = "iris", - h2 = "foam", - h3 = "rose", - h4 = "gold", - h5 = "pine", - h6 = "foam", - }, - - palette = { - -- Override the builtin palette per variant - -- moon = { - -- base = '#18191a', - -- overlay = '#363738', - -- }, - }, - - -- NOTE: Highlight groups are extended (merged) by default. Disable this - -- per group via `inherit = false` - highlight_groups = { - -- Comment = { fg = "foam" }, - -- StatusLine = { fg = "love", bg = "love", blend = 15 }, - -- VertSplit = { fg = "muted", bg = "muted" }, - -- Visual = { fg = "base", bg = "text", inherit = false }, - }, - - before_highlight = function(group, highlight, palette) - -- Disable all undercurls - -- if highlight.undercurl then - -- highlight.undercurl = false - -- end - -- - -- Change palette colour - -- if highlight.fg == palette.pine then - -- highlight.fg = palette.foam - -- end - end, + -- By default each group adds to the existing config. + -- If you only want to set what is written in this config exactly, + -- you can set the inherit option: + Search = { bg = 'gold', inherit = false }, + } }) -vim.cmd("colorscheme rose-pine") --- vim.cmd("colorscheme rose-pine-main") --- vim.cmd("colorscheme rose-pine-moon") --- vim.cmd("colorscheme rose-pine-dawn") +-- Set colorscheme after options +vim.cmd('colorscheme rose-pine') ``` -> [!NOTE] -> Visit the [wiki](https://github.com/rose-pine/neovim/wiki) for [plugin configurations](https://github.com/rose-pine/neovim/wiki/Plugin-configurations) and [recipes](https://github.com/rose-pine/neovim/wiki/Recipes). - ## Contributing -We welcome and appreciate contributions of any kind. Create an issue or start a discussion for any proposed changes. Pull requests are encouraged for supporting additional plugins or [treesitter improvements](https://github.com/nvim-treesitter/nvim-treesitter/blob/master/CONTRIBUTING.md#highlights). +We welcome and appreciate any help in creating a lovely experience for all. -Feel free to update the [wiki](https://github.com/rose-pine/neovim/wiki/) with any [recipes](https://github.com/rose-pine/neovim/wiki/Recipes). +- Get highlight groups under cursor via `:Inspect` in Neovim 0.9 or [nvim-treesitter/playground](https://github.com/nvim-treesitter/playground#show-treesitter-and-syntax-highlight-groups-under-the-cursor) +- [Adding new highlight groups](https://github.com/rose-pine/neovim/issues/6#issuecomment-962466323) +- [Palette reference by name](https://rosepinetheme.com/palette)