diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 4cee468b..cd690626 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -15,30 +15,14 @@ body: required: true - type: input attributes: - label: "Terminal" - placeholder: "Kitty" + label: "Terminal / multiplexer" + placeholder: "Kitty / tmux" validations: required: true - type: textarea attributes: label: Describe the bug - 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. + description: A clear and concise description of what the bug is. Please include screenshots if possible and any related errors you see in Neovim. validations: required: true - type: textarea @@ -61,7 +45,7 @@ body: end require("rose-pine").setup({ - -- ADD ROSÉ PINE CONFIG THAT IS _NECESSARY_ FOR REPRODUCING THE ISSUE + -- ADD ROSÉ PINE CONFIG THAT IS _NECESSARY_ TO REPRODUCE THE ISSUE }) vim.cmd("colorscheme rose-pine") diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 2b45cdb8..bd9d3f67 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -3,24 +3,12 @@ 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 deleted file mode 100644 index 9d5f2474..00000000 --- a/.stylua.toml +++ /dev/null @@ -1,4 +0,0 @@ -column_width = 80 -indent_type = "Tabs" -line_endings = "Unix" -quote_style = "AutoPreferSingle" diff --git a/changelog.md b/changelog.md new file mode 100644 index 00000000..bd583ba1 --- /dev/null +++ b/changelog.md @@ -0,0 +1,82 @@ +# 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 3ce16803..a95b327d 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 e09c69de..15729c96 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 7196100f..34b58c0e 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 71f155fb..f7052907 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 1e1ee362..05d8af74 100644 --- a/lua/lualine/themes/rose-pine-alt.lua +++ b/lua/lualine/themes/rose-pine-alt.lua @@ -1,26 +1,26 @@ -local p = require('rose-pine.palette') +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 = p.base, fg = p.subtle, gui = 'bold' }, + 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' }, + 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 dde30751..96d6b92b 100644 --- a/lua/lualine/themes/rose-pine.lua +++ b/lua/lualine/themes/rose-pine.lua @@ -1,33 +1,33 @@ -local p = require('rose-pine.palette') +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 = 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 = 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 = 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 = 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 = p.base, fg = p.text }, }, inactive = { - a = { bg = p.base, fg = p.muted, gui = 'bold' }, + 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 b3cf3ea9..d45d4afa 100644 --- a/lua/rose-pine.lua +++ b/lua/rose-pine.lua @@ -1,22 +1,668 @@ -local config = require('rose-pine.config') local M = {} +local config = require("rose-pine.config") ----@param variant Variant|nil +local function set_highlights() + local utilities = require("rose-pine.utilities") + local palette = require("rose-pine.palette") + local styles = config.options.styles + local groups = config.options.groups + + local function make_border(fg) + fg = fg or groups.border + return { fg = fg, bg = config.options.extend_background_behind_borders and palette.surface or "NONE" } + end + + local function make_title(fg) + fg = fg or palette.foam + return { fg = styles.bold and palette.text or fg, bold = styles.bold } + end + + local 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 = 20 }, + diffAdded = { link = "DiffAdd" }, + diffChanged = { link = "DiffChange" }, + diffRemoved = { link = "DiffDelete" }, + Directory = make_title(), + -- EndOfBuffer = {}, + ErrorMsg = { fg = groups.error, bold = styles.bold }, + FloatBorder = make_border(), + FloatTitle = { link = "Directory" }, + 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.title, bg = palette.overlay }, + PmenuThumb = { bg = palette.muted }, + Question = { fg = palette.gold }, + -- QuickFixLink = {}, + -- 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.base, bg = palette.text }, + 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 = { link = "StatusLine" }, + TabLineFill = { bg = groups.panel }, + TabLineSel = { fg = palette.text, bg = palette.overlay, bold = styles.bold }, + Title = make_title(), + VertSplit = make_border(), + Visual = { bg = palette.highlight_med }, + -- VisualNOS = {}, + WarningMsg = { fg = groups.warn, bold = styles.bold }, + -- Whitespace = {}, + WildMenu = { link = "IncSearch" }, + WinSeparator = make_border(), + + DiagnosticError = { fg = groups.error }, + DiagnosticHint = { fg = groups.hint }, + DiagnosticInfo = { fg = groups.info }, + DiagnosticWarn = { fg = groups.warn }, + DiagnosticDefaultError = { link = "DiagnosticError" }, + DiagnosticDefaultHint = { link = "DiagnosticHint" }, + DiagnosticDefaultInfo = { link = "DiagnosticInfo" }, + DiagnosticDefaultWarn = { link = "DiagnosticWarn" }, + DiagnosticFloatingError = { link = "DiagnosticError" }, + DiagnosticFloatingHint = { link = "DiagnosticHint" }, + DiagnosticFloatingInfo = { link = "DiagnosticInfo" }, + DiagnosticFloatingWarn = { link = "DiagnosticWarn" }, + DiagnosticSignError = { link = "DiagnosticError" }, + DiagnosticSignHint = { link = "DiagnosticHint" }, + DiagnosticSignInfo = { link = "DiagnosticInfo" }, + DiagnosticSignWarn = { link = "DiagnosticWarn" }, + 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, bg = groups.error, blend = 10 }, + DiagnosticVirtualTextHint = { fg = groups.hint, bg = groups.hint, blend = 10 }, + DiagnosticVirtualTextInfo = { fg = groups.info, bg = groups.info, 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 }, + PreConduit = { fg = palette.iris }, + PreProc = { link = "PreConduit" }, + 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.iris, bg = palette.iris, 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.headings.h1, bold = styles.bold }, + markdownH1Delimiter = { link = "markdownH1" }, + markdownH2 = { fg = groups.headings.h2, bold = styles.bold }, + markdownH2Delimiter = { link = "markdownH2" }, + markdownH3 = { fg = groups.headings.h3, bold = styles.bold }, + markdownH3Delimiter = { link = "markdownH3" }, + markdownH4 = { fg = groups.headings.h4, bold = styles.bold }, + markdownH4Delimiter = { link = "markdownH4" }, + markdownH5 = { fg = groups.headings.h5, bold = styles.bold }, + markdownH5Delimiter = { link = "markdownH5" }, + markdownH6 = { fg = groups.headings.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" }, + + ["@attribute.diff"] = { fg = palette.gold }, + ["@boolean"] = { link = "Boolean" }, + ["@character"] = { link = "Character" }, + ["@character.special"] = { link = "Character" }, + ["@class"] = { fg = palette.foam }, + ["@comment"] = { link = "Comment" }, + ["@conditional"] = { link = "Conditional" }, + ["@constant"] = { link = "Constant" }, + ["@constant.builtin"] = { fg = palette.love }, + ["@constant.macro"] = { link = "Constant" }, + ["@constructor"] = { fg = palette.foam }, + ["@field"] = { fg = palette.foam }, + ["@function"] = { link = "Function" }, + ["@function.builtin"] = { fg = palette.love }, + ["@function.macro"] = { link = "Function" }, + ["@include"] = { link = "Include" }, + ["@interface"] = { fg = palette.foam }, + ["@keyword"] = { link = "Keyword" }, + ["@keyword.operator"] = { fg = palette.subtle }, + ["@label"] = { link = "Label" }, + ["@lsp.type.comment"] = {}, + ["@lsp.type.enum"] = { link = "Type" }, + ["@lsp.type.interface"] = { link = "@interface" }, + ["@lsp.type.keyword"] = { link = "Keyword" }, + ["@lsp.type.namespace"] = { link = "@namespace" }, + ["@lsp.type.parameter"] = { link = "@parameter" }, + ["@lsp.type.property"] = { link = "@property" }, + ["@lsp.type.variable"] = {}, + ["@lsp.typemod.function.defaultLibrary"] = { link = "Special" }, + ["@lsp.typemod.operator.injected"] = { link = "Operator" }, + ["@lsp.typemod.string.injected"] = { link = "String" }, + ["@lsp.typemod.variable.defaultLibrary"] = { link = "@variable.builtin" }, + ["@lsp.typemod.variable.injected"] = { link = "@variable" }, + ["@macro"] = { link = "Macro" }, + ["@method"] = { fg = palette.rose }, + ["@namespace"] = { link = "Include" }, + ["@number"] = { link = "Number" }, + ["@operator"] = { link = "Operator" }, + ["@parameter"] = { fg = palette.iris, italic = styles.italic }, + ["@preproc"] = { link = "PreProc" }, + ["@property"] = { fg = palette.foam, italic = styles.italic }, + ["@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" }, + ["@string"] = { link = "String" }, + ["@string.escape"] = { fg = palette.pine }, + ["@string.special"] = { link = "String" }, + ["@symbol"] = { link = "Identifier" }, + ["@tag"] = { link = "Tag" }, + ["@tag.attribute"] = { fg = palette.iris }, + ["@tag.delimiter"] = { fg = palette.subtle }, + ["@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" }, + ["@type"] = { link = "Type" }, + ["@variable"] = { fg = palette.text, italic = styles.italic }, + ["@variable.builtin"] = { fg = palette.love }, + + -- 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 = { link = "SignAdd" }, + GitSignsChange = { link = "SignChange" }, + GitSignsDelete = { link = "SignDelete" }, + 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 }, + ModesInsert = { bg = palette.foam }, + 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 = make_title(), + NvimTreeSpecialFile = { link = "NvimTreeNormal" }, + NvimTreeWindowPicker = { link = "StatusLineTerm" }, + + -- 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 }, + NeoTreeTitleBar = { link = "StatusLineTerm" }, + + -- folke/which-key.nvim + WhichKey = { fg = palette.iris }, + WhichKeyDesc = { fg = palette.gold }, + WhichKeyFloat = { bg = groups.panel }, + WhichKeyGroup = { fg = palette.foam }, + WhichKeySeparator = { fg = palette.subtle }, + WhichKeyValue = { fg = palette.rose }, + + -- luka-reineke/indent-blankline.nvim + IndentBlanklineChar = { fg = palette.muted, nocombine = true }, + IndentBlanklineSpaceChar = { fg = palette.muted, nocombine = true }, + IndentBlanklineSpaceCharBlankline = { fg = palette.muted, nocombine = true }, + + -- 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" }, + + -- TimUntersberger/neogit + NeogitDiffAddHighlight = { link = "DiffAdd" }, + NeogitDiffContextHighlight = { bg = palette.surface }, + NeogitDiffDeleteHighlight = { link = "DiffDelete" }, + 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 = make_title(), + + -- tami5/lspsaga.nvim (fork of glepnir/lspsaga.nvim) + DefinitionCount = { fg = palette.rose }, + DefinitionIcon = { fg = palette.rose }, + DefintionPreviewTitle = { 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 = make_title(), + 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 = make_title(), + + -- ibhagwan/fzf-lua + FzfLuaNormal = { link = "NormalFloat" }, + FwzfLuaTitle = make_title(), + FzfLuaBorder = make_border(), + FzfLuaHeaderText = { fg = palette.love }, + FzfLuaHeaderBind = { fg = palette.rose }, + FzfLuaBufFlagCur = { fg = palette.subtle }, + FzfLuaBufFlagAlt = { fg = palette.subtle }, + + -- rcarriga/nvim-notify + NotifyDEBUGBorder = make_border(), + NotifyDEBUGIcon = { link = "NotifyDEBUGTitle" }, + NotifyDEBUGTitle = { fg = palette.muted }, + NotifyERRORBorder = make_border(groups.error), + NotifyERRORIcon = { link = "NotifyERRORTitle" }, + NotifyERRORTitle = { fg = groups.error }, + NotifyINFOBorder = make_border(groups.info), + NotifyINFOIcon = { link = "NotifyINFOTitle" }, + NotifyINFOTitle = { fg = groups.info }, + NotifyTRACEBorder = make_border(palette.iris), + NotifyTRACEIcon = { link = "NotifyTRACETitle" }, + NotifyTRACETitle = { fg = palette.iris }, + 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 }, + 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 }, + + -- echasnovski/mini.indentscope + MiniIndentscopeSymbol = { fg = palette.muted }, + MiniIndentscopeSymbolOff = { fg = palette.muted }, + + -- 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 }, + } + + local transparency_highlights = { + DiagnosticVirtualTextError = { fg = groups.error }, + DiagnosticVirtualTextHint = { fg = groups.hint }, + DiagnosticVirtualTextInfo = { fg = groups.info }, + DiagnosticVirtualTextWarn = { fg = groups.warn }, + + FloatBorder = { fg = palette.muted, bg = "NONE" }, + Folded = { fg = palette.text, bg = "NONE" }, + NormalFloat = { 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" }, + TabLineFill = { bg = "NONE" }, + TabLineSel = { fg = palette.text, bg = "NONE", bold = styles.bold }, + + 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, bg = palette.rose }, + + WhichKeyFloat = { bg = "NONE" }, + } + + if styles.transparency then + for group, highlight in pairs(transparency_highlights) do + highlights[group] = highlight + end + end + + for group, options in pairs(config.options.highlight_groups) do + highlights[group] = vim.tbl_extend("force", highlights[group] or {}, options) + end + + for group, highlight in pairs(highlights) do + config.options.before_highlight(group, highlight, palette) + utilities.highlight(group, highlight) + end + + 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([[ + autocmd TermOpen * if &buftype=='terminal' + \|setlocal winhighlight=StatusLine:StatusLineTerm,StatusLineNC:StatusLineTermNC + \|else|setlocal winhighlight=|endif + ]]) + end +end + +---@param variant Variant | nil function M.colorscheme(variant) - config.extend({ variant = variant }) + config.extend_options({ 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" - require('rose-pine.theme')._load(config.options) + set_highlights() end +---@param options Options function M.setup(options) - config.extend(options) + config.extend_options(options or {}) end return M diff --git a/lua/rose-pine/config.lua b/lua/rose-pine/config.lua index 58674d76..6fc0774a 100644 --- a/lua/rose-pine/config.lua +++ b/lua/rose-pine/config.lua @@ -1,68 +1,156 @@ ---@alias Variant "main" | "moon" | "dawn" ----@alias Color { fg: string, bg: string, sp: string, bold: boolean, italic: boolean, undercurl: boolean, underline: boolean, underdouble: boolean, underdotted: boolean, underdashed: boolean, strikethrough: boolean } +---@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 { fg: string, bg: string, sp: string, bold: boolean, italic: boolean, undercurl: boolean, underline: boolean, underdouble: boolean, underdotted: boolean, underdashed: boolean, strikethrough: boolean } -local M = {} +local config = {} ---@class Options -M.options = { +config.options = { ---Set the desired variant: "auto" will follow the vim background, - ---defaulting to "main" for dark and "dawn" for light. To change the dark - ---variant, use `options.dark_variant = "moon"`. + ---defaulting to `dark_variant` or "main" for dark and "dawn" for light. ---@type "auto" | Variant - variant = 'auto', + variant = "auto", - ---Set the desired dark variant: applies when `options.variant` is set to - ---"auto" to match `vim.o.background`. + ---Set the desired dark variant when `options.variant` is set to "auto". ---@type Variant - dark_variant = 'main', + dark_variant = "main", - bold_vert_split = false, + ---Differentiate between active and inactive windows and panels. + dim_inactive_windows = false, - dim_nc_background = false, + ---Extend background behind borders. Appearance differs based on which + ---border characters you are using. + extend_background_behind_borders = false, - disable_background = false, - disable_float_background = false, - disable_italics = false, + enable = { + terminal = true, + migrations = true, + }, + + styles = { + bold = true, + italic = true, + transparency = false, + }, + ---@type table groups = { - 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', + border = "muted", + link = "iris", + panel = "surface", + + 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", + git_untracked = "subtle", + + ---@type string | PaletteColor | table headings = { - h1 = 'iris', - h2 = 'foam', - h3 = 'rose', - h4 = 'gold', - h5 = 'pine', - h6 = 'foam', + h1 = "iris", + h2 = "foam", + h3 = "rose", + h4 = "gold", + h5 = "pine", + h6 = "foam", }, + + ---@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", }, - ---@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 } ----@param options Options|nil -function M.extend(options) - M.options = vim.tbl_deep_extend('force', M.options, options or {}) +local function migrate(options) + if options.bold_vert_split then + options.highlight_groups["VertSplit"] = { fg = "muted", bg = "muted" } + 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 or options.styles.transparency + + -- These never actually existed, but may be set intuitively by the user + -- because of `disable_italics` existing. + options.styles.bold = (options.disable_bold or options.disable_bolds) and false or options.styles.bold + + -- Similar to bold options, `disable_italic` never existed but could be a + -- common typo of the actual `disable_italics`. + options.styles.italic = (options.disable_italic or options.disable_italics) and false or options.styles.italic + + -- Set h1 through h6 to the same color if only one is specified + if type(options.groups.headings) == "string" then + options.groups.headings = { + h1 = options.groups.headings, + h2 = options.groups.headings, + h3 = options.groups.headings, + h4 = options.groups.headings, + h5 = options.groups.headings, + h6 = options.groups.headings, + } + end + + return options +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 M +return config diff --git a/lua/rose-pine/palette.lua b/lua/rose-pine/palette.lua index 66d6438b..6b49f680 100644 --- a/lua/rose-pine/palette.lua +++ b/lua/rose-pine/palette.lua @@ -1,68 +1,58 @@ -local options = require('rose-pine.config').options - +local options = require("rose-pine.config").options local variants = { main = { - ---@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', + _nc = "#16141f", + base = "#191724", + surface = "#1f1d2e", + overlay = "#26233a", + muted = "#6e6a86", + subtle = "#908caa", + text = "#e0def4", + love = "#eb6f92", + gold = "#f6c177", + rose = "#ebbcba", + pine = "#3e8fb0", + foam = "#9ccfd8", + iris = "#c4a7e7", + highlight_low = "#21202e", + highlight_med = "#403d52", + highlight_high = "#524f67", }, moon = { - ---@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', + _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", }, dawn = { - ---@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', + _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", + highlight_low = "#f4ede8", + highlight_med = "#dfdad9", + highlight_high = "#cecacd", }, } @@ -70,5 +60,4 @@ 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 1a5eaac6..9f85ccde 100644 --- a/lua/rose-pine/plugins/bufferline.lua +++ b/lua/rose-pine/plugins/bufferline.lua @@ -5,7 +5,7 @@ --- 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 = { diff --git a/lua/rose-pine/plugins/galaxyline.lua b/lua/rose-pine/plugins/galaxyline.lua index 348559a5..f2c01ab7 100644 --- a/lua/rose-pine/plugins/galaxyline.lua +++ b/lua/rose-pine/plugins/galaxyline.lua @@ -4,7 +4,7 @@ --- @usage --- 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 9279adbc..2a7b273b 100644 --- a/lua/rose-pine/plugins/markid.lua +++ b/lua/rose-pine/plugins/markid.lua @@ -5,6 +5,6 @@ --- 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/toggleterm.lua b/lua/rose-pine/plugins/toggleterm.lua index 38924f9d..87b0abc8 100644 --- a/lua/rose-pine/plugins/toggleterm.lua +++ b/lua/rose-pine/plugins/toggleterm.lua @@ -6,10 +6,10 @@ --- 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 deleted file mode 100644 index d5e4faf6..00000000 --- a/lua/rose-pine/theme.lua +++ /dev/null @@ -1,629 +0,0 @@ -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 deleted file mode 100644 index f8b84f93..00000000 --- a/lua/rose-pine/util.lua +++ /dev/null @@ -1,71 +0,0 @@ -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 new file mode 100644 index 00000000..e4c72cc5 --- /dev/null +++ b/lua/rose-pine/utilities.lua @@ -0,0 +1,66 @@ +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 + +---@param color string Palette key or hex value +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 Between 0 (background) and 1 (foreground) +local function blend(fg, bg, alpha) + 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 + + return string.format("#%02X%02X%02X", blend_channel(1), blend_channel(2), blend_channel(3)) +end + +---@param group string +---@param highlight table +function utilities.highlight(group, highlight, blend_on) + local fg = highlight.fg and parse_color(highlight.fg) or "NONE" + local bg = highlight.bg and parse_color(highlight.bg) or "NONE" + local sp = highlight.sp and parse_color(highlight.sp) or "NONE" + + if highlight.blend ~= nil and (highlight.blend >= 0 and highlight.blend <= 100) and bg ~= nil then + bg = blend(bg, blend_on or require("rose-pine.palette").base, highlight.blend / 100) + end + + highlight.fg = fg + highlight.bg = bg + highlight.sp = sp + -- highlight = vim.tbl_extend("force", highlight, { fg = fg, bg = bg, sp = sp }) + + vim.api.nvim_set_hl(0, group, highlight) +end + +return utilities diff --git a/readme.md b/readme.md index ed6d466d..343a5878 100644 --- a/readme.md +++ b/readme.md @@ -11,30 +11,20 @@

