Compare commits

..

No commits in common. "main" and "v0.0.1" have entirely different histories.

27 changed files with 630 additions and 2202 deletions

View file

@ -1,12 +0,0 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = tab
insert_final_newline = true
trim_trailing_whitespace = true
[*.{yaml,yml}]
indent_size = 2
indent_style = space

View file

@ -1,54 +0,0 @@
name: Bug Report
description: File a bug/issue
title: "bug: "
labels: [bug]
body:
- type: markdown
attributes:
value: |
**Before** reporting an issue, make sure to read the [documentation](https://github.com/rose-pine/neovim) and search [existing issues](https://github.com/rose-pine/neovim/issues). Usage questions such as ***"How do I...?"*** belong in [Discussions](https://github.com/rose-pine/neovim/discussions) and will be closed.
- type: input
attributes:
label: "Neovim version (nvim -v)"
placeholder: "0.8.0 commit db1b0ee3b30f"
validations:
required: true
- type: input
attributes:
label: "Terminal / multiplexer"
placeholder: "Kitty / tmux"
validations:
required: true
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is. Please include screenshots if possible and any related errors you see in Neovim.
validations:
required: true
- type: textarea
attributes:
label: Repro
description: Minimal `init.lua` to reproduce this issue. Save as `repro.lua` and run with `nvim -u repro.lua`
value: |
vim.o.packpath = "/tmp/nvim/site"
local plugins = {
rose_pine = "https://github.com/rose-pine/neovim",
-- ADD OTHER PLUGINS _NECESSARY_ TO REPRODUCE THE ISSUE
}
for name, url in pairs(plugins) do
local install_path = "/tmp/nvim/site/pack/test/start/" .. name
if vim.fn.isdirectory(install_path) == 0 then
vim.fn.system({ "git", "clone", "--depth=1", url, install_path })
end
end
require("rose-pine").setup({
-- ADD ROSÉ PINE CONFIG THAT IS _NECESSARY_ TO REPRODUCE THE ISSUE
})
vim.cmd("colorscheme rose-pine")
render: Lua
validations:
required: false

View file

@ -1,17 +0,0 @@
name: Feature Request
description: Suggest a new feature
title: "feature: "
labels: [enhancement]
body:
- type: textarea
validations:
required: true
attributes:
label: Describe the solution you'd like
description: A clear and concise description of what you want to happen.
- type: textarea
validations:
required: false
attributes:
label: Additional context
description: Add any other context or screenshots about the feature request here.

View file

@ -1,82 +0,0 @@
# Changelog
## v2.0.0-next.1
### What's new
- Add proper support for `StatusLineTerm` & `StatusLineTermNC`, controlled via `enable.terminal`
- Add background glow to diagnostic virtual text
- Add `extend_background_behind_borders`
- Add `styles.bold` and alternatively styling when disabled
- Add `before_highlight` hook to allow changing palette values and behaviours
- Increase contrast of search, visual selections, and more
### Features
**extend_background_behind_borders**
Extend float backgrounds behind borders. Results vary depending on your border characters.
```lua
{
extend_background_behind_borders = true
}
```
**styles.transparency**
Enable a unique experience focused around transparent terminals, avoiding large backgrounds and differentiating selections with foreground colours when possible.
```lua
{
styles = {
transparency = true
}
}
```
**before_highlight**
```lua
{
before_highlight = function(group, highlight, palette)
-- Disable all undercurls
if highlight.undercurl then
highlight.undercurl = false
end
-- Change palette colour
if highlight.fg == palette.pine then
highlight.fg = palette.foam
end
end,
}
```
### Breaking changes
> [!WARNING]
> Removed or renamed options should continue to work via internal migrations but backwards compatibility is not tested and may break at any time.
```diff
- dim_nc_background = true,
+ dim_inactive_windows = true,
- disable_background = true,
- disable_float_background = true,
+ styles.transparency = true
- disable_italics = true,
+ styles.italic = false,
- groups = {
- background = "...",
- comment = "...",
- punctuation = "...",
- },
+ highlight_groups = {
+ Normal = { bg = "..." },
+ Comment = { fg = "..." },
+ ["@punctuation"] = { fg = "..." },
+ }
```

View file

@ -1,2 +0,0 @@
package.loaded["rose-pine.palette"] = nil
require("rose-pine").colorscheme("dawn")

View file

@ -1,2 +0,0 @@
package.loaded["rose-pine.palette"] = nil
require("rose-pine").colorscheme("main")

View file

@ -1,2 +0,0 @@
package.loaded["rose-pine.palette"] = nil
require("rose-pine").colorscheme("moon")

View file

@ -1,2 +0,0 @@
package.loaded["rose-pine.palette"] = nil
require("rose-pine").colorscheme()

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

21
license
View file

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2023 Rosé Pine
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,32 +0,0 @@
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 = {
a = { bg = p.surface, fg = p.rose, gui = "bold" },
b = { bg = p.surface, fg = p.text },
c = { bg = p.surface, fg = p.subtle, gui = "italic" },
},
insert = {
a = { bg = p.surface, fg = p.foam, gui = "bold" },
},
visual = {
a = { bg = p.surface, fg = p.iris, gui = "bold" },
},
replace = {
a = { bg = p.surface, fg = p.pine, gui = "bold" },
},
command = {
a = { bg = p.surface, fg = p.love, gui = "bold" },
},
inactive = {
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" },
},
}

