A set of monochromatic light and dark color schemes for Neovim, inspired by huytd/vscode-github-light-monochrome and Nishantdd/github-monochrome-zed.
The following styles (themes) are available: light, dark, solarized, tokyonight, rosepine, and rosepine-dawn. Extra themes are included for Alacritty and Ghostty.
The project structure follows closely Tokyonight.nvim. Therefore, the theme configuration is very similar, and thanks to this, it allows for a high degree of customization (see bellow).
The following styles are available:
solarized
Activate with vim.cmd.colorscheme("github-monochrome-solarized")
.
This style is based on edheltzel/vscode-better-solarized and maxmx03/solarized.nvim
rosepine
Activate with vim.cmd.colorscheme("github-monochrome-rosepine")
.
This style is based on rose-pine/neovim.
rosepine-dawn
Activate with vim.cmd.colorscheme("github-monochrome-rosepine-dawn")
.
This style is based on rose-pine/neovim.
tokyonight
Activate with vim.cmd.colorscheme("github-monochrome-tokyonight")
This style is based on folke/tokyonight.nvim.
- Neovim >= 0.8.0
Install with your preferred package manager, or with lazy.nvim:
{
"idr4n/github-monochrome.nvim",
lazy = false,
priority = 1000,
opts = {},
}
To enable the theme with the default style (i.e., light
) or with the style defined in your custom settings, use:
vim.cmd.colorscheme("github-monochrome")
To enable the theme with a specific style, use:
vim.cmd.colorscheme("github-monochrome-light")
vim.cmd.colorscheme("github-monochrome-dark")
vim.cmd.colorscheme("github-monochrome-solarized")
vim.cmd.colorscheme("github-monochrome-tokyonight")
vim.cmd.colorscheme("github-monochrome-rosepine")
vim.cmd.colorscheme("github-monochrome-rosepine-dawn")
The configuration is very similar to that of tokyonight.nivm, with a few less options available, and few more to control styling.
Default Options
{
style = "light", -- "light", "dark", "solarized", "tokyonight", "rosepine", "rosepine-dawn"
transparent = false,
terminal_colors = true, -- Configure the colors used when opening a `:terminal`
lualine_bold = { a = true, b = false, c = false }, -- make lualine sections a, b, or c bold
styles = {
comments = { italic = true },
keywords = { bold = true },
functions = { bold = true },
statements = { bold = true }, -- e.g., try/except statements, but also if, for, etc.
conditionals = { bold = true }, -- e.g., if statements
loops = { bold = true }, -- e.g., for, while statements
variables = {},
floats = "normal", -- "dark", "transparent" or "normal"
sidebars = "normal", -- "dark", "transparent" or "normal"
},
--- You can override specific color groups to use other groups or a hex color
---@param colors ColorScheme
--- @param style? "light"|"dark"|"solarized"|"tokyonight"|"rosepine"|"rosepine-dawn"
on_colors = function(colors, style) end,
--- You can override specific highlights to use other groups or a hex color
---@param highlights gm.Highlights
---@param colors ColorScheme
--- @param style? "light"|"dark"|"solarized"|"tokyonight"|"rosepine"|"rosepine-dawn"
on_highlights = function(highlights, colors, style) end,
---@type table<string, boolean|{enabled:boolean}>
plugins = {
-- set to false to manually enable plugins
-- or set to true and then manually disable plugins
all = true,
-- add any plugins that you want to enable/disable from those supported
-- telescope = false,
-- ["indent-blankline"] = false
},
}
Example:
{
styles = {
comments = { italic = false },
conditionals = { bold = true },
loops = { bold = true },
variables = {},
floats = "dark",
sidebars = "dark",
},
on_colors = function(c, s)
-- applies to all styles
-- c.bg = vim.o.background == "light" and c.bg or "#000000"
c.number = c.purple
-- applies to 'light' style only
if s == "light" then
c.bg = "#F4F4F4"
end
end,
on_highlights = function(hl, c, s)
-- applies to all styles
hl.IblScope = { fg = "#634E89" }
hl.FloatBorder = { fg = c.magenta }
hl.TreesitterContext = { bg = c.none }
hl.TreesitterContextBottom = { underline = true, sp = c.magenta }
-- applies to 'light' style only
if s == "light" then
hl.FloatBorder = { fg = c.red }
end
-- applies to 'solarized' style only
if s == "solarized" then
hl.IblScope = { fg = "#62868C" }
end
end,
}
Currently, the following plugins are supported (more will be added as needed):
(use the name in parenthesis to enable/disable in config)
- blink.cmp (blink)
- gitsigns.nvim (gitsigns)
- glance.nvim (glance)
- indent-blankline.nvim (indent-blankline)
- mini.pick (mini_pick)
- mini.tabline (mini_tabline)
- neo-tree.nvim (neo-tree)
- noice.nvim (noice)
- nvim-cmp (cmp)
- nvim-notify (notify)
- nvim-tree.lua (nvim-tree)
- nvim-treesitter-context (treesitter-context)
- render-markdown.nvim (render-markdown)
- telescope.nvim (telescope)
- snacks indent (snacks_indent)
- snacks picker (snacks_picker)
- vim-illuminate (illuminate)
- which-key.nvim (which-key)
- folke/tokyonight: made this plugin possible (standing on the shoulders of giants!).
- huytd/vscode-github-light-monochrome: where inspiration came from.
- Nishantdd/github-monochrome-zed: nice tweaking to VSCode's version.
- projekt0n/github-nvim-theme: general reference.