This commit is contained in:
mvllow 2021-05-18 11:15:39 -05:00
commit f0c2be8d63
7 changed files with 502 additions and 0 deletions

9
colors/rose-pine.vim Normal file
View file

@ -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

View file

@ -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,
}

7
lua/rose-pine/init.lua Normal file
View file

@ -0,0 +1,7 @@
local util = require('rose-pine.util')
local set = function()
util.load()
end
return { set = set }

58
lua/rose-pine/palette.lua Normal file
View file

@ -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

259
lua/rose-pine/theme.lua Normal file
View file

@ -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

69
lua/rose-pine/util.lua Normal file
View file

@ -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

78
readme.md Normal file
View file

@ -0,0 +1,78 @@
<p align="center">
<img src="https://github.com/rose-pine/rose-pine-theme/raw/main/assets/icon.png" width="80" />
<h2 align="center">Rosé Pine for Neovim</h2>
</p>
<p align="center">All natural pine, faux fur and a bit of soho vibes for the classy minimalist</p>
<p align="center">
<a href="https://github.com/rose-pine/rose-pine-theme">
<img src="https://img.shields.io/badge/community-rosé%20pine-26233a?labelColor=191724&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUwIiBoZWlnaHQ9IjIzNyIgdmlld0JveD0iMCAwIDI1MCAyMzciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xNjEuMjI3IDE2MS4yNTFDMTMyLjE1NCAxNjkuMDQxIDExNC45MDEgMTk4LjkyNCAxMjIuNjkxIDIyNy45OTdDMTIzLjkyNSAyMzIuNjAzIDEyOC42NTkgMjM1LjMzNiAxMzMuMjY0IDIzNC4xMDJMMTg1LjkwNyAyMTkuOTk2QzIxOS41ODUgMjEwLjk3MiAyMzkuNTcgMTc2LjM1NCAyMzAuNTQ2IDE0Mi42NzdMMTYxLjIyNyAxNjEuMjUxWiIgZmlsbD0iIzI0NjI3QiIvPgo8cGF0aCBkPSJNODguMTgzNiAxNTkuOTg4QzExNy4yNTcgMTY3Ljc3OCAxMzQuNTEgMTk3LjY2MiAxMjYuNzIgMjI2LjczNUMxMjUuNDg2IDIzMS4zNCAxMjAuNzUyIDIzNC4wNzMgMTE2LjE0NyAyMzIuODM5TDYzLjUwNDEgMjE4LjczM0MyOS44MjY0IDIwOS43MSA5Ljg0MDk0IDE3NS4wOTIgMTguODY0OSAxNDEuNDE0TDg4LjE4MzYgMTU5Ljk4OFoiIGZpbGw9IiMyNDYyN0IiLz4KPHBhdGggZD0iTTE4Ni44NjcgMTcyLjk4QzE1Mi4wMDIgMTcyLjk4IDEyMy43MzcgMjAxLjI0NSAxMjMuNzM3IDIzNi4xMTFIMTg2Ljg3QzIyMS43MzYgMjM2LjExMSAyNTAgMjA3Ljg0NiAyNTAgMTcyLjk4TDE4Ni44NjcgMTcyLjk4WiIgZmlsbD0iIzMxNzQ4RiIvPgo8cGF0aCBkPSJNNjMuMTMyNyAxNzIuOThDOTcuOTk4NCAxNzIuOTggMTI2LjI2MyAyMDEuMjQ1IDEyNi4yNjMgMjM2LjExMUg2My4xM0MyOC4yNjQyIDIzNi4xMTEgLTEuNTI0MDNlLTA2IDIwNy44NDYgMCAxNzIuOThMNjMuMTMyNyAxNzIuOThaIiBmaWxsPSIjMzE3NDhGIi8+CjxwYXRoIGQ9Ik0xNzEuNzE3IDc1LjEyNjNDMTcxLjcxNyAxMDEuMjc2IDE1MC41MTggMTIyLjQ3NSAxMjQuMzY5IDEyMi40NzVDOTguMjE4OCAxMjIuNDc1IDc3LjAyMDIgMTAxLjI3NiA3Ny4wMjAyIDc1LjEyNjNDNzcuMDIwMiA0OC45NzY0IDk4LjIxODggMjcuNzc3OCAxMjQuMzY5IDI3Ljc3NzhDMTUwLjUxOCAyNy43Nzc4IDE3MS43MTcgNDguOTc2NCAxNzEuNzE3IDc1LjEyNjNaIiBmaWxsPSIjRUJCQ0JBIi8+CjxwYXRoIGQ9Ik0xNDQuMjE3IDg2LjIzNzlDMTYxLjY0OSA1Ni4wNDMyIDE1MS4zMDMgMTcuNDMyOSAxMjEuMTA4IDBMMTA2LjA2IDI2LjA2NDRDODguNjI3IDU2LjI1OSA5OC45NzM2IDk0Ljg2OTQgMTI5LjE2OCAxMTIuMzAyTDE0NC4yMTcgODYuMjM3OVoiIGZpbGw9IiNFQkJDQkEiLz4KPHBhdGggZD0iTTEyNS4yOTkgNjAuOTc4OUMxMTYuMjc1IDI3LjMwMTIgODEuNjU3NSA3LjMxNTY3IDQ3Ljk3OTcgMTYuMzM5Nkw2NC4zMTk3IDc3LjMyMTFDNzMuMzQzNiAxMTAuOTk5IDEwNy45NjEgMTMwLjk4NCAxNDEuNjM5IDEyMS45NkwxMjUuMjk5IDYwLjk3ODlaIiBmaWxsPSIjRUJCQ0JBIi8+CjxwYXRoIGQ9Ik0xMjQuOTI2IDYwLjk3ODlDMTMzLjk1IDI3LjMwMTIgMTY4LjU2NyA3LjMxNTY3IDIwMi4yNDUgMTYuMzM5NkwxODUuOTA1IDc3LjMyMTFDMTc2Ljg4MSAxMTAuOTk5IDE0Mi4yNjMgMTMwLjk4NCAxMDguNTg2IDEyMS45NkwxMjQuOTI2IDYwLjk3ODlaIiBmaWxsPSIjRUJCQ0JBIi8+Cjwvc3ZnPgo=&style=for-the-badge" />
</a>
</p>
## 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)