View file

@ -1,40 +1,34 @@
local p = require("rose-pine.palette")
local config = require("rose-pine.config")
local bg_base = p.surface
if config.options.styles.transparency then
bg_base = "NONE"
end
local colors = require('rose-pine.palette')
return {
normal = {
a = { bg = p.rose, fg = p.base, gui = "bold" },
b = { bg = p.overlay, fg = p.rose },
c = { bg = bg_base, fg = p.text },
a = { bg = colors.rose, fg = colors.base, gui = 'bold' },
b = { bg = colors.overlay, fg = colors.rose },
c = { bg = colors.base, fg = colors.text },
},
insert = {
a = { bg = p.foam, fg = p.base, gui = "bold" },
b = { bg = p.overlay, fg = p.foam },
c = { bg = bg_base, fg = p.text },
a = { bg = colors.foam, fg = colors.base, gui = 'bold' },
b = { bg = colors.overlay, fg = colors.foam },
c = { bg = colors.base, fg = colors.text },
},
visual = {
a = { bg = p.iris, fg = p.base, gui = "bold" },
b = { bg = p.overlay, fg = p.iris },
c = { bg = bg_base, fg = p.text },
a = { bg = colors.iris, fg = colors.base, gui = 'bold' },
b = { bg = colors.overlay, fg = colors.iris },
c = { bg = colors.base, fg = colors.text },
},
replace = {
a = { bg = p.pine, fg = p.base, gui = "bold" },
b = { bg = p.overlay, fg = p.pine },
c = { bg = bg_base, fg = p.text },
a = { bg = colors.pine, fg = colors.base, gui = 'bold' },
b = { bg = colors.overlay, fg = colors.pine },
c = { bg = colors.base, fg = colors.text },
},
command = {
a = { bg = p.love, fg = p.base, gui = "bold" },
b = { bg = p.overlay, fg = p.love },
c = { bg = bg_base, fg = p.text },
a = { bg = colors.love, fg = colors.base, gui = 'bold' },
b = { bg = colors.overlay, fg = colors.love },
c = { bg = colors.base, fg = colors.text },
},
inactive = {
a = { bg = bg_base, fg = p.muted, gui = "bold" },
b = { bg = bg_base, fg = p.muted },
c = { bg = bg_base, fg = p.muted },
a = { bg = colors.base, fg = colors.inactive, gui = 'bold' },
b = { bg = colors.base, fg = colors.inactive },
c = { bg = colors.base, fg = colors.inactive },
},
}

File diff suppressed because it is too large Load diff

View file