-## Install +## Getting started -**[Paq](https://github.com/savq/paq-nvim)** +Install `rose-pine/neovim` using your favourite plugin manager: -```lua -require('paq')({ - { 'rose-pine/neovim', as = 'rose-pine' } -}) -``` - -**[lazy.nvim](https://github.com/folke/lazy.nvim)** +**paq-nvim** ```lua -require("lazy").setup({ - { 'rose-pine/neovim', name = 'rose-pine' } -}) +{ 'rose-pine/neovim', as = 'rose-pine' } ``` -**[packer.nvim](https://github.com/wbthomason/packer.nvim)** +**lazy.nvim** ```lua -require('packer').startup(function(use) - use({ 'rose-pine/neovim', as = 'rose-pine' }) -end) +{ 'rose-pine/neovim', name = 'rose-pine' } ``` ## Gallery @@ -53,75 +43,88 @@ end) ## Options -> [!NOTE] -> Options should be set **before** colorscheme +> [!IMPORTANT] +> Configure options _before_ setting 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. -Variant respects `vim.o.background`, 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". ```lua 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, - - --- @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', - - error = 'love', - hint = 'iris', - info = 'foam', - warn = 'gold', - - headings = { - h1 = 'iris', - h2 = 'foam', - h3 = 'rose', - h4 = 'gold', - h5 = 'pine', - h6 = 'foam', - } - -- or set all headings at once - -- headings = 'subtle' - }, - - -- Change specific vim highlight groups - -- https://github.com/rose-pine/neovim/wiki/Recipes - highlight_groups = { - ColorColumn = { bg = 'rose' }, - - -- Blend colours against the "base" background - CursorLine = { bg = 'foam', blend = 10 }, - StatusLine = { fg = 'love', bg = 'love', blend = 10 }, - - -- 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 }, - } + variant = "auto", -- auto, main, moon, or dawn + dark_variant = "main", -- main, moon, or dawn + dim_inactive_windows = false, + extend_background_behind_borders = false, + + styles = { + bold = true, + italic = true, + transparency = false, + }, + + groups = { + border = "muted", + link = "iris", + panel = "surface", + + 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", + git_untracked = "subtle", + + headings = { + h1 = "iris", + h2 = "foam", + h3 = "rose", + h4 = "gold", + h5 = "pine", + h6 = "foam", + }, + -- Alternatively, set all headings at once. + -- headings = "subtle", + }, + + highlight_groups = { + -- Comment = { fg = "foam" }, + -- VertSplit = { fg = "muted", bg = "muted" }, + }, + + 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, }) --- Set colorscheme after options vim.cmd('colorscheme rose-pine') +-- vim.cmd('colorscheme rose-pine-main') +-- vim.cmd('colorscheme rose-pine-moon') +-- vim.cmd('colorscheme rose-pine-dawn') ``` +> [!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 any help in creating a lovely experience for all. +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. -- 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) +Feel free to update the [wiki](https://github.com/rose-pine/neovim/wiki/) with any [recipes](https://github.com/rose-pine/neovim/wiki/Recipes).