commit f0c2be8d63b14bfd62c8cff8f3d962da9311c372 Author: mvllow Date: Tue May 18 11:15:39 2021 -0500 init diff --git a/colors/rose-pine.vim b/colors/rose-pine.vim new file mode 100644 index 0000000..7f305f5 --- /dev/null +++ b/colors/rose-pine.vim @@ -0,0 +1,9 @@ +lua << EOF +package.loaded['rose-pine'] = nil +package.loaded['rose-pine.util'] = nil +package.loaded['rose-pine.palette'] = nil +package.loaded['rose-pine.theme'] = nil +package.loaded['rose-pine.functions'] = nil + +require('rose-pine').set() +EOF diff --git a/lua/rose-pine/functions.lua b/lua/rose-pine/functions.lua new file mode 100644 index 0000000..4f00681 --- /dev/null +++ b/lua/rose-pine/functions.lua @@ -0,0 +1,22 @@ +if vim.g.rose_pine_variant_switch == nil then + vim.g.rose_pine_variant_switch = 0 +end + +local select_variant = function(variant) + vim.g.rose_pine_variant = variant + print("Rosé Pine", variant) + vim.cmd([[colorscheme rose-pine]]) +end + +local toggle_variant = function(variants) + local options = variants or { "base", "moon", "dawn" } + + vim.g.rose_pine_variant_switch = (vim.g.rose_pine_variant_switch % table.getn(options)) + 1 + + select_variant(options[vim.g.rose_pine_variant_switch]) +end + +return { + select_variant = select_variant, + toggle_variant = toggle_variant, +} diff --git a/lua/rose-pine/init.lua b/lua/rose-pine/init.lua new file mode 100644 index 0000000..5ea43df --- /dev/null +++ b/lua/rose-pine/init.lua @@ -0,0 +1,7 @@ +local util = require('rose-pine.util') + +local set = function() + util.load() +end + +return { set = set } diff --git a/lua/rose-pine/palette.lua b/lua/rose-pine/palette.lua new file mode 100644 index 0000000..2d13fea --- /dev/null +++ b/lua/rose-pine/palette.lua @@ -0,0 +1,58 @@ +local palette = { + base = '#191724', + surface = '#1f1d2e', + overlay = '#26233a', + inactive = '#555169', + subtle = '#6e6a86', + text = '#e0def4', + love = '#eb6f92', + gold = '#f6c177', + rose = '#ebbcba', + pine = '#31748f', + foam = '#9ccfd8', + iris = '#c4a7e7', + highlight = '#2a2837', + highlight_inactive = '#211f2d', + highlight_overlay = '#3a384a', + none = 'NONE', +} + +if vim.g.rose_pine_variant == 'dawn' then + palette = { + base = '#faf4ed', + surface = '#fffaf3', + overlay = '#f2e9de', + inactive = '#9893a5', + subtle = '#6e6a86', + text = '#575279', + love = '#b4637a', + gold = '#ea9d34', + rose = '#d7827e', + pine = '#286983', + foam = '#56949f', + iris = '#907aa9', + highlight = '#eee9e6', + highlight_inactive = '#f2ede9', + highlight_overlay = '#e4dfde', + } +elseif vim.g.rose_pine_variant == 'moon' then + palette = { + base = '#232136', + surface = '#2a273f', + overlay = '#393552', + inactive = '#59546d', + subtle = '#817c9c', + text = '#e0def4', + love = '#eb6f92', + gold = '#f6c177', + rose = '#ea9a97', + pine = '#3e8fb0', + foam = '#9ccfd8', + iris = '#c4a7e7', + highlight = '#312f44', + highlight_inactive = '#2a283d', + highlight_overlay = '#3f3c53', + } +end + +return palette diff --git a/lua/rose-pine/theme.lua b/lua/rose-pine/theme.lua new file mode 100644 index 0000000..85d5923 --- /dev/null +++ b/lua/rose-pine/theme.lua @@ -0,0 +1,259 @@ +local p = require('rose-pine.palette') + +local theme = {} + +theme.loadSyntax = function() + local syntax = { + Boolean = { fg = p.gold }, + Character = { fg = p.gold }, + Comment = { fg = p.subtle, style = 'italic' }, + Conditional = { fg = p.pine }, + Constant = { fg = p.gold }, + Debug = { fg = p.rose }, + Define = { fg = p.iris }, + Delimiter = { fg = p.rose }, + Error = { fg = p.love }, + Exception = { fg = p.pine }, + Float = { fg = p.gold }, + Function = { fg = p.rose }, + Identifier = { fg = p.rose }, + -- Ignore = { fg = '' }, + Include = { fg = p.iris }, + Keyword = { fg = p.pine }, + Label = { fg = p.pine }, + Macro = { fg = p.iris }, + Number = { fg = p.gold }, + Operator = { fg = p.pine }, + 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.rose }, + Todo = { fg = p.iris }, + Type = { fg = p.foam }, + Typedef = { fg = p.foam }, + Underlined = { fg = p.foam, style = 'underline' }, + + -- htmlH1 = { fg = '' }, + -- htmlH2 = { fg = '' }, + -- htmlH3 = { fg = '' }, + -- htmlH4 = { fg = '' }, + -- htmlH5 = { fg = '' }, + -- htmlLink = { fg = '' }, + -- markdownH1 = { fg = '' }, + -- markdownH1Delimeter = { fg = '' }, + -- markdownH2 = { fg = '' }, + -- markdownH2Delimeter = { fg = '' }, + -- markdownH3 = { fg = '' }, + -- markdownH3Delimeter = { fg = '' }, + } + + return syntax +end + +theme.loadEditor = function() + local editor = { + -- ColorColumn = {}, + -- Conceal = {}, + -- Cursor = {}, + -- CursorColumn = {}, + -- CursorIM = {}, + CursorLine = { bg = p.highlight_inactive }, + CursorLineNr = { fg = p.text }, + DiffAdd = { fg = '', bg = '' }, + DiffChange = { fg = '', bg = '' }, + DiffDelete = { fg = '', bg = '' }, + DiffText = { fg = '', bg = '' }, + Directory = { fg = p.foam }, + -- EndOfBuffer = {}, + ErrorMsg = { fg = p.love, style = 'bold' }, + -- FoldColumn = {}, + -- Folded = {}, + IncSearch = { bg = p.highlight }, + LineNr = { fg = p.inactive }, + MatchParen = { fg = p.text, bg = p.overlay }, + -- ModeMsg = {}, + MoreMsg = { fg = p.iris }, + NonText = { fg = p.inactive }, + Normal = { fg = p.text }, + -- NormalFloat = {}, + Pmenu = { fg = p.subtle, bg = p.surface }, + PmenuSbar = { bg = p.overlay }, + PmenuSel = { fg = p.text, bg = p.overlay }, + PmenuThumb = { bg = p.inactive }, + Question = { fg = p.gold }, + -- QuickFixLine = {}, + Search = { fg = p.iris, bg = p.highlight_overlay }, + SpecialKey = { fg = p.foam }, + -- SpellBad = {}, + -- SpellCap = {}, + -- SpellLocal = {}, + -- SpellRare = {}, + SignColumn = {}, + -- StatusLine = {}, + -- StatusLineNC = {}, + -- StatusLineTerm = {}, + -- StatusLineTermNC = {}, + -- TabLine = {}, + -- TabLineFill = {}, + -- TabLineSel = {}, + Title = { fg = p.rose }, + VertSplit = { fg = p.overlay }, + Visual = { bg = p.highlight }, + -- VisualNOS = {}, + WarningMsg = { fg = p.gold }, + -- Whitespace = {}, + -- WildMenu = {}, + } + + if vim.g.rose_pine_disable_background == true then + editor.Normal = { fg = p.text, bg = p.none } + editor.SignColumn = { fg = p.text, bg = p.none } + else + editor.Normal = { fg = p.text, bg = p.base } + editor.SignColumn = { fg = p.text, bg = p.base } + end + + return editor +end + +theme.loadTerminal = function() + -- black + vim.g.terminal_color_0 = p.overlay + vim.g.terminal_color_8 = p.subtle + -- red + vim.g.terminal_color_4 = p.love + vim.g.terminal_color_12 = p.love + -- green + vim.g.terminal_color_2 = p.pine + vim.g.terminal_color_10 = p.pine + -- yellow + vim.g.terminal_color_6 = p.gold + vim.g.terminal_color_14 = p.gold + -- blue + vim.g.terminal_color_1 = p.foam + vim.g.terminal_color_9 = p.foam + -- magenta + vim.g.terminal_color_5 = p.iris + vim.g.terminal_color_13 = p.iris + -- cyan + vim.g.terminal_color_3 = p.rose + vim.g.terminal_color_11 = p.rose + -- white + vim.g.terminal_color_7 = p.text + vim.g.terminal_color_15 = p.text +end + +theme.loadTreesitter = function() + local treesitter = { + -- TSAnnotation = {}, + -- TSAttribute = {}, + -- TSBoolean = {}, + -- TSCharacter = {}, + TSComment = { fg = p.subtle }, + -- TSConditional = {}, + TSConstBuiltin = { fg = p.love }, + -- TSConstMacro = {}, + -- TSConstant = {}, + TSConstructor = { fg = p.text }, + -- TSEmphasis = {}, + -- TSError = {}, + -- TSException = {}, + -- TSField = {}, + -- TSFloat = {}, + TSFuncBuiltin = { fg = p.love }, + -- TSFuncMacro = {}, + -- TSFunction = {}, + -- TSInclude = {}, + -- TSKeyword = {}, + -- TSKeywordFunction = {}, + -- TSLabel = {}, + -- TSLiteral = {}, + -- TSMethod = {}, + -- TSNamespace = {}, + -- TSNone = {}, + -- TSNumber = {}, + -- TSOperator = {}, + -- TSParameter = {}, + -- TSParameterReference = {}, + -- TSProperty = {}, + TSPunctBracket = { fg = p.subtle }, + TSPunctDelimiter = { fg = p.subtle }, + TSPunctSpecial = { fg = p.subtle }, + -- TSRepeat = {}, + -- TSStrike = {}, + -- TSString = {}, + TSStringEscape = { fg = p.pine }, + -- TSStringRegex = {}, + -- TSSymbol = {}, + TSTag = { fg = p.foam }, + TSTagDelimiter = { fg = p.subtle }, + -- TSText = {}, + -- TSTitle = {}, + -- TSType = {}, + -- TSTypeBuiltin = {}, + -- TSURI = {}, + -- TSUnderline = {}, + -- TSVariable = {}, + TSVariableBuiltin = { fg = p.love }, + } + + return treesitter +end + +theme.loadLsp = function() + local lsp = { + LspDiagnosticsDefaultError = { fg = p.love }, + LspDiagnosticsDefaultHint = { fg = p.iris }, + LspDiagnosticsDefaultInformation = { fg = p.foam }, + LspDiagnosticsDefaultWarning = { fg = p.gold }, + LspDiagnosticsFloatingError = { fg = p.love }, + LspDiagnosticsFloatingHint = { fg = p.iris }, + LspDiagnosticsFloatingInformation = { fg = p.foam }, + LspDiagnosticsFloatingWarning = { fg = p.gold }, + LspDiagnosticsSignError = { fg = p.love }, + LspDiagnosticsSignHint = { fg = p.iris }, + LspDiagnosticsSignInformation = { fg = p.foam }, + LspDiagnosticsSignWarning = { fg = p.gold }, + LspDiagnosticsUnderlineError = { style = 'undercurl', sp = p.love }, + LspDiagnosticsUnderlineHint = { style = 'undercurl', sp = p.iris }, + LspDiagnosticsUnderlineInformation = { style = 'undercurl', sp = p.foam }, + LspDiagnosticsUnderlineWarning = { style = 'undercurl', sp = p.gold }, + LspDiagnosticsVirtualTextError = { fg = p.love }, + LspDiagnosticsVirtualTextHint = { fg = p.iris }, + LspDiagnosticsVirtualTextInformation = { fg = p.foam }, + LspDiagnosticsVirtualTextWarning = { fg = p.gold }, + LspReferenceRead = { fg = p.rose, bg = p.highlight }, + LspReferenceText = { fg = p.rose, bg = p.highlight }, + LspReferenceWrite = { fg = p.rose, bg = p.highlight }, + } + + return lsp +end + +theme.loadPlugins = function() + local plugins = { + -- barbar.nvim + -- https://github.com/romgrk/barbar.nvim + BufferTabpageFill = { bg = p.none }, + BufferCurrent = { fg = p.text, bg = p.overlay }, + BufferCurrentMod = { fg = p.foam, bg = p.overlay }, + BufferCurrentSign = { fg = p.subtle, bg = p.overlay }, + BufferInactive = { fg = p.subtle }, + BufferInactiveMod = { fg = p.foam }, + BufferInactiveSign = { fg = p.subtle }, + BufferVisible = { fg = p.subtle }, + BufferVisibleMod = { fg = p.foam }, + BufferVisibleSign = { fg = p.subtle }, + } + + return plugins +end + +return theme diff --git a/lua/rose-pine/util.lua b/lua/rose-pine/util.lua new file mode 100644 index 0000000..b897fd0 --- /dev/null +++ b/lua/rose-pine/util.lua @@ -0,0 +1,69 @@ +local util = {} +local theme = require('rose-pine.theme') + +util.highlight = function(group, color) + local style = color.style and 'gui=' .. color.style or 'gui=NONE' + local fg = color.fg and 'guifg=' .. color.fg or 'guifg=NONE' + local bg = color.bg and 'guibg=' .. color.bg or 'guibg=NONE' + local sp = color.sp and 'guisp=' .. color.sp or '' + + local hl = 'highlight ' .. group .. ' ' .. style .. ' ' .. fg .. ' ' .. bg .. ' ' .. sp + + vim.cmd(hl) + if color.link then + vim.cmd('highlight! link ' .. group .. ' ' .. color.link) + end +end + +function util.load() + vim.cmd('hi clear') + if vim.fn.exists('syntax_on') then + vim.cmd('syntax reset') + end + if vim.g.rose_pine_variant == 'dawn' then + vim.o.background = 'light' + else + vim.o.background = 'dark' + end + vim.o.termguicolors = true + vim.g.colors_name = 'rose-pine' + + local async + async = vim.loop.new_async(vim.schedule_wrap(function() + theme.loadTerminal() + local plugins = theme.loadPlugins() + local treesitter = theme.loadTreesitter() + local lsp = theme.loadLsp() + + for group, colors in pairs(plugins) do + util.highlight(group, colors) + end + + for group, colors in pairs(treesitter) do + util.highlight(group, colors) + end + + for group, colors in pairs(lsp) do + util.highlight(group, colors) + end + + async:close() + end)) + + -- load priority groups first + local editor = theme.loadEditor() + local syntax = theme.loadSyntax() + + for group, colors in pairs(editor) do + util.highlight(group, colors) + end + + for group, colors in pairs(syntax) do + util.highlight(group, colors) + end + + -- load enhancements (eg. lsp, treesitter, plugins) + async:send() +end + +return util diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..383f1b0 --- /dev/null +++ b/readme.md @@ -0,0 +1,78 @@ +

+ +

Rosé Pine for Neovim

+

+ +

All natural pine, faux fur and a bit of soho vibes for the classy minimalist

+ +

+ + + +

+ +## Installation + + +## Usage + +1. Install via your preferred package manager + +```lua +-- Packer +use('rose-pine/nvim') +``` + +2. Require or set `rose-pine` colorscheme + +```lua +-- Lua +require('rose-pine').set() +``` + +```vim +" Vimscript +colorscheme rose-pine +``` + +## Options + +```lua +-- Can be 'base', 'moon', 'dawn' +vim.g.rose_pine_variant = 'base' + +-- Use terminal background +vim.g.rose_pine_remove_background = false +``` + +## Functions + +```lua +-- Toggle between the three variants +require('rose-pine.functions').toggle_variant() + +-- Toggle between base and dawn +require('rose-pine.functions').toggle_variant({'base', 'dawn'}) + +-- Switch to specified variant +require('rose-pine.functions').select_variant('moon') +``` + +## Gallery + +**Rosé Pine** + +![Rosé Pine with Neovim](assets/rose-pine.png) + +**Rosé Pine Moon** + +![Rosé Pine Moon with Neovim](assets/rose-pine-moon.png) + +**Rosé Pine Dawn** + +![Rosé Pine Dawn with Neovim](assets/rose-pine-dawn.png) + +## Thanks to + +- [mvllow](https://github.com/mvllow) +