@ -1,176 +0,0 @@
---@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 { 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 = {}
---@class Options
config.options = {
---Set the desired variant: "auto" will follow the vim background,
---defaulting to `dark_variant` or "main" for dark and "dawn" for light.
---@type "auto" | Variant
variant = "auto",
---Set the desired dark variant when `options.variant` is set to "auto".
---@type Variant
dark_variant = "main",
---Differentiate between active and inactive windows and panels.
dim_inactive_windows = false,
---Extend background behind borders. Appearance differs based on which
---border characters you are using.
extend_background_behind_borders = true,
enable = {
legacy_highlights = true,
migrations = true,
terminal = true,
},
styles = {
bold = true,
italic = true,
transparency = false,
},
---@type table<string, table<string, string>>
palette = {},
---@type table<string, string | PaletteColor>
groups = {
border = "muted",
link = "iris",
panel = "surface",
error = "love",
hint = "iris",
info = "foam",
ok = "leaf",
warn = "gold",
note = "pine",
todo = "rose",
git_add = "foam",
git_change = "rose",
git_delete = "love",
git_dirty = "rose",
git_ignore = "muted",
git_merge = "iris",
git_rename = "pine",
git_stage = "iris",
git_text = "rose",
git_untracked = "subtle",
---@type string | PaletteColor
h1 = "iris",
h2 = "foam",
h3 = "rose",
h4 = "gold",
h5 = "pine",
h6 = "leaf",
---@deprecated Replaced by `options.highlight_groups["Normal"]`
-- background = "base",
---@deprecated Replaced by `options.highlight_groups["Comment"]`
-- comment = "subtle",
---@deprecated Replaced by `options.highlight_groups["@punctuation"]`
-- punctuation = "muted",
---@deprecated Expects a table with values h1...h6
-- headings = "text",
},
---@type table<string, Highlight>
highlight_groups = {},
---Called before each highlight group, before setting the highlight.
---@param group string
---@param highlight Highlight
---@param palette Palette
---@diagnostic disable-next-line: unused-local
before_highlight = function(group, highlight, palette) end,
---@deprecated Replaced by `options.dim_inactive_windows`
-- dim_nc_background = false,
---@deprecated Replaced by `options.enable.transparency`
-- disable_background = false,
---@deprecated Replaced by `options.highlight_groups["NormalFloat"]`
-- disable_float_background = false,
---@deprecated Replaced by `options.styles.italic`
-- disable_italics = false,
---@deprecated Replaced by `options.highlight_groups`
-- bold_vert_split = false
}
local function migrate(options)
if options.bold_vert_split then
local border = options.groups.border or "muted"
options.highlight_groups["VertSplit"] = { fg = border, bg = border }
options.highlight_groups["WinSeparator"] = { fg = border, bg = border }
end
if options.disable_background then
options.highlight_groups["Normal"] = { bg = "NONE" }
end
if options.disable_float_background then
options.highlight_groups["NormalFloat"] = { bg = "NONE" }
end
options.dim_inactive_windows = options.dim_nc_background or options.dim_inactive_windows
if options.groups.background ~= nil then
options.highlight_groups["Normal"] = { bg = options.groups.background }
end
if options.groups.comment ~= nil then
options.highlight_groups["Comment"] = { fg = options.groups.comment }
end
if options.groups.punctuation ~= nil then
options.highlight_groups["@punctuation"] = { fg = options.groups.punctuation }
end
options.styles.transparency = (options.disable_background and options.disable_float_background)
or options.styles.transparency
-- These never actually existed, but may be set intuitively by the user
-- because of `disable_italics` existing.
options.styles.bold = 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 = 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
options.groups.h1 = options.groups.headings
options.groups.h2 = options.groups.headings
options.groups.h3 = options.groups.headings
options.groups.h4 = options.groups.headings
options.groups.h5 = options.groups.headings
options.groups.h6 = options.groups.headings
elseif options.groups.headings == "table" then
options.groups.h1 = options.groups.headings.h1 or options.groups.h1
options.groups.h2 = options.groups.headings.h2 or options.groups.h2
options.groups.h3 = options.groups.headings.h3 or options.groups.h3
options.groups.h4 = options.groups.headings.h4 or options.groups.h4
options.groups.h5 = options.groups.headings.h5 or options.groups.h5
options.groups.h6 = options.groups.headings.h6 or options.groups.h6
end
options.groups.headings = nil
return options
end
---@param options Options | nil
function config.extend_options(options)
config.options = vim.tbl_deep_extend("force", config.options, options or {})
if config.options.enable.migrations then
config.options = migrate(config.options)
end
end
return config

View file

@ -0,0 +1,35 @@
local select_variant = function(variant)
vim.g.rose_pine_variant = variant
local formatted_variant = ''
if variant == 'base' then
formatted_variant = ''
else
formatted_variant = variant:sub(1, 1):upper() .. variant:sub(2)
end
print('Rosé Pine', formatted_variant)
vim.cmd([[colorscheme rose-pine]])
end
local toggle_variant = function(variants)
local options = variants or { 'base', 'moon', 'dawn' }
local index = {}
for k, v in pairs(options) do
index[v] = k
end
if vim.g.rose_pine_variant_switch == nil then
-- Ensure theme toggles from correct position
vim.g.rose_pine_variant_switch = index[vim.g.rose_pine_variant] or 0
end
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 }

View file

