diff --git a/lua/lualine/themes/rose-pine-alt.lua b/lua/lualine/themes/rose-pine-alt.lua index 05d8af7..287144f 100644 --- a/lua/lualine/themes/rose-pine-alt.lua +++ b/lua/lualine/themes/rose-pine-alt.lua @@ -1,4 +1,10 @@ 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 return { normal = { @@ -19,8 +25,8 @@ return { a = { bg = p.surface, fg = p.love, gui = "bold" }, }, inactive = { - 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" }, + 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" }, }, } diff --git a/lua/lualine/themes/rose-pine.lua b/lua/lualine/themes/rose-pine.lua index 4c2c9a6..e409130 100644 --- a/lua/lualine/themes/rose-pine.lua +++ b/lua/lualine/themes/rose-pine.lua @@ -1,7 +1,7 @@ local p = require("rose-pine.palette") local config = require("rose-pine.config") -local bg_base = p.base +local bg_base = p.surface if config.options.styles.transparency then bg_base = "NONE" end diff --git a/lua/rose-pine.lua b/lua/rose-pine.lua index c546297..f10ffcd 100644 --- a/lua/rose-pine.lua +++ b/lua/rose-pine.lua @@ -91,7 +91,7 @@ local function set_highlights() 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 }, + DiffText = { bg = groups.git_text, blend = 40 }, diffAdded = { link = "DiffAdd" }, diffChanged = { link = "DiffChange" }, diffRemoved = { link = "DiffDelete" }, @@ -99,7 +99,7 @@ local function set_highlights() -- EndOfBuffer = {}, ErrorMsg = { fg = groups.error, bold = styles.bold }, FloatBorder = make_border(), - FloatTitle = { link = "Directory" }, + FloatTitle = { fg = palette.foam, bg = groups.panel, bold = styles.bold }, FoldColumn = { fg = palette.muted }, Folded = { fg = palette.text, bg = groups.panel }, IncSearch = { link = "CurSearch" }, @@ -121,12 +121,12 @@ local function set_highlights() PmenuSel = { fg = palette.text, bg = palette.overlay }, PmenuThumb = { bg = palette.muted }, Question = { fg = palette.gold }, - -- QuickFixLink = {}, + 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.base, bg = palette.text }, + 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 }, @@ -143,7 +143,7 @@ local function set_highlights() TabLineSel = { fg = palette.text, bg = palette.overlay, bold = styles.bold }, Title = { fg = palette.foam, bold = styles.bold }, VertSplit = { fg = groups.border }, - Visual = { bg = palette.highlight_med }, + Visual = { bg = palette.iris, blend = 15 }, -- VisualNOS = {}, WarningMsg = { fg = groups.warn, bold = styles.bold }, -- Whitespace = {}, @@ -155,26 +155,32 @@ local function set_highlights() 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 }, @@ -202,8 +208,8 @@ local function set_highlights() Macro = { fg = palette.iris }, Number = { fg = palette.gold }, Operator = { fg = palette.subtle }, - PreConduit = { fg = palette.iris }, - PreProc = { link = "PreConduit" }, + PreCondit = { fg = palette.iris }, + PreProc = { link = "PreCondit" }, Repeat = { fg = palette.pine }, Special = { fg = palette.foam }, SpecialChar = { link = "Special" }, @@ -265,10 +271,12 @@ local function set_highlights() mkdRule = { fg = palette.subtle }, mkdURL = { link = "markdownUrl" }, - --- Identifiers + --- Treesitter + --- |:help treesitter-highlight-groups| ["@variable"] = { fg = palette.text, italic = styles.italic }, - ["@variable.builtin"] = { fg = palette.text, bold = styles.bold }, + ["@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 }, @@ -279,7 +287,6 @@ local function set_highlights() ["@module.builtin"] = { fg = palette.text, bold = styles.bold }, ["@label"] = { link = "Label" }, - --- Literals ["@string"] = { link = "String" }, -- ["@string.documentation"] = {}, ["@string.regexp"] = { fg = palette.iris }, @@ -295,28 +302,27 @@ local function set_highlights() ["@boolean"] = { link = "Boolean" }, ["@number"] = { link = "Number" }, ["@number.float"] = { link = "Number" }, + ["@float"] = { link = "Number" }, - --- Types ["@type"] = { fg = palette.foam }, ["@type.builtin"] = { fg = palette.foam, bold = styles.bold }, -- ["@type.definition"] = {}, - -- ["@type.qualifier"] = {}, - -- ["@attribute"] = {}, + ["@attribute"] = { fg = palette.iris }, + ["@attribute.builtin"] = { fg = palette.iris, bold = styles.bold }, ["@property"] = { fg = palette.foam, italic = styles.italic }, - --- Functions ["@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" }, - --- Keywords ["@keyword"] = { link = "Keyword" }, -- ["@keyword.coroutine"] = {}, -- ["@keyword.function"] = {}, @@ -327,8 +333,10 @@ local function set_highlights() ["@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 }, @@ -343,10 +351,10 @@ local function set_highlights() ["@comment.error"] = { fg = groups.error }, ["@comment.warning"] = { fg = groups.warn }, - ["@comment.todo"] = { fg = groups.todo, bg = groups.todo, blend = 20 }, - ["@comment.hint"] = { fg = groups.hint, bg = groups.hint, blend = 20 }, - ["@comment.info"] = { fg = groups.info, bg = groups.info, blend = 20 }, - ["@comment.note"] = { fg = groups.note, bg = groups.note, blend = 20 }, + ["@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 }, @@ -356,22 +364,38 @@ local function set_highlights() ["@markup.heading"] = { fg = palette.foam, bold = styles.bold }, - ["@markup.quote"] = { fg = palette.subtle }, + ["@markup.quote"] = { fg = palette.text }, ["@markup.math"] = { link = "Special" }, ["@markup.environment"] = { link = "Macro" }, ["@markup.environment.name"] = { link = "@type" }, -- ["@markup.link"] = {}, - ["@markup.link.label"] = { fg = palette.text }, + ["@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.text }, + ["@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 }, @@ -383,22 +407,28 @@ local function set_highlights() --- 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"] = {}, + ["@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" }, @@ -422,9 +452,9 @@ local function set_highlights() BufferVisibleTarget = { fg = palette.gold }, -- lewis6991/gitsigns.nvim - GitSignsAdd = { link = "SignAdd" }, - GitSignsChange = { link = "SignChange" }, - GitSignsDelete = { link = "SignDelete" }, + 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" }, @@ -432,7 +462,9 @@ local function set_highlights() -- 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 @@ -460,6 +492,26 @@ local function set_highlights() 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 }, @@ -468,6 +520,10 @@ local function set_highlights() 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 @@ -475,10 +531,23 @@ local function set_highlights() -- 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 @@ -547,7 +616,7 @@ local function set_highlights() -- tami5/lspsaga.nvim (fork of glepnir/lspsaga.nvim) DefinitionCount = { fg = palette.rose }, DefinitionIcon = { fg = palette.rose }, - DefintionPreviewTitle = { fg = palette.rose, bold = styles.bold }, + DefinitionPreviewTitle = { fg = palette.rose, bold = styles.bold }, LspFloatWinBorder = make_border(), LspFloatWinNormal = { bg = groups.panel }, LspSagaAutoPreview = { fg = palette.subtle }, @@ -604,27 +673,35 @@ local function set_highlights() TelescopeTitle = { fg = palette.foam, bold = styles.bold }, -- ibhagwan/fzf-lua - FzfLuaNormal = { link = "NormalFloat" }, - FwzfLuaTitle = { fg = palette.foam, bold = styles.bold }, FzfLuaBorder = make_border(), - FzfLuaHeaderText = { fg = palette.love }, - FzfLuaHeaderBind = { fg = palette.rose }, - FzfLuaBufFlagCur = { fg = palette.subtle }, 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 }, @@ -646,6 +723,7 @@ local function set_highlights() 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" }, @@ -690,16 +768,143 @@ local function set_highlights() -- folke/noice.nvim NoiceCursor = { fg = palette.highlight_high, bg = palette.text }, - -- echasnovski/mini.clue + -- 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 }, - -- echasnovski/mini.pick + 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 }, - -- echasnovski/mini.indentscope - MiniIndentscopeSymbol = { fg = palette.muted }, - MiniIndentscopeSymbolOff = { fg = palette.muted }, + 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 }, @@ -709,14 +914,169 @@ local function set_highlights() -- 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" }, @@ -726,10 +1086,12 @@ local function set_highlights() 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" }, @@ -737,16 +1099,22 @@ local function set_highlights() 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" }, - MiniClueTitle = { bg = "NONE", bold = styles.bold }, + TreesitterContext = { bg = "NONE" }, + TreesitterContextLineNumber = { fg = palette.rose, bg = "NONE" }, + + MiniFilesTitleFocused = { fg = palette.rose, bg = "NONE", bold = styles.bold }, - MiniPickBorderText = { bg = "NONE" }, MiniPickPrompt = { bg = "NONE", bold = styles.bold }, + MiniPickBorderText = { bg = "NONE" }, } if config.options.enable.legacy_highlights then @@ -767,6 +1135,12 @@ local function set_highlights() 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 @@ -793,9 +1167,18 @@ local function set_highlights() 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 @@ -820,9 +1203,13 @@ local function set_highlights() -- Support StatusLineTerm & StatusLineTermNC from vim vim.cmd([[ - autocmd TermOpen * if &buftype=='terminal' - \|setlocal winhighlight=StatusLine:StatusLineTerm,StatusLineNC:StatusLineTermNC - \|else|setlocal winhighlight=|endif + 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 @@ -838,6 +1225,12 @@ function M.colorscheme(variant) end 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() end diff --git a/lua/rose-pine/config.lua b/lua/rose-pine/config.lua index cb99137..bbc9967 100644 --- a/lua/rose-pine/config.lua +++ b/lua/rose-pine/config.lua @@ -1,7 +1,7 @@ ---@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 { 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 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 } local config = {} @@ -35,6 +35,9 @@ config.options = { transparency = false, }, + ---@type table> + palette = {}, + ---@type table groups = { border = "muted", @@ -44,9 +47,10 @@ config.options = { error = "love", hint = "iris", info = "foam", + ok = "leaf", + warn = "gold", note = "pine", todo = "rose", - warn = "gold", git_add = "foam", git_change = "rose", @@ -65,7 +69,7 @@ config.options = { h3 = "rose", h4 = "gold", h5 = "pine", - h6 = "foam", + h6 = "leaf", ---@deprecated Replaced by `options.highlight_groups["Normal"]` -- background = "base", @@ -133,11 +137,11 @@ local function migrate(options) -- 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 + 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 = (options.disable_italic or options.disable_italics) and false or options.styles.italic + 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 diff --git a/lua/rose-pine/palette.lua b/lua/rose-pine/palette.lua index 540625e..cfefd65 100644 --- a/lua/rose-pine/palette.lua +++ b/lua/rose-pine/palette.lua @@ -14,6 +14,7 @@ local variants = { pine = "#31748f", foam = "#9ccfd8", iris = "#c4a7e7", + leaf = "#95b1ac", highlight_low = "#21202e", highlight_med = "#403d52", highlight_high = "#524f67", @@ -33,6 +34,7 @@ local variants = { pine = "#3e8fb0", foam = "#9ccfd8", iris = "#c4a7e7", + leaf = "#95b1ac", highlight_low = "#2a283e", highlight_med = "#44415a", highlight_high = "#56526e", @@ -45,13 +47,14 @@ local variants = { overlay = "#f2e9e1", muted = "#9893a5", subtle = "#797593", - text = "#575279", + 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", @@ -59,6 +62,15 @@ local variants = { }, } +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 diff --git a/lua/rose-pine/plugins/bufferline.lua b/lua/rose-pine/plugins/bufferline.lua index 9f85ccd..7a96026 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") 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 f2c01ab..05d9b28 100644 --- a/lua/rose-pine/plugins/galaxyline.lua +++ b/lua/rose-pine/plugins/galaxyline.lua @@ -2,7 +2,7 @@ --- 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") diff --git a/lua/rose-pine/plugins/markid.lua b/lua/rose-pine/plugins/markid.lua index 2a7b273..3d6d8f9 100644 --- a/lua/rose-pine/plugins/markid.lua +++ b/lua/rose-pine/plugins/markid.lua @@ -2,7 +2,7 @@ --- 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") diff --git a/lua/rose-pine/plugins/obsidian.lua b/lua/rose-pine/plugins/obsidian.lua new file mode 100644 index 0000000..43cc3b3 --- /dev/null +++ b/lua/rose-pine/plugins/obsidian.lua @@ -0,0 +1,14 @@ +--- 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 87b0abc..7f808eb 100644 --- a/lua/rose-pine/plugins/toggleterm.lua +++ b/lua/rose-pine/plugins/toggleterm.lua @@ -2,8 +2,8 @@ --- 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" }, diff --git a/lua/rose-pine/utilities.lua b/lua/rose-pine/utilities.lua index 26e019e..32a8575 100644 --- a/lua/rose-pine/utilities.lua +++ b/lua/rose-pine/utilities.lua @@ -14,10 +14,17 @@ local function color_to_rgb(color) 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 - return print("Invalid color: " .. color) + print("Invalid color: " .. color) + return nil end color = color:lower() @@ -26,13 +33,21 @@ function utilities.parse_color(color) 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) @@ -41,7 +56,10 @@ function utilities.blend(fg, bg, alpha) 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)) + 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 7a4a93d..6ef48bc 100644 --- a/readme.md +++ b/readme.md @@ -13,18 +13,33 @@ ## Getting started -Install `rose-pine/neovim` using your favourite plugin manager: +Install `rose-pine/neovim` using your favourite package manager: -**paq-nvim** +### [pam.nvim](https://github.com/mvllow/pam.nvim) ```lua -{ 'rose-pine/neovim', as = 'rose-pine' } +{ source = "rose-pine/neovim", as = "rose-pine" } ``` -**lazy.nvim** +### [lazy.nvim](https://lazy.folke.io/installation) + +**Structured Setup** ```lua -{ 'rose-pine/neovim', name = 'rose-pine' } +-- lua/plugins/rose-pine.lua +return { + "rose-pine/neovim", + name = "rose-pine", + config = function() + vim.cmd("colorscheme rose-pine") + end +} +``` + +**Single file** + +```lua +{ "rose-pine/neovim", name = "rose-pine" } ``` ## Gallery @@ -51,7 +66,7 @@ Rosé Pine has three variants: main, moon, and dawn. By default, `vim.o.backgrou 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({ +require("rose-pine").setup({ variant = "auto", -- auto, main, moon, or dawn dark_variant = "main", -- main, moon, or dawn dim_inactive_windows = false, @@ -59,10 +74,8 @@ require('rose-pine').setup({ enable = { terminal = true, - -- Improve compatibility for previous versions of Neovim - legacy_highlights = true, - -- Handle deprecated options automatically - migrations = true, + legacy_highlights = true, -- Improve compatibility for previous versions of Neovim + migrations = true, -- Handle deprecated options automatically }, styles = { @@ -102,9 +115,21 @@ require('rose-pine').setup({ 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) @@ -120,10 +145,10 @@ require('rose-pine').setup({ end, }) -vim.cmd('colorscheme rose-pine') --- vim.cmd('colorscheme rose-pine-main') --- vim.cmd('colorscheme rose-pine-moon') --- vim.cmd('colorscheme rose-pine-dawn') +vim.cmd("colorscheme rose-pine") +-- vim.cmd("colorscheme rose-pine-main") +-- vim.cmd("colorscheme rose-pine-moon") +-- vim.cmd("colorscheme rose-pine-dawn") ``` > [!NOTE]