diff --git a/lua/rose-pine/config.lua b/lua/rose-pine/config.lua new file mode 100644 index 0000000..668ade7 --- /dev/null +++ b/lua/rose-pine/config.lua @@ -0,0 +1,49 @@ +local palette = require('rose-pine.palette') + +local config = { + bold_vert_split = vim.g.rose_pine_bold_verical_split_line or false, + no_background = vim.g.rose_pine_disable_background or false, + no_italics = vim.g.rose_pine_disable_italics or false, + colors = { + punctuation = palette.subtle, + comment = palette.subtle, + hint = palette.iris, + info = palette.foam, + warn = palette.gold, + error = palette.love, + + -- TODO: Expose these once matched with syntax and cmp kind + -- variable = '', + -- class = '', + -- interface = '', + -- ['function'] = '', + -- method = '', + + ---@type string|table + headings = { + h1 = palette.foam, + h2 = palette.foam, + h3 = palette.foam, + h4 = palette.foam, + h5 = palette.foam, + h6 = palette.foam, + }, + }, +} + +local colors = vim.g.rose_pine_colors or {} + +if type(colors.headings) == 'string' then + colors.headings = { + h1 = colors.headings, + h2 = colors.headings, + h3 = colors.headings, + h4 = colors.headings, + h5 = colors.headings, + h6 = colors.headings, + } +end + +config.colors = vim.tbl_deep_extend('force', config.colors, colors) + +return config diff --git a/lua/rose-pine/theme.lua b/lua/rose-pine/theme.lua index ef92623..03e2719 100644 --- a/lua/rose-pine/theme.lua +++ b/lua/rose-pine/theme.lua @@ -1,46 +1,24 @@ +local config = require('rose-pine.config') local p = require('rose-pine.palette') -local user_colors = vim.g.rose_pine_colors or {} -local groups = { - punctuation = user_colors.punctuation or p.subtle, - comment = user_colors.comment or p.subtle, - hint = user_colors.hint or p.iris, - info = user_colors.info or p.foam, - warn = user_colors.warn or p.gold, - error = user_colors.error or p.love, - headings = { - h1 = p.love, - h2 = p.rose, - h3 = p.iris, - h4 = p.pine, - h5 = p.foam, - }, -} - -groups.headings = vim.tbl_extend( - 'force', - groups.headings, - user_colors.headings or {} -) - -local theme = {} +-- TODO: Refactor `maybe` logic local maybe_base = p.base local maybe_italic = 'italic' local maybe_bold_vert_split = { fg = p.overlay } -if vim.g.rose_pine_disable_background then - maybe_base = p.none -end - -if vim.g.rose_pine_disable_italics then - maybe_italic = nil -end - -if vim.g.rose_pine_bold_vertical_split_line then +if config.bold_vert_split then maybe_bold_vert_split = { fg = p.surface, bg = p.surface } end -theme.base = { +if config.no_background then + maybe_base = p.none +end + +if config.no_italics then + maybe_italic = nil +end + +local theme = { ColorColumn = { bg = p.highlight_high }, Conceal = { bg = p.none }, -- Cursor = {}, @@ -63,7 +41,7 @@ theme.base = { IncSearch = { bg = p.highlight_med }, LineNr = { fg = p.inactive }, MatchParen = { fg = p.text, bg = p.overlay }, - -- ModeMsg = {}, + ModeMsg = { fg = p.subtle }, MoreMsg = { fg = p.iris }, NonText = { fg = p.inactive }, Normal = { fg = p.text, bg = maybe_base }, @@ -99,7 +77,7 @@ theme.base = { Boolean = { fg = p.gold }, Character = { fg = p.gold }, Comment = { - fg = groups.comment, + fg = config.colors.comment, style = maybe_italic, }, Conditional = { fg = p.pine }, @@ -138,11 +116,11 @@ theme.base = { htmlArg = { fg = p.iris }, htmlBold = { fg = p.text, style = 'bold' }, htmlEndTag = { fg = p.subtle }, - htmlH1 = { fg = groups.headings.h1, style = 'bold' }, - htmlH2 = { fg = groups.headings.h2, style = 'bold' }, - htmlH3 = { fg = groups.headings.h3, style = 'bold' }, - htmlH4 = { fg = groups.headings.h4, style = 'bold' }, - htmlH5 = { fg = groups.headings.h5, style = 'bold' }, + htmlH1 = { fg = config.colors.headings.h1, style = 'bold' }, + htmlH2 = { fg = config.colors.headings.h2, style = 'bold' }, + htmlH3 = { fg = config.colors.headings.h3, style = 'bold' }, + htmlH4 = { fg = config.colors.headings.h4, style = 'bold' }, + htmlH5 = { fg = config.colors.headings.h5, style = 'bold' }, htmlItalic = { fg = p.text, style = maybe_italic }, htmlLink = { fg = p.text }, htmlTag = { fg = p.subtle }, @@ -169,59 +147,54 @@ theme.base = { -- ^ ^ typescriptParens = { bg = p.none }, - DiagnosticHint = { fg = groups.hint }, - DiagnosticInfo = { fg = groups.info }, - DiagnosticWarn = { fg = groups.warn }, - DiagnosticError = { fg = groups.error }, - - DiagnosticDefaultHint = { fg = groups.hint }, - DiagnosticDefaultInfo = { fg = groups.info }, - DiagnosticDefaultWarn = { fg = groups.warn }, - DiagnosticDefaultError = { fg = groups.error }, - - DiagnosticFloatingHint = { fg = groups.hint }, - DiagnosticFloatingInfo = { fg = groups.info }, - DiagnosticFloatingWarn = { fg = groups.warn }, - DiagnosticFloatingError = { fg = groups.error }, - - DiagnosticSignHint = { fg = groups.hint }, - DiagnosticSignInfo = { fg = groups.info }, - DiagnosticSignWarn = { fg = groups.warn }, - DiagnosticSignError = { fg = groups.error }, - - DiagnosticUnderlineHint = { style = 'undercurl', sp = groups.hint }, - DiagnosticUnderlineInfo = { style = 'undercurl', sp = groups.info }, - DiagnosticUnderlineWarn = { style = 'undercurl', sp = groups.warn }, - DiagnosticUnderlineError = { style = 'undercurl', sp = groups.error }, - - DiagnosticVirtualTextHint = { fg = groups.hint }, - DiagnosticVirtualTextInfo = { fg = groups.info }, - DiagnosticVirtualTextWarn = { fg = groups.warn }, - DiagnosticVirtualTextError = { fg = groups.error }, + DiagnosticHint = { fg = config.colors.hint }, + DiagnosticInfo = { fg = config.colors.info }, + DiagnosticWarn = { fg = config.colors.warn }, + DiagnosticError = { fg = config.colors.error }, + DiagnosticDefaultHint = { fg = config.colors.hint }, + DiagnosticDefaultInfo = { fg = config.colors.info }, + DiagnosticDefaultWarn = { fg = config.colors.warn }, + DiagnosticDefaultError = { fg = config.colors.error }, + DiagnosticFloatingHint = { fg = config.colors.hint }, + DiagnosticFloatingInfo = { fg = config.colors.info }, + DiagnosticFloatingWarn = { fg = config.colors.warn }, + DiagnosticFloatingError = { fg = config.colors.error }, + DiagnosticSignHint = { fg = config.colors.hint }, + DiagnosticSignInfo = { fg = config.colors.info }, + DiagnosticSignWarn = { fg = config.colors.warn }, + DiagnosticSignError = { fg = config.colors.error }, + DiagnosticUnderlineHint = { style = 'undercurl', sp = config.colors.hint }, + DiagnosticUnderlineInfo = { style = 'undercurl', sp = config.colors.info }, + DiagnosticUnderlineWarn = { style = 'undercurl', sp = config.colors.warn }, + DiagnosticUnderlineError = { + style = 'undercurl', + sp = config.colors.error, + }, + DiagnosticVirtualTextHint = { fg = config.colors.hint }, + DiagnosticVirtualTextInfo = { fg = config.colors.info }, + DiagnosticVirtualTextWarn = { fg = config.colors.warn }, + DiagnosticVirtualTextError = { fg = config.colors.error }, LspReferenceText = { fg = p.rose, bg = p.highlight_med }, LspReferenceRead = { fg = p.rose, bg = p.highlight_med }, LspReferenceWrite = { fg = p.rose, bg = p.highlight_med }, - --Lsp color groups for nvim 0.5.x + -- TODO: Deprecate in favour of 0.6.0 groups LspDiagnosticsSignWarning = { link = 'DiagnosticSignWarn' }, LspDiagnosticsDefaultWarning = { link = 'DiagnosticDefaultWarn' }, LspDiagnosticsFloatingWarning = { link = 'DiagnosticFloatingWarn' }, LspDiagnosticsVirtualTextWarning = { link = 'DiagnosticVirtualTextWarn' }, LspDiagnosticsUnderlineWarning = { link = 'DiagnosticUnderlineWarn' }, - LspDiagnosticsSignHint = { link = 'DiagnosticSignHint' }, LspDiagnosticsDefaultHint = { link = 'DiagnosticDefaultHint' }, LspDiagnosticsVirtualTextHint = { link = 'DiagnosticFloatingHint' }, LspDiagnosticsFloatingHint = { link = 'DiagnosticVirtualTextHint' }, LspDiagnosticsUnderlineHint = { link = 'DiagnosticUnderlineHint' }, - LspDiagnosticsSignError = { link = 'DiagnosticSignError' }, LspDiagnosticsDefaultError = { link = 'DiagnosticDefaultError' }, LspDiagnosticsFloatingError = { link = 'DiagnosticFloatingError' }, LspDiagnosticsVirtualTextError = { link = 'DiagnosticVirtualTextError' }, LspDiagnosticsUnderlineError = { link = 'DiagnosticUnderlineError' }, - LspDiagnosticsSignInformation = { link = 'DiagnosticSignInfo' }, LspDiagnosticsDefaultInformation = { link = 'DiagnosticDefaultInfo' }, LspDiagnosticsFloatingInformation = { link = 'DiagnosticFloatingInfo' }, @@ -236,42 +209,13 @@ theme.base = { RedrawDebugRecompose = { fg = '#ffffff', bg = p.love }, NvimInternalError = { fg = '#ffffff', bg = p.love }, -} -function theme.load_terminal() - -- black - vim.g.terminal_color_0 = p.overlay - vim.g.terminal_color_8 = p.subtle - -- red - vim.g.terminal_color_1 = p.love - vim.g.terminal_color_9 = p.love - -- green - vim.g.terminal_color_2 = p.pine - vim.g.terminal_color_10 = p.pine - -- yellow - vim.g.terminal_color_3 = p.gold - vim.g.terminal_color_11 = p.gold - -- blue - vim.g.terminal_color_4 = p.foam - vim.g.terminal_color_12 = p.foam - -- magenta - vim.g.terminal_color_5 = p.iris - vim.g.terminal_color_13 = p.iris - -- cyan - vim.g.terminal_color_6 = p.rose - vim.g.terminal_color_14 = p.rose - -- white - vim.g.terminal_color_7 = p.text - vim.g.terminal_color_15 = p.text -end - -theme.treesitter = { -- TSAnnotation = {}, -- TSAttribute = {}, TSBoolean = { fg = p.rose }, -- TSCharacter = {}, TSComment = { - fg = groups.comment, + fg = config.colors.comment, style = maybe_italic, }, -- TSConditional = {}, @@ -307,9 +251,9 @@ theme.treesitter = { fg = p.iris, style = maybe_italic, }, - TSPunctBracket = { fg = groups.punctuation }, - TSPunctDelimiter = { fg = groups.punctuation }, - TSPunctSpecial = { fg = groups.punctuation }, + TSPunctBracket = { fg = config.colors.punctuation }, + TSPunctDelimiter = { fg = config.colors.punctuation }, + TSPunctSpecial = { fg = config.colors.punctuation }, -- TSRepeat = {}, -- TSStrike = {}, TSString = { fg = p.gold }, @@ -329,9 +273,7 @@ theme.treesitter = { style = maybe_italic, }, TSVariableBuiltin = { fg = p.love }, -} -theme.plugins = { -- barbar.nvim -- https://github.com/romgrk/barbar.nvim BufferTabpageFill = { fg = p.base, bg = p.base }, @@ -367,14 +309,12 @@ theme.plugins = { -- nvim-tree.lua -- https://github.com/kyazdani42/nvim-tree.lua NvimTreeNormal = { fg = p.text }, - NvimTreeFileDeleted = { fg = p.love }, NvimTreeFileDirty = { fg = p.rose }, NvimTreeFileMerge = { fg = p.iris }, NvimTreeFileNew = { fg = p.foam }, NvimTreeFileRenamed = { fg = p.pine }, NvimTreeFileStaged = { fg = p.iris }, - NvimTreeEmptyFolderName = { fg = p.inactive }, NvimTreeFolderIcon = { fg = p.subtle }, NvimTreeFolderName = { fg = p.foam }, @@ -383,7 +323,6 @@ theme.plugins = { NvimTreeOpenedFolderName = { fg = p.foam }, NvimTreeRootFolder = { fg = p.iris }, NvimTreeSpecialFile = { link = 'NvimTreeNormal' }, - NvimTreeGitDeleted = { fg = p.love }, NvimTreeGitDirty = { fg = p.rose }, NvimTreeGitIgnored = { fg = p.subtle }, @@ -391,7 +330,6 @@ theme.plugins = { NvimTreeGitNew = { fg = p.foam }, NvimTreeGitRenamed = { fg = p.pine }, NvimTreeGitStaged = { fg = p.iris }, - NvimTreeWindowPicker = { fg = p.base, bg = p.iris }, -- which-key.nvim @@ -425,7 +363,10 @@ theme.plugins = { -- neogit -- https://github.com/TimUntersberger/neogit NeogitDiffAddHighlight = { fg = p.foam, bg = p.highlight_med }, - NeogitDiffDeleteHighlight = { fg = p.love, bg = p.highlight_med }, + NeogitDiffDeleteHighlight = { + fg = p.love, + bg = p.highlight_med, + }, NeogitDiffContextHighlight = { bg = p.highlight_low }, NeogitHunkHeader = { bg = p.highlight_low }, NeogitHunkHeaderHighlight = { bg = p.highlight_low }, @@ -433,16 +374,33 @@ theme.plugins = { -- VimWiki -- https://github.com/vimwiki/vimwiki VimwikiHR = { fg = p.subtle }, - VimwikiHeader1 = { fg = p.foam, style = 'bold' }, - VimwikiHeader2 = { fg = p.foam, style = 'bold' }, - VimwikiHeader3 = { fg = p.foam, style = 'bold' }, - VimwikiHeader4 = { fg = p.foam, style = 'bold' }, - VimwikiHeader5 = { fg = p.foam, style = 'bold' }, - VimwikiHeader6 = { fg = p.foam, style = 'bold' }, + VimwikiHeader1 = { fg = config.colors.headings.h1, style = 'bold' }, + VimwikiHeader2 = { fg = config.colors.headings.h2, style = 'bold' }, + VimwikiHeader3 = { fg = config.colors.headings.h3, style = 'bold' }, + VimwikiHeader4 = { fg = config.colors.headings.h4, style = 'bold' }, + VimwikiHeader5 = { fg = config.colors.headings.h5, style = 'bold' }, + VimwikiHeader6 = { fg = config.colors.headings.h6, style = 'bold' }, VimwikiHeaderChar = { fg = p.pine }, VimwikiLink = { fg = p.rose }, VimwikiList = { fg = p.iris }, VimwikiNoExistsLink = { fg = p.love }, } +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 + return theme