@ -1,78 +1,64 @@
local options = require("rose-pine.config").options
local variants = {
main = {
_nc = "#16141f",
base = "#191724",
surface = "#1f1d2e",
overlay = "#26233a",
muted = "#6e6a86",
subtle = "#908caa",
text = "#e0def4",
love = "#eb6f92",
gold = "#f6c177",
rose = "#ebbcba",
pine = "#31748f",
foam = "#9ccfd8",
iris = "#c4a7e7",
leaf = "#95b1ac",
highlight_low = "#21202e",
highlight_med = "#403d52",
highlight_high = "#524f67",
none = "NONE",
},
moon = {
_nc = "#1f1d30",
base = "#232136",
surface = "#2a273f",
overlay = "#393552",
muted = "#6e6a86",
subtle = "#908caa",
text = "#e0def4",
love = "#eb6f92",
gold = "#f6c177",
rose = "#ea9a97",
pine = "#3e8fb0",
foam = "#9ccfd8",
iris = "#c4a7e7",
leaf = "#95b1ac",
highlight_low = "#2a283e",
highlight_med = "#44415a",
highlight_high = "#56526e",
none = "NONE",
},
dawn = {
_nc = "#f8f0e7",
base = "#faf4ed",
surface = "#fffaf3",
overlay = "#f2e9e1",
muted = "#9893a5",
subtle = "#797593",
text = "#464261",
love = "#b4637a",
gold = "#ea9d34",
rose = "#d7827e",
pine = "#286983",
foam = "#56949f",
iris = "#907aa9",
leaf = "#6d8f89",
highlight_low = "#f4ede8",
highlight_med = "#dfdad9",
highlight_high = "#cecacd",
none = "NONE",
},
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 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
if
vim.g.rose_pine_variant == 'dawn'
or vim.g.rose_pine_variant == 'rose-pine-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'
or vim.g.rose_pine_variant == 'rose-pine-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
if variants[options.variant] ~= nil then
return variants[options.variant]
end
return vim.o.background == "light" and variants.dawn or variants[options.dark_variant or "main"]
return palette

View file

@ -1,223 +0,0 @@
--- Rosé Pine for bufferline
--- https://github.com/akinsho/bufferline.nvim
---
--- @usage
--- local highlights = require("rose-pine.plugins.bufferline")
--- require("bufferline").setup({ highlights = highlights })
local p = require("rose-pine.palette")
return {
-- fill = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- background = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- tab = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
tab_selected = {
fg = p.text,
bg = p.overlay,
},
-- tab_close = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- close_button = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- close_button_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- close_button_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
buffer_visible = {
fg = p.subtle,
bg = p.base,
},
buffer_selected = {
fg = p.text,
bg = p.surface,
bold = true,
italic = true,
},
-- diagnostic = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- diagnostic_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- diagnostic_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- },
-- info = {
-- fg = "<color-value-here>",
-- sp = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- info_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- info_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- sp = "<color-value-here>",
-- },
-- info_diagnostic = {
-- fg = "<color-value-here>",
-- sp = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- info_diagnostic_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- info_diagnostic_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- sp = "<color-value-here>",
-- },
-- warning = {
-- fg = "<color-value-here>",
-- sp = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- warning_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- warning_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- sp = "<color-value-here>",
-- },
-- warning_diagnostic = {
-- fg = "<color-value-here>",
-- sp = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- warning_diagnostic_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- warning_diagnostic_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- sp = warning_diagnostic_fg,
-- },
-- error = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- sp = "<color-value-here>",
-- },
-- error_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- error_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- sp = "<color-value-here>",
-- },
-- error_diagnostic = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- sp = "<color-value-here>",
-- },
-- error_diagnostic_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- error_diagnostic_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- sp = "<color-value-here>",
-- },
-- modified = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- modified_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- modified_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- duplicate_selected = {
-- fg = "<color-value-here>",
-- italic = true,
-- bg = "<color-value-here>",
-- },
-- duplicate_visible = {
-- fg = "<color-value-here>",
-- italic = true,
-- bg = "<color-value-here>",
-- },
-- duplicate = {
-- fg = "<color-value-here>",
-- italic = true,
-- bg = "<color-value-here>",
-- },
-- separator_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- separator_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- separator = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- indicator_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- },
-- pick_selected = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- italic = true,
-- },
-- pick_visible = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- },
-- pick = {
-- fg = "<color-value-here>",
-- bg = "<color-value-here>",
-- bold = true,
-- italic = true,
-- },
}

View file

@ -1,20 +0,0 @@
--- Rosé Pine for galaxyline fork
--- https://github.com/NTBBloodbath/galaxyline.nvim
---
--- @usage
--- local highlights = require("rose-pine.plugins.galaxyline")
local p = require("rose-pine.palette")
return {
bg = p.surface,
fg = p.text,
fg_alt = p.subtle,
yellow = p.gold,
cyan = p.rose,
green = p.pine,
orange = p.muted,
magenta = p.iris,
blue = p.foam,
red = p.love,
}

View file

@ -1,10 +0,0 @@
--- Rosé Pine for markid
--- https://github.com/David-Kunz/markid
---
--- @usage
--- local highlights = require("rose-pine.plugins.markid")
--- require("nvim-treesitter.configs").setup({ markid = { enable = true, colors = highlights } })
local p = require("rose-pine.palette")
return { p.foam, p.rose, p.iris }

View file

@ -1,14 +0,0 @@
--- 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 }
}

View file

@ -1,15 +0,0 @@
--- Rosé Pine for toggleterm
--- https://github.com/akinsho/toggleterm.nvim
---
--- @usage
--- local highlights = require("rose-pine.plugins.toggleterm")
--- require("toggleterm").setup({ highlights = highlights })
return {
Normal = { link = "Normal" },
NormalFloat = { link = "Normal" },
FloatBorder = { link = "FloatBorder" },
SignColumn = { link = "SignColumn" },
StatusLine = { link = "StatusLine" },
StatusLineNC = { link = "StatusLineNC" },
}

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

@ -0,0 +1,353 @@
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 = vim.g.rose_pine_enable_italics and '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.foam },
Macro = { fg = p.iris },
Number = { fg = p.gold },
Operator = { fg = p.subtle },
PreCondit = { fg = p.iris },
PreProc = { fg = p.iris },
Repeat = { fg = p.pine },
Special = { fg = p.rose },
SpecialChar = { fg = p.rose },
SpecialComment = { fg = p.iris },
Statement = { fg = p.pine },
StorageClass = { fg = p.foam },
String = { fg = p.gold },
Structure = { fg = p.foam },
Tag = { fg = p.rose },
Title = { fg = p.text },
Todo = { fg = p.iris },
Type = { fg = p.foam },
Typedef = { fg = p.foam },
Underlined = { fg = p.foam, style = 'underline' },
-- html
htmlArg = { fg = p.iris },
htmlEndTag = { fg = p.subtle },
htmlLink = { fg = p.text },
htmlTag = { fg = p.subtle },
htmlTagN = { fg = p.love },
htmlTagName = { fg = p.foam },
}
return syntax
end
theme.loadEditor = function()
local editor = {
-- ColorColumn = {},
-- Conceal = {},
-- Cursor = {},
-- CursorColumn = {},
-- CursorIM = {},
CursorLine = { bg = p.highlight_inactive },
CursorLineNr = { fg = p.text },
DarkenedPanel = { bg = p.surface },
DarkenedStatusline = { bg = p.surface },
DiffAdd = { fg = p.foam },
DiffChange = { fg = p.rose },
DiffDelete = { fg = p.love },
DiffText = { fg = p.text },
Directory = { fg = p.foam, bg = p.none },
-- EndOfBuffer = {},
ErrorMsg = { fg = p.love, style = 'bold' },
FloatBorder = { fg = p.highlight, bg = p.surface },
-- FoldColumn = {},
Folded = { fg = p.text, bg = p.surface },
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 = { style = 'undercurl', sp = p.love },
SpellCap = { style = 'undercurl', sp = p.subtle },
SpellLocal = { style = 'undercurl', sp = p.subtle },
SpellRare = { style = 'undercurl', sp = p.subtle },
SignColumn = {},
StatusLine = { fg = p.text, bg = p.surface },
StatusLineNC = { fg = p.subtle, bg = p.surface },
-- 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_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.loadTreesitter = function()
local treesitter = {
-- TSAnnotation = {},
-- TSAttribute = {},
TSBoolean = { fg = p.rose },
-- TSCharacter = {},
TSComment = {
fg = p.subtle,
style = vim.g.rose_pine_enable_italics and 'italic',
},
-- TSConditional = {},
TSConstBuiltin = { fg = p.love },
-- TSConstMacro = {},
TSConstant = { fg = p.foam },
TSConstructor = { fg = p.foam },
-- TSEmphasis = {},
-- TSError = {},
-- TSException = {},
-- TSField = {},
-- TSFloat = {},
TSFuncBuiltin = { fg = p.love },
-- TSFuncMacro = {},
TSFunction = { fg = p.rose },
TSInclude = { fg = p.pine },
TSKeyword = { fg = p.pine },
-- TSKeywordFunction = {},
TSKeywordOperator = { fg = p.pine },
TSLabel = { fg = p.foam },
-- TSLiteral = {},
-- TSMethod = {},
-- TSNamespace = {},
-- TSNone = {},
-- TSNumber = {},
TSOperator = { fg = p.pine },
TSParameter = {
fg = p.iris,
style = vim.g.rose_pine_enable_italics and 'italic',
},
-- TSParameterReference = {},
TSProperty = {
fg = p.iris,
style = vim.g.rose_pine_enable_italics and 'italic',
},
TSPunctBracket = { fg = p.subtle },
TSPunctDelimiter = { fg = p.subtle },
TSPunctSpecial = { fg = p.subtle },
-- TSRepeat = {},
-- TSStrike = {},
TSString = { fg = p.gold },
TSStringEscape = { fg = p.pine },
-- TSStringRegex = {},
-- TSSymbol = {},
TSTag = { fg = p.foam },
TSTagDelimiter = { fg = p.subtle },
TSText = { fg = p.text },
-- TSTitle = {},
-- TSType = {},
-- TSTypeBuiltin = {},
TSURI = { fg = p.gold },
-- TSUnderline = {},
TSVariable = {
fg = p.text,
style = vim.g.rose_pine_enable_italics and 'italic',
},
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 },
BufferCurrentIndex = { fg = p.text, bg = p.overlay },
BufferCurrentMod = { fg = p.foam, bg = p.overlay },
BufferCurrentSign = { fg = p.subtle, bg = p.overlay },
BufferInactive = { fg = p.subtle },
BufferInactiveIndex = { fg = p.subtle },
BufferInactiveMod = { fg = p.foam },
BufferInactiveSign = { fg = p.subtle },
BufferVisible = { fg = p.subtle },
BufferVisibleIndex = { fg = p.subtle },
BufferVisibleMod = { fg = p.foam },
BufferVisibleSign = { fg = p.subtle },
-- gitsigns.nvim
-- https://github.com/lewis6991/gitsigns.nvim
SignAdd = { fg = p.foam },
SignChange = { fg = p.rose },
SignDelete = { fg = p.love },
GitSignsAdd = { fg = p.foam },
GitSignsChange = { fg = p.rose },
GitSignsDelete = { fg = p.love },
-- modes.nvim
-- https://github.com/mvllow/modes.nvim
ModesCopy = { bg = p.gold },
ModesDelete = { bg = p.love },
ModesInsert = { bg = p.foam },
ModesVisual = { bg = p.iris },
-- nvim-tree.lua
-- https://github.com/kyazdani42/nvim-tree.lua
NvimTreeNormal = { fg = p.text },
NvimTreeEmptyFolderName = { fg = p.inactive },
NvimTreeFolderIcon = { fg = p.subtle },
NvimTreeFolderName = { fg = p.foam },
NvimTreeOpenedFile = { fg = p.text, bg = p.highlight },
NvimTreeOpenedFolderName = { fg = p.foam },
NvimTreeRootFolder = { fg = p.iris },
NvimTreeGitDeleted = { fg = p.love },
NvimTreeGitDirty = { fg = p.rose },
NvimTreeGitMerge = { fg = p.iris },
NvimTreeGitNew = { fg = p.foam },
NvimTreeGitRenamed = { fg = p.pine },
NvimTreeGitStaged = { fg = p.iris },
NvimTreeFileDeleted = { fg = p.love },
NvimTreeFileDirty = { fg = p.rose },
NvimTreeFileMerge = { fg = p.iris },
NvimTreeFileNew = { fg = p.foam },
NvimTreeFileRenamed = { fg = p.pine },
NvimTreeFileStaged = { fg = p.iris },
-- which-key.nvim
-- https://github.com/folke/which-key.nvim
WhichKey = { fg = p.iris },
WhichKeyGroup = { fg = p.foam },
WhichKeySeparator = { fg = p.subtle },
WhichKeyDesc = { fg = p.gold },
WhichKeyFloat = { bg = p.surface },
WhichKeyValue = { fg = p.rose },
-- todo-comments.nvim
-- https://github.com/folke/todo-comments.nvim
TodoBgFIX = { fg = '#000000', bg = p.love },
TodoFgFIX = { fg = p.love, bg = p.base },
TodoSignFIX = { fg = p.love, bg = p.base },
TodoBgTODO = { fg = '#000000', bg = p.rose },
TodoFgTODO = { fg = p.rose, bg = p.base },
TodoSignTODO = { fg = p.rose, bg = p.base },
TodoBgHACK = { fg = '#ffffff', bg = p.pine },
TodoFgHACK = { fg = p.pine, bg = p.base },
TodoSignHACK = { fg = p.pine, bg = p.base },
TodoBgWARN = { fg = '#000000', bg = p.gold },
TodoFgWARN = { fg = p.gold, bg = p.base },
TodoSignWARN = { fg = p.gold, bg = p.base },
TodoBgPERF = { fg = '#000000', bg = p.foam },
TodoFgPERF = { fg = p.foam, bg = p.base },
TodoSignPERF = { fg = p.foam, bg = p.base },
TodoBgNOTE = { fg = '#000000', bg = p.iris },
TodoFgNOTE = { fg = p.iris, bg = p.base },
TodoSignNOTE = { fg = p.iris, bg = p.base },
}
return plugins
end
return theme

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

@ -0,0 +1,81 @@
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'
or vim.g.rose_pine_variant == 'rose-pine-dawn'
then
vim.opt.background = 'light'
else
vim.opt.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

View file

@ -1,65 +0,0 @@
local utilities = {}
---@param color string
local function color_to_rgb(color)
local function byte(value, offset)
return bit.band(bit.rshift(value, offset), 0xFF)
end
local new_color = vim.api.nvim_get_color_by_name(color)
if new_color == -1 then
new_color = vim.opt.background:get() == "dark" and 000 or 255255255
end
return { byte(new_color, 16), byte(new_color, 8), byte(new_color, 0) }
end
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
print("Invalid color: " .. color)
return nil
end
color = color:lower()
if not color:find("#") and color ~= "NONE" then
color = require("rose-pine.palette")[color] or vim.api.nvim_get_color_by_name(color)
end
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)
local function blend_channel(i)
local ret = (alpha * fg_rgb[i] + ((1 - alpha) * bg_rgb[i]))
return math.floor(math.min(math.max(0, ret), 255) + 0.5)
end
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

177
readme.md
View file

@ -11,151 +11,102 @@
</a>
</p>
## Getting started
## Install
Install `rose-pine/neovim` using your favourite package manager:
### [pam.nvim](https://github.com/mvllow/pam.nvim)
Install via your preferred package manager
```lua
{ source = "rose-pine/neovim", as = "rose-pine" }
-- Packer
use({ 'rose-pine/neovim', as = 'rose-pine' })
```
### [lazy.nvim](https://lazy.folke.io/installation)
## Usage
**Structured Setup**
Enable `rose-pine` colorscheme
```lua
-- lua/plugins/rose-pine.lua
return {
"rose-pine/neovim",
name = "rose-pine",
config = function()
vim.cmd("colorscheme rose-pine")
end
}
-- Lua
vim.cmd('colorscheme rose-pine')
```
**Single file**
```vim
" Vimscript
colorscheme rose-pine
```
Enable [lualine](https://github.com/hoob3rt/lualine.nvim) plugin
```lua
{ "rose-pine/neovim", name = "rose-pine" }
-- Lua
require('lualine').setup({
options = {
theme = 'rose-pine'
}
})
```
## Plugin Support
- [Treesitter](https://github.com/nvim-treesitter/nvim-treesitter)
- [LSP diagnostics](https://neovim.io/doc/user/lsp.html)
- [Barbar](https://github.com/romgrk/barbar.nvim)
- [Gitsigns](https://github.com/lewis6991/gitsigns.nvim)
- [Modes](https://github.com/mvllow/modes.nvim)
- [NvimTree](https://github.com/kyazdani42/nvim-tree.lua)
- [WhichKey](https://github.com/folke/which-key.nvim)
- [Todo Comments](https://github.com/folke/todo-comments.nvim)
- [Lualine](https://github.com/hoob3rt/lualine.nvim)
## Gallery
**Rosé Pine**
![Rosé Pine with Neovim](https://user-images.githubusercontent.com/1973/163921570-0f577baf-3199-4f09-9779-a7eb9238151a.png)
![Rosé Pine with Neovim](assets/rose-pine.png)
**Rosé Pine Moon**
![Rosé Pine Moon with Neovim](https://user-images.githubusercontent.com/1973/163921620-d3acd0d2-d227-4d28-a5e8-97ff22e56c6d.png)
![Rosé Pine Moon with Neovim](assets/rose-pine-moon.png)
**Rosé Pine Dawn**
![Rosé Pine Dawn with Neovim](https://user-images.githubusercontent.com/1973/163921656-644a2db3-c55c-4e89-9bdd-39cdd7a2681b.png)
![Rosé Pine Dawn with Neovim](assets/rose-pine-dawn.png)
## Options
> [!IMPORTANT]
> Configure options _before_ setting colorscheme.
Rosé Pine has three variants: main, moon, and dawn. By default, `vim.o.background` is followed, using dawn when light and `dark_variant` when dark.
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({
variant = "auto", -- auto, main, moon, or dawn
dark_variant = "main", -- main, moon, or dawn
dim_inactive_windows = false,
extend_background_behind_borders = true,
-- Set variant
-- @usage 'base' | 'moon' | 'dawn' | 'rose-pine[-moon][-dawn]'
vim.g.rose_pine_variant = 'base'
enable = {
terminal = true,
legacy_highlights = true, -- Improve compatibility for previous versions of Neovim
migrations = true, -- Handle deprecated options automatically
},
-- Enable italics
vim.g.rose_pine_enable_italics = true
styles = {
bold = true,
italic = true,
transparency = false,
},
groups = {
border = "muted",
link = "iris",
panel = "surface",
error = "love",
hint = "iris",
info = "foam",
note = "pine",
todo = "rose",
warn = "gold",
git_add = "foam",
git_change = "rose",
git_delete = "love",
git_dirty = "rose",
git_ignore = "muted",
git_merge = "iris",
git_rename = "pine",
git_stage = "iris",
git_text = "rose",
git_untracked = "subtle",
h1 = "iris",
h2 = "foam",
h3 = "rose",
h4 = "gold",
h5 = "pine",
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)
-- Disable all undercurls
-- if highlight.undercurl then
-- highlight.undercurl = false
-- end
--
-- Change palette colour
-- if highlight.fg == palette.pine then
-- highlight.fg = palette.foam
-- end
end,
})
vim.cmd("colorscheme rose-pine")
-- vim.cmd("colorscheme rose-pine-main")
-- vim.cmd("colorscheme rose-pine-moon")
-- vim.cmd("colorscheme rose-pine-dawn")
-- Use terminal background
-- Note: Set to true to fix any funky background colors
vim.g.rose_pine_disable_background = false
```
> [!NOTE]
> Visit the [wiki](https://github.com/rose-pine/neovim/wiki) for [plugin configurations](https://github.com/rose-pine/neovim/wiki/Plugin-configurations) and [recipes](https://github.com/rose-pine/neovim/wiki/Recipes).
## Functions
## Contributing
```lua
-- Toggle between the three variants
require('rose-pine.functions').toggle_variant()
We welcome and appreciate contributions of any kind. Create an issue or start a discussion for any proposed changes. Pull requests are encouraged for supporting additional plugins or [treesitter improvements](https://github.com/nvim-treesitter/nvim-treesitter/blob/master/CONTRIBUTING.md#highlights).
-- Toggle between base and dawn
require('rose-pine.functions').toggle_variant({'base', 'dawn'})
Feel free to update the [wiki](https://github.com/rose-pine/neovim/wiki/) with any [recipes](https://github.com/rose-pine/neovim/wiki/Recipes).
-- Switch to specified variant
require('rose-pine.functions').select_variant('moon')
```
## Keymaps
```lua
-- Toggle variant
vim.api.nvim_set_keymap('n', '<c-m>', [[<cmd>lua require('rose-pine.functions').toggle_variant()<cr>]], { noremap = true, silent = true })
-- Select each variant
vim.api.nvim_set_keymap('n', '<c-8>', [[<cmd>lua require('rose-pine.functions').select_variant('dawn')<cr>]], { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<c-9>', [[<cmd>lua require('rose-pine.functions').select_variant('moon')<cr>]], { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<c-0>', [[<cmd>lua require('rose-pine.functions').select_variant('base')<cr>]], { noremap = true, silent = true })
```

3
stylua.toml Normal file
View file

@ -0,0 +1,3 @@
column_width = 80
indent_type = "Tabs"
quote_style = "AutoPreferSingle"