diff --git a/LICENSE b/LICENSE
index 6e4c3a1..163a455 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,16 @@
-MIT License
+nvim-highlite – A colorscheme template for Neovim.
+Copyright © 2020 Iron-E
-Copyright (c) 2019 Romain Lafourcade
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
-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:
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
-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.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index b07b64c..0000000
--- a/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-####### ## ## #######
-## ## ### ## ## ##
-## ## #### ## ## ##
-####### ## ## ## #######
-## ## ## #### ## ##
-## ## ## ### ## ##
-## ## ## ## #######
-
-VIM_OUTPUTS = $(patsubst %.erb,%.vim,$(wildcard colors/*.erb))
-
-.PHONY: all
-
-all: $(VIM_OUTPUTS)
-
-%.vim: %.erb
- erb -T - $< > $@
diff --git a/README.md b/README.md
index db2c3df..2dbef32 100644
--- a/README.md
+++ b/README.md
@@ -1,51 +1,30 @@
-# Vim-RNB, a Vim colorscheme template
+# Introduction
-## What is this thing?
+`nvim-highlite` is a colorscheme template repository for Neovim 0.5+.
-RNB is a template designed to help vimmers create their own colorschemes without much effort.
+This project aims to make the following
-In reality, Vim colorschemes are not that hard to write but there are several benefits to using a template such as RNB:
+* You can define/modify variables once instead of messing around with potentially botched substitutions.
+* You can distribute a lean colorscheme, free from unnecessary logic.
+* You can distribute the source alongside the colorscheme, making it easy for your users to experiment and adapt *your* colorscheme to *their* needs.
+* You can focus on the design of your colorscheme rather than its implementation.
+* You can start working on new colorscheme ideas very easily.
-* you can define/modify variables once instead of messing around with potentially botched substitutions,
-* you can distribute a lean colorscheme, free from unnecessary logic,
-* you can distribute the source alongside the colorscheme, making it easy for your users to experiment and adapt *your* colorscheme to *their* needs,
-* you can focus on the design of your colorscheme rather than its implementation,
-* you can start working on new colorscheme ideas very easily.
+# Prerequisites
-## What do I need to use it?
+1. Neovim 0.5+
-[ERB](https://ruby-doc.org/stdlib-2.6.3/libdoc/erb/rdoc/index.html), the templating engine used here, is part of Ruby's standard library so you will need [Ruby](https://www.ruby-lang.org/) to generate your colorscheme. Neither ERB nor Ruby knowledge is required, though.
+# Usage
-## How do I use it?
+Usage is simple. This repository should be cloned with `git clone https://github.com/Iron-E/nvim-highlite`, and then:
-The process is divided in five steps:
+1. Rename `lua/highlite/` to `lua//`.
+2. Follow the directions in [lua/``/init.lua](lua/highlite/init.lua).
+3. Rename `colors/highlite.vim` to `colors/.vim`.
+4. Follow the instructions in [`colors/highlite.vim`](colors/highlite.vim).
-1. rename `colors/rnb.erb` to `colors/name_of_your_colorscheme.erb`,
-2. start by editing your colorscheme's information,
-3. define your colors,
-4. define your highlight groups and links,
-5. and generate your colorscheme.
+## Examples
-Steps 2 to 5 are thoroughly described in the colorscheme template itself in an effort to make it portable: if you ever decide to distribute your colorscheme you can simply package the template with it.
+The following colorschemes are built using `nvim-highlite`:
-## Built with RNB
-
-The following colorschemes are known to be built with RNB:
-
-* [Apprentice](https://github.com/romainl/Apprentice)
-* [Dichromatic](https://github.com/romainl/vim-dichromatic)
-* [Bruin](https://git.sr.ht/~romainl/vim-bruin)
-* [Sweet16](https://github.com/romainl/vim-sweet16)
-* [Paper](https://github.com/swalladge/paper.vim)
-* [Journeyman](https://github.com/markeganfuller/vim-journeyman)
-* [Warlock](https://github.com/hardselius/warlock)
-* [Cyberpunk-Neon](https://github.com/Roboron3042/Cyberpunk-Neon)
-* [Tutfish](https://github.com/benwr/tuftish)
-* (your colorscheme here, send us a PR!)
-
-## TODO
-
-* `README.md` template
-
-
-[//]: # ( Vim: set spell spelllang=en: )
+* (if you use this, open an issue and I'll add it here!)
diff --git a/colors/highlite.vim b/colors/highlite.vim
new file mode 100644
index 0000000..02e386e
--- /dev/null
+++ b/colors/highlite.vim
@@ -0,0 +1,2 @@
+" Change 'highlite' to the name of the file in the `lua/` folder.
+lua require('highlite')
diff --git a/colors/rnb.erb b/colors/rnb.erb
deleted file mode 100644
index eef99ee..0000000
--- a/colors/rnb.erb
+++ /dev/null
@@ -1,365 +0,0 @@
-<%
- # RNB, A VIM COLORSCHEME TEMPLATE
- # Author: Romain Lafourcade (https://github.com/romainl)
- # Canonical URL: https://github.com/romainl/vim-rnb
-
- # This template is designed to help vimmers create their own colorschemes
- # without much effort.
- #
- # You will need Ruby to generate your colorscheme but Ruby knowledge is
- # not needed at all.
- #
- # The process is divided in five steps:
- # 1. rename the template,
- # 2. edit your colorscheme's information,
- # 3. define your colors,
- # 4. define your highlight groups and links,
- # 5. and generate your colorscheme.
-
- # Step 1: renaming
- #
- # If this file is distributed with a colorscheme it's probably already named correctly
- # and you can skip this step.
- #
- # If you forked/cloned/copied this repository to create your own colorscheme, you will have to
- # rename this template to match the name of your colorscheme.
- #
- # NOTE: Vim doesn't really care about whitespace in the name of the colorscheme but it does for
- # filenames so make sure your filename doesn't have any whitespace character.
- #
- # colorscheme name | template filename | colorscheme filename
- # ------------------|-------------------|----------------------
- # foobar | foobar.erb | foobar.vim
- # foo-bar | foo-bar.erb | foo-bar.vim
- # foo_bar | foo_bar.erb | foo_bar.vim
- # foo bar | foo-bar.erb or | foo-bar.vim or
- # | foo_bar.erb | foo_bar.vim
-
- # Step 2: information
- #
- # Make sure the name of your colorscheme is unique and attractive.
- # The description should fit in a single line with no linefeed.
- information = {
- author: "foo",
- email: "foo@foo.foo",
- name: "rnb",
- description: "Lorem ipsum dolor sit amet.",
- webpage: "http://www.example.com"
- }
-
- # Step 3: colors
- #
- # black = [ give each color a distinctive name
- # "#000000", hexadecimal color used in GVim/MacVim or "NONE"
- # 0, integer between 0 and 255 used by terminals supporting 256 colors
- # or "NONE"
- # "black" color name used by less capable color terminals, can be "darkred",
- # "red", "darkgreen", "green", "darkyellow", "yellow", "darkblue",
- # "blue", "darkmagenta", "magenta", "black", "darkgrey", "grey",
- # "white", or "NONE"
- # ]
- #
- # If your colors are defined correctly, the resulting colorscheme is guaranteed
- # to work in GVim (Windows/Linux), MacVim (MacOS), and any properly set up terminal emulator.
- black = ["#000000", 0, "black"]
- darkred = ["#800000", 1, "darkred"]
- darkgreen = ["#008000", 2, "darkgreen"]
- darkyellow = ["#808000", 3, "darkyellow"]
- darkblue = ["#000080", 4, "darkblue"]
- darkmagenta = ["#800080", 5, "darkmagenta"]
- darkcyan = ["#008080", 6, "darkcyan"]
- gray = ["#c0c0c0", 7, "gray"]
- darkgray = ["#808080", 8, "darkgray"]
- red = ["#ff0000", 9, "red"]
- green = ["#00ff00", 10, "green"]
- yellow = ["#ffff00", 11, "yellow"]
- blue = ["#0000ff", 12, "blue"]
- magenta = ["#ff00ff", 13, "magenta"]
- cyan = ["#00ffff", 14, "cyan"]
- white = ["#ffffff", 15, "white"]
-
- # Step 4: highlights
- #
- # You can define highlight groups like this:
- #
- # [ "Normal", name of the highlight group
- # white, the color used for background color, or use "NONE", "fg" or "bg"
- # darkgray, the color used for foreground color, or use "NONE", "fg" or "bg"
- # "NONE" style, can be "bold", "underline", "reverse", "italic",
- # "standout", "NONE", "undercurl", or a comma-separated list of
- # valid attributes like "underline,bold"
- # ]
- #
- # The sample above tells Vim to render normal text in dark gray against a white
- # background, without any other styling.
- #
- # Or you can link an highlight group to another. Here, "Title" will inherit its style from
- # "Normal":
- #
- # [ "Title", "Normal" ]
- #
- # In GUI Vim, there is an additional color for the undercurl used to
- # highlight spelling mistakes:
- #
- # [ "SpellBad", name of the highlight group
- # "NONE", the color used for background color, or use "NONE", "fg" or "bg"
- # red, the color used for foreground color, or use "NONE", "fg" or "bg"
- # "undercurl", style
- # red color used for the undercurl
- # ]
- #
- # The sample above tells Vim to render badly spelled words in red against the current
- # background, with a red undercurl.
- #
- # You can add any custom highlight group to the standard list below but you shouldn't
- # remove any if you want a working colorscheme. Most of them are described under
- # :help highlight-default, the others are taken from :help group-name. Both help sections
- # are good reads, by the way.
- highlights = [
- [ "Normal", white, darkgray, "NONE" ],
- [ "NonText", white, darkgray, "NONE" ],
- [ "EndOfBuffer","NonText" ],
- [ "Comment", white, darkgray, "NONE" ],
- [ "Constant", white, darkgray, "NONE" ],
- [ "Error", white, darkgray, "NONE" ],
- [ "Identifier", white, darkgray, "NONE" ],
- [ "Ignore", white, darkgray, "NONE" ],
- [ "PreProc", white, darkgray, "NONE" ],
- [ "Special", white, darkgray, "NONE" ],
- [ "Statement", white, darkgray, "NONE" ],
- [ "String", white, darkgray, "NONE" ],
- [ "Number", "Constant" ],
- [ "Todo", white, darkgray, "NONE" ],
- [ "Type", white, darkgray, "NONE" ],
- [ "Underlined", white, darkgray, "NONE" ],
- [ "StatusLine", white, darkgray, "NONE" ],
- [ "StatusLineNC", white, darkgray, "NONE" ],
- [ "StatusLineTerm", "StatusLine" ],
- [ "StatusLineTermNC", "StatusLineNC" ],
- [ "VertSplit", white, darkgray, "NONE" ],
- [ "TabLine", white, darkgray, "NONE" ],
- [ "TabLineFill", white, darkgray, "NONE" ],
- [ "TabLineSel", white, darkgray, "NONE" ],
- [ "Title", white, darkgray, "NONE" ],
- [ "CursorLine", white, darkgray, "NONE" ],
- [ "LineNr", white, darkgray, "NONE" ],
- [ "CursorLineNr", white, darkgray, "NONE" ],
- [ "helpLeadBlank", white, darkgray, "NONE" ],
- [ "helpNormal", white, darkgray, "NONE" ],
- [ "Visual", white, darkgray, "NONE" ],
- [ "VisualNOS", white, darkgray, "NONE" ],
- [ "Pmenu", white, darkgray, "NONE" ],
- [ "PmenuSbar", white, darkgray, "NONE" ],
- [ "PmenuSel", white, darkgray, "NONE" ],
- [ "PmenuThumb", white, darkgray, "NONE" ],
- [ "FoldColumn", white, darkgray, "NONE" ],
- [ "Folded", white, darkgray, "NONE" ],
- [ "WildMenu", white, darkgray, "NONE" ],
- [ "SpecialKey", white, darkgray, "NONE" ],
- [ "DiffAdd", white, darkgray, "NONE" ],
- [ "DiffChange", white, darkgray, "NONE" ],
- [ "DiffDelete", white, darkgray, "NONE" ],
- [ "DiffText", white, darkgray, "NONE" ],
- [ "IncSearch", white, darkgray, "NONE" ],
- [ "Search", white, darkgray, "NONE" ],
- [ "Directory", white, darkgray, "NONE" ],
- [ "MatchParen", white, darkgray, "NONE" ],
- [ "SpellBad", white, darkgray, "NONE", red ],
- [ "SpellCap", white, darkgray, "NONE", blue ],
- [ "SpellLocal", white, darkgray, "NONE", magenta ],
- [ "SpellRare", white, darkgray, "NONE", cyan ],
- [ "ColorColumn", white, darkgray, "NONE" ],
- [ "SignColumn", white, darkgray, "NONE" ],
- [ "ErrorMsg", white, darkgray, "NONE" ],
- [ "ModeMsg", white, darkgray, "NONE" ],
- [ "MoreMsg", white, darkgray, "NONE" ],
- [ "Question", white, darkgray, "NONE" ],
- [ "WarningMsg", "Error" ],
- [ "Cursor", white, darkgray, "NONE" ],
- [ "CursorIM", "Cursor" ],
- [ "CursorColumn", white, darkgray, "NONE" ],
- [ "QuickFixLine", white, darkgray, "NONE" ],
- [ "Terminal", "Normal" ],
- [ "Conceal", white, darkgray, "NONE" ],
- [ "ToolbarLine", white, darkgray, "NONE" ],
- [ "ToolbarButton", white, darkgray, "NONE" ],
- [ "debugPC", white, darkgray, "NONE" ],
- [ "debugBreakpoint", white, darkgray, "NONE" ],
- ]
-
- # Define the color palette used by :terminal when in GUI Vim
- # or in TUI Vim when 'termguicolors' is enabled. If this list
- # is empty or if it doesn't contain exactly 16 items, the corresponding
- # Vim variable won't be set.
- #
- # The expected values are colors defined in step 3.
- #
- # Terminal emulators use a basic palette of 16 colors that can be
- # addressed by CLI and TUI tools via their name or their index, from
- # 0 to 15. The list is not really standardized but it is generally
- # assumed to look like this:
- #
- # Index | Name
- # -------|-------------
- # 0 | black
- # 1 | darkred
- # 2 | darkgreen
- # 3 | darkyellow
- # 4 | darkblue
- # 5 | darkmagenta
- # 6 | darkcyan
- # 7 | gray
- # 8 | darkgray
- # 9 | red
- # 10 | green
- # 11 | yellow
- # 12 | blue
- # 13 | magenta
- # 14 | cyan
- # 15 | white
- #
- # While you are certainly free to make colors 0 to 7 shades of blue,
- # this will inevitably cause usability issues so… be careful.
- terminal_ansi_colors = [
- black,
- darkred,
- darkgreen,
- darkyellow,
- darkblue,
- darkmagenta,
- darkcyan,
- gray,
- darkgray,
- red,
- green,
- yellow,
- blue,
- magenta,
- cyan,
- white
- ]
-
- # Step 5: generation
- #
- # From a separate shell:
- #
- # $ erb -T - bar.erb > bar.vim
- #
- # From Vim:
- #
- # :!erb -T - % > %<.vim
- #
- # If this template comes with a Makefile, you can do it from a separate shell,
- # with the make program:
- #
- # $ make
-
- # These online resources can help you design your colorscheme:
- #
- # * http://upload.wikimedia.org/wikipedia/en/1/15/Xterm_256color_chart.svg
- # the xterm palette
- # * http://whatcolor.herokuapp.com/
- # play with hexadecimal colors right in the address bar (currently down)
- # * http://color.hailpixel.com/
- # similar concept, fuzzier implementation
- # * http://colourco.de/
- # similar concept, fancier implementation
- # * http://www.colr.org/
- # extract a palette from an image
- # * http://colores.manugarri.com/
- # search for 'word', get images and color palettes
- # * http://www.colourlovers.com/palettes
- # user-created palettes
- # * http://www.perbang.dk/color+scheme/
- # a no-nonsense colorscheme generator
- # * https://color.adobe.com/
- # Adobe's fancy colorscheme generator
- # * http://paletton.com/
- # The classic 'Color Scheme Designer', rebranded
- # * http://vrl.cs.brown.edu/color
- # A very smart palette generator
- # * https://cmcenroe.me/2018/04/03/colour-scheme.html
- # "I Made My Own Colour Scheme and You Can Too!"
-
- # A few general advices:
- #
- # * The Windows console is limited to the 16 so-called "ANSI" colors but it used to
- # have a few of them interverted which makes numbers impractical. Use color names
- # instead of numbers: :help cterm-colors
- # * The Windows console (yeah…) doesn't do italics, underlines or bolded text;
- # it is limited to normal and reverse. Keep that in mind if you want
- # your colorscheme to be usable in as many environments as possible by as many
- # people as possible.
- # * Actually, terminal emulators rarely do italics.
- # * All of the terminal emulators in use these days allow their users to
- # change the 16 so-called "ANSI" colors. It is also possible on some platforms
- # to change some or all of the 256 colors in the xterm palette. Don't take
- # anything for granted.
- # * When used against a light background, strong colors work better than muted
- # ones. Light or dark doesn't really matters. Also, it is harder to discriminate
- # between two similar colors on a light background.
- # * Both strong and muted colors work well against a dark background. It is also
- # easier to work with similar colors, but dark colors don't work at all.
- # * Use as many text samples as possible. String-heavy languages may look completely
- # different than keyword-heavy ones. This can have an impact on the usability
- # of your colorscheme.
- # * Most terminal emulators and terminal multiplexers currently in use on unix-like
- # systems support 256 colors but they almost always default to a '$TERM' that tells
- # Vim otherwise. Your users will need to make sure their terminal emulator/multiplexer
- # is correctly set up if they want to enjoy the best possible experience.
-
- # Many thanks to Barry Arthur (https://github.com/dahu) for the original idea.
-
- # You don't need to edit anything beyond this line.
--%>
-" <%= information[:name] %>.vim -- Vim color scheme.
-" Author: <%= information[:author] %> (<%= information[:email] %>)
-" Webpage: <%= information[:webpage] %>
-" Description: <%= information[:description] %>
-" Last Change: <%= Time.new.strftime "%Y-%m-%d" %>
-
-hi clear
-
-if exists("syntax_on")
- syntax reset
-endif
-
-let colors_name = "<%= information[:name].downcase %>"
-
-if ($TERM =~ '256' || &t_Co >= 256) || has("gui_running")
-<% for highlight in highlights -%>
-<% if highlight.length == 4 -%>
- hi <%= highlight[0] %> ctermbg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][1] %> ctermfg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][1] %> cterm=<%= highlight[3] %> guibg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][0] %> guifg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][0] %> gui=<%= highlight[3] %>
-<% elsif highlight.length > 4 -%>
- hi <%= highlight[0] %> ctermbg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][1] %> ctermfg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][1] %> cterm=<%= highlight[3] %> guibg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][0] %> guifg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][0] %> gui=<%= highlight[3] %> guisp=<%= highlight[4].kind_of?(String) ? highlight[4] : highlight[4][0] %>
-<% end -%>
-<% end -%>
-
-elseif &t_Co == 8 || $TERM !~# '^linux' || &t_Co == 16
- set t_Co=16
-<%= '' %>
-<% for highlight in highlights -%>
-<% if highlight.length > 2 -%>
- hi <%= highlight[0] %> ctermbg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][2] %> ctermfg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][2] %> cterm=<%= highlight[3] %>
-<% end -%>
-<% end -%>
-endif
-<% links = highlights.select do |highlight| -%>
-<% highlight.length == 2 -%>
-<% end -%>
-<% if links.length > 0 -%>
-<%= '' %>
-<% for link in links -%>
-hi link <%= link[0] %> <%= link[1] %>
-<% end -%>
-<% end -%>
-<% if terminal_ansi_colors.length == 16 -%>
-<%= '' %>
-let g:terminal_ansi_colors = [
-<% for color in terminal_ansi_colors -%>
- \ '<%= color[0] %>',
-<% end -%>
- \ ]
-<% end -%>
-
-" Generated with RNB (https://github.com/romainl/vim-rnb)
diff --git a/lua/highlite/colorscheme.lua b/lua/highlite/colorscheme.lua
new file mode 100644
index 0000000..3cc1493
--- /dev/null
+++ b/lua/highlite/colorscheme.lua
@@ -0,0 +1,102 @@
+return function(name, Normal, highlights, terminal_ansi_colors)
+ -- Clear the highlighting.
+ vim.cmd('hi clear')
+
+ -- If the syntax has been enabled, reset it.
+ if vim.fn.exists('syntax_on') then vim.cmd('syntax reset') end
+
+ -- Set the name of the current colorscheme.
+ vim.g.colors_name = string.lower(name)
+
+ -- Determine which set of colors to use.
+ local use_hex_and_256 = string.find(vim.fn.expand('$TERM'), '256')
+ or vim.g.t_Co >= 256
+ or vim.fn.has("gui_running")
+
+ -- If we aren't using the hex and 256 colorset, then set the &t_Co variable to 16.
+ if not use_hex_and_256 then vim.g.t_Co = 16 end
+
+ -- These are constants for the indexes in the colors that were defined before.
+ local BIT_16 = 3
+ local BIT_256 = 2
+ local HEX = 1
+
+ -- Get the color value of a color variable, or "NONE" as a default.
+ local function get(color, index)
+ if type(color) == 'table' and color[index] then
+ return color[index]
+ elseif type(color) == 'string' then
+ return color
+ else
+ return "NONE"
+ end
+ end
+
+ -- Generate a `:highlight` command from a group and some attributes.
+ local function highlight(highlight_group, attributes) -- {{{ †
+ local highlight_cmd = {'hi! ', highlight_group}
+ local link = attributes.link
+
+ -- If the `highlight_group` is a link to another group.
+ if attributes.link then
+ highlight_cmd[3] = highlight_cmd[2] .. ' '
+ highlight_cmd[2] = 'link '
+ highlight_cmd[4] = attributes.link
+ else -- the `highlight_group` is uniquely defined.
+ local bg = attributes.bg
+ local fg = attributes.fg
+ local style = attributes.style
+
+ -- If using hex and 256-bit colors, then populate the gui* and cterm* args.
+ if use_hex_and_256 then highlight_cmd[#highlight_cmd + 1] =
+ ' ctermbg=' .. get(bg, BIT_256)
+ .. ' ctermfg=' .. get(fg, BIT_256)
+ .. ' guibg=' .. get(bg, HEX)
+ .. ' guifg=' .. get(fg, HEX)
+ -- If using 16-bit colors, just populate the cterm* args.
+ else highlight_cmd[#highlight_cmd + 1] =
+ ' ctermbg=' .. get(bg, BIT_16)
+ .. ' ctermfg=' .. get(fg, BIT_16)
+ end
+
+ -- This function appends `selected_attributes` to the end of the `highlight_cmd`.
+ function append_style(selected_attributes)
+ highlight_cmd[#highlight_cmd + 1] = ' cterm=' .. selected_attributes
+
+ -- If we're using hex populate the gui* attr args.
+ if use_hex_and_256 then highlight_cmd[#highlight_cmd + 1] =
+ ' gui=' .. selected_attributes
+ end
+ end
+
+ if type(style) == 'table' then
+ -- Concat all of the entries together with a comma between.
+ local style_all = table.concat(style, ',')
+
+ -- There will always be a cterm attr arg.
+ append_style(style_all)
+
+ -- There won't always be a `guisp`.
+ if style.color then highlight_cmd[#highlight_cmd + 1] =
+ ' guisp=' .. get(style.color, HEX)
+ end
+ else append_style(style)
+ end
+ end
+
+ vim.cmd(table.concat(highlight_cmd))
+ end --}}} ‡
+
+ -- Highlight the baseline.
+ highlight('Normal', Normal)
+
+ -- Highlight everything else.
+ for highlight_group, attributes in pairs(highlights) do
+ highlight(highlight_group, attributes)
+ end
+
+ -- Set the terminal colors.
+ for index, color in ipairs(terminal_ansi_colors) do
+ vim.g['terminal_color_' .. index] = color[HEX]
+ end
+end
diff --git a/lua/highlite/init.lua b/lua/highlite/init.lua
new file mode 100644
index 0000000..ec5427b
--- /dev/null
+++ b/lua/highlite/init.lua
@@ -0,0 +1,434 @@
+--[[ Highlite, a Neovim colorscheme template.
+ * Author: Iron-E (https://github.com/Iron-E)
+ * Repository: https://github.com/nvim-highlite
+
+ Rewrite of RNB, a Vim colorsheme template.
+ * Author: Romain Lafourcade (https://github.com/romainl)
+ * Canonical URL: https://github.com/romainl/vim-rnb
+]]
+
+--[[ Introduction
+ This template is designed to help vimmers create their own colorschemes
+ without much effort.
+
+ You will not need any additional tooling to run this file. Just open it
+ in Neovim and follow the instructions— the colorscheme will generate
+ be generated automatically.
+
+ The process is divided in five steps:
+ 1. Rename the template,
+ 2. Edit your colorscheme's information,
+ 3. Define your colors,
+ 4. Define your highlight groups and links, and
+ 5. Sourcing your colorscheme.
+]]
+
+--[[ Step 1: renaming
+ If this file is distributed with a colorscheme it's probably already named correctly
+ and you can skip this step.
+
+ If you forked/cloned/copied this repository to create your own colorscheme, you will have to
+ rename this template to match the name of your colorscheme.
+
+ NOTE: Neovim doesn't really care about whitespace in the name of the colorscheme but it does for
+ filenames so make sure your filename doesn't have any whitespace character.
+
+ | colorscheme name | template filename |
+ |:-----------------:|:-----------------:|
+ | foobar | foobar.lua |
+ | foo-bar | foo-bar.lua |
+ | foo bar | foo-bar.lua or |
+ | foo_bar | foo_bar.lua |
+]]
+
+--[[ Step 2: information
+ Make sure the name of your colorscheme is unique and attractive.
+]]
+
+local name = "highlite"
+
+--[[ Step 3: colors
+ Next you will define all of the colors that you will use for the color scheme.
+
+ Each one should be made up of three parts:
+
+```lua
+ = { -- Give each color a distinctive name.
+ , -- Hexadecimal color used in GVim/MacVim or "NONE".
+ <256-bit color code>, -- Integer 0–255 used by terminals supporting 256 colors or "NONE".
+ <16-bit color code> -- color name used by less capable color terminals, can be "darkred",
+ "red", "darkgreen", "green", "darkyellow", "yellow", "darkblue",
+ "blue", "darkmagenta", "magenta", "black", "darkgrey", "grey",
+ "white", or "NONE"
+ }
+```
+
+ If your colors are defined correctly, the resulting colorscheme is guaranteed
+ to work in GVim (Windows/Linux), MacVim (MacOS), and any properly set up terminal emulator.
+]]
+
+local black = {"#202020", 0, "black"}
+local gray = {"#808080", 244, "gray" }
+local gray_dark = {"#353535", 236, "darkgrey"}
+local gray_darker = {"#505050", 244, "gray" }
+local gray_light = {"#c0c0c0", 251, "gray" }
+local white = {"#ffffff", 15, "white"}
+
+local brown_light = {"#fca070", 178, "darkyellow"}
+local tan = {"#f4c069", 180, "darkyellow"}
+
+local red = {"#ee4a59", 196, "red"}
+local red_dark = {"#a80000", 124, "darkred"}
+local red_light = {"#ff4090", 203, "red"}
+
+local orange = {"#ff8900", 208, "darkyellow"}
+local orange_light = {"#f0af00", 214, "yellow"}
+
+local yellow = {"#f0df33", 220, "yellow"}
+
+local green_dark = {"#50de60", 83, "darkgreen"}
+local green = {"#77ff00", 72, "green"}
+local green_light = {"#a0ff70", 72, "green"}
+
+local blue = {"#7090ff", 63, "darkblue"}
+local cyan = {"#00efff", 87, "cyan"}
+local ice = {"#80b5ff", 63, "cyan"}
+local teal = {"#6ac0c0", 38, "cyan"}
+local turqoise = {"#2bff99", 33, "blue"}
+
+local magenta = {"#d5508f", 126, "magenta"}
+local magenta_dark = {"#bb0099", 126, "darkmagenta"}
+local pink = {"#ffa6ff", 162, "magenta"}
+local pink_light = {"#ffb7b7", 38, "white"}
+local purple = {"#cf55f0", 129, "magenta"}
+local purple_light = {"#af60af", 63, "magenta"}
+local purple_dark = {"#c700ff", 38, "darkmagenta"}
+
+--[[ Step 4: highlights
+ You can define highlight groups like this:
+
+```lua
+ = {
+ bg=, -- The color used for background color, or use "NONE", "fg" or "bg"
+ fg=, -- The color used for foreground color, or use "NONE", "fg" or "bg"
+ -- Style can be "bold", "italic", and more. See |attr-list| for more information.
+ style=
+ -- style can also have a color, and/or multiple s.
+ style={ [, ] [color=]})
+ }
+```
+
+ The sample above tells Vim to render normal text in dark gray against a white
+ background, without any other styling.
+
+ Or you can link an highlight group to another. Here, "Title" will inherit its style from
+ "Normal":
+
+```lua
+ Title = {link="Normal"}
+```
+
+ In GUI Vim, there is an additional color for the undercurl used to
+ highlight spelling mistakes:
+
+```lua
+ SpellBad = { -- ← name of the highlight group
+ bg="NONE", -- background color
+ fg=red, -- foureground color
+ style={ -- the style
+ "undercurl", -- undercurl (squiggly line)
+ color=red -- the color of the undercurl
+ }
+ }
+```
+
+ If you weren't satisfied with undercurl, and also wanted another effect, you can
+ add another one below "undercurl" and it will be applied as well:
+
+```lua
+ SpellBad = { -- ← name of the highlight group
+ bg="NONE", -- background color
+ fg=red, -- foureground color
+ style={ -- the style
+ "undercurl", -- undercurl (squiggly line)
+ "standout"
+ color=red -- the color of the undercurl
+ }
+ }
+```
+
+ The sample above tells Vim to render badly spelled words in red against the current
+ background, with a red undercurl.
+
+ You can add any custom highlight group to the standard list below but you shouldn't
+ remove any if you want a working colorscheme. Most of them are described under
+ :help highlight-default, the others are taken from :help group-name. Both help sections
+ are good reads, by the way.
+]]
+
+-- This is the only highlight that must be defined separately.
+local Normal = {bg=black, fg=gray_light, style="NONE"}
+
+-- This is where the rest of your highlights should go.
+local highlights = {
+ --[[ 1. Text Analysis ]]
+ Comment = {bg="NONE", fg=gray, style="italic"},
+ EndOfBuffer = {link="NonText" },
+ NonText = {bg="NONE", fg=gray_dark, style="NONE" },
+ Whitespace = {link="NonText" },
+
+ --[[ 1.1. Literals]]
+ Constant = {bg="NONE", fg=orange_light, style="NONE"},
+ String = {bg="NONE", fg=green, style="NONE"},
+ Character = {bg="NONE", fg=red_light, style="NONE"},
+ Number = {bg="NONE", fg=pink_light, style="NONE"},
+ Boolean = {bg="NONE", fg=yellow, style="NONE"},
+ Float = {link="Number" },
+
+ --[[ 1.2. Identifiers]]
+ Identifier = {bg="NONE", fg="fg", style="NONE"},
+ Function = {bg="NONE", fg=purple, style="NONE"},
+
+ --[[ 1.3. Syntax]]
+ Statement = {bg="NONE", fg=ice, style="NONE" },
+ Conditional = {bg="NONE", fg=ice, style="italic"},
+ Repeat = {link="Keyword" },
+ Label = {bg="NONE", fg=pink, style="italic"},
+ Operator = {bg="NONE", fg=green_dark, style="NONE" },
+ Keyword = {bg="NONE", fg=turqoise, style="bold" },
+ Exception = {bg="NONE", fg=red, style="bold" },
+
+ --[[ 1.4. Metatextual Information]]
+ PreProc = {bg="NONE", fg=tan, style="NONE" },
+ Include = {bg="NONE", fg=green_light, style="nocombine"},
+ Define = {bg="NONE", fg=blue, style="nocombine"},
+ Macro = {link='Define' },
+ PreCondit = {bg="NONE", fg=teal, style="nocombine"},
+
+ --[[ 1.5. Semantics]]
+ Type = {bg="NONE", fg=cyan, style="NONE" },
+ StorageClass = {bg="NONE", fg=orange_light, style="bold" },
+ Structure = {bg="NONE", fg=blue, style="bold" },
+ Typedef = {bg="NONE", fg=cyan, style="italic"},
+
+ --[[ 1.6. Edge Cases]]
+ Special = {bg="NONE", fg=magenta, style="NONE"},
+ SpecialChar = {link="Character" },
+ SpecialKey = {link="Character" },
+ Tag = {link="Underlined" },
+ Delimiter = {bg="NONE", fg=white, style="NONE"},
+ SpecialComment = {bg="NONE", fg=gray, style="bold"},
+ Debug = {link='WarningMsg' },
+
+ --[[ 1.7. Help Syntax]]
+ Underlined = {bg="NONE", fg=turqoise, style="underline" },
+ Ignore = {bg="NONE", fg=gray, style="NONE" },
+ Error = {bg=red_dark, fg=white, style="bold" },
+ Todo = {bg="NONE", fg=yellow, style={"bold", "underline"}},
+ helpHyperTextJump = {link="Underlined" },
+ helpSpecial = {link="Function" },
+
+ --[[ 2... Editor UI ]]
+ --[[ 2.1. Status Line]]
+ StatusLine = {bg=gray_darker, fg=green_light, style="NONE"},
+ StatusLineNC = {bg=gray_darker, fg=gray, style="NONE"},
+ StatusLineTerm = {link="StatusLine" },
+ StatusLineTermNC = {link="StatusLineNC" },
+
+ --[[ 2.2. Separators]]
+ VertSplit = {bg="NONE", fg=gray_darker, style="NONE" },
+ TabLine = {bg=gray_darker, fg="fg", style="NONE" },
+ TabLineFill = {bg="NONE", fg="fg", style="NONE" },
+ TabLineSel = {bg=gray_darker, fg="fg", style="inverse"},
+ Title = {bg="NONE", fg="NONE", style="bold" },
+
+ --[[ 2.3. Conditional Line Highlighting]]
+ --Conceal={}
+ CursorLine = {bg=gray_dark, fg="NONE", style="NONE" },
+ CursorLineNr = {bg=gray_dark, fg=pink, style="NONE" },
+ debugBreakpoint = {link="ErrorMsg" },
+ debugPC = {link="ColorColumn" },
+ LineNr = {bg="NONE", fg=gray, style="NONE" },
+ QuickFixLine = {bg=gray_darker, fg="NONE", style="NONE" },
+ Visual = {bg="NONE", fg="NONE", style="inverse"},
+ VisualNOS = {bg=gray_darker, fg="NONE", style="NONE" },
+
+ --[[ 2.4. Popup Menu]]
+ Pmenu = {bg=gray_dark, fg="fg", style="NONE"},
+ PmenuSbar = {bg=black, fg="NONE", style="NONE"},
+ PmenuSel = {bg="NONE", fg="fg", style="NONE"},
+ PmenuThumb = {bg=white, fg="NONE", style="NONE"},
+ WildMenu = {bg="NONE", fg="NONE", style="NONE"},
+
+ --[[ 2.5. Folds]]
+ FoldColumn = {bg=gray_darker, fg="NONE", style="bold" },
+ Folded = {bg=purple_light, fg=black, style="italic"},
+
+ --[[ 2.6. Diffs]]
+ DiffAdd = {bg="NONE", fg=green_dark, style="inverse"},
+ DiffChange = {bg="NONE", fg=yellow, style="inverse"},
+ DiffDelete = {bg="NONE", fg=red, style="inverse"},
+ DiffText = {bg="NONE", fg="NONE", style="inverse"},
+
+ --[[ 2.7. Searching]]
+ IncSearch = {bg="NONE", fg="NONE", style="inverse" },
+ Search = {bg="NONE", fg="NONE", style={"undercurl", color=white}},
+ MatchParen = {bg="NONE", fg=green, style="bold,underline" },
+
+ --[[ 2.8. Spelling]]
+ SpellBad = {bg="NONE", fg="NONE", style={"undercurl", color=red }},
+ SpellCap = {bg="NONE", fg="NONE", style={"undercurl", color=yellow}},
+ SpellLocal = {bg="NONE", fg="NONE", style={"undercurl", color=green }},
+ SpellRare = {bg="NONE", fg="NONE", style={"undercurl", color=orange}},
+
+ --[[ 2.9. Conditional Column Highlighting]]
+ ColorColumn = {bg="NONE", fg="NONE", style="inverse"},
+ SignColumn = {bg="NONE", fg="NONE", style="NONE" },
+
+ --[[ 2.10. Messages]]
+ ErrorMsg = {bg="NONE", fg=red_light, style="bold"},
+ ModeMsg = {bg="NONE", fg=yellow, style="NONE"},
+ WarningMsg = {bg="NONE", fg=orange, style="bold"},
+ Question = {bg="NONE", fg=orange_light, style="underline"},
+
+ --[[ 2.11. Cursor ]]
+ --Cursor = {},
+ --CursorIM = {link="Cursor"},
+ CursorColumn = {bg=gray_dark, fg="NONE", style="NONE"},
+
+ -- 2.12 Misc.
+ Directory = {bg="NONE", fg=ice, style="bold"},
+ Terminal = {link="Normal" },
+
+ --[[ 3. Plugin Highlight Groups ]]
+ -- By default, this section is empty, but feel free to add your own information here.
+}
+
+--[[
+ Define the color palette used by :terminal when in GUI Vim
+ or in TUI Vim when 'termguicolors' is enabled. If this list
+ is empty or if it doesn't contain exactly 16 items, the corresponding
+ Vim variable won't be set.
+
+ The expected values are colors defined in step 3.
+
+ Terminal emulators use a basic palette of 16 colors that can be
+ addressed by CLI and TUI tools via their name or their index, from
+ 0 to 15. The list is not really standardized but it is generally
+ assumed to look like this:
+
+ | Index | Name |
+ |:------:|:-------------:|
+ | 1 | black |
+ | 2 | darkred |
+ | 3 | darkgreen |
+ | 4 | darkyellow |
+ | 5 | darkblue |
+ | 6 | darkmagenta |
+ | 7 | darkcyan |
+ | 8 | gray |
+ | 9 | darkgray |
+ | 10 | red |
+ | 11 | green |
+ | 12 | yellow |
+ | 13 | blue |
+ | 14 | magenta |
+ | 15 | cyan |
+ | 16 | white |
+
+ While you are certainly free to make colors 0 to 7 shades of blue,
+ this will inevitably cause usability issues so… be careful.
+]]
+
+local terminal_ansi_colors = {
+ [1] = black,
+ [2] = red_dark,
+ [3] = green_dark,
+ [4] = orange,
+ [5] = blue,
+ [6] = magenta_dark,
+ [7] = teal,
+ [8] = gray,
+ [9] = gray_dark,
+ [10] = red,
+ [11] = green,
+ [12] = yellow,
+ [13] = turqoise,
+ [14] = purple,
+ [15] = cyan,
+ [16] = gray_light
+}
+
+--[[ Step 5: Sourcing
+ When you wish to load your colorscheme, you will not use the `colorscheme` command like normal.
+
+ Instead, you will source this file with `:luafile stdpath('config') . '/lua/.lua'`
+
+ See `:help luafile` and `:help stdpath` for more information.
+
+ These online resources can help you design your colorscheme:
+
+ 1. the xterm palette.
+ * http://upload.wikimedia.org/wikipedia/en/1/15/Xterm_256color_chart.svg
+ 2. play with hexadecimal colors right in the address bar (currently down).
+ * http://whatcolor.herokuapp.com/
+ 3. similar concept, fuzzier implementation.
+ * http://color.hailpixel.com/
+ 4. similar concept, fancier implementation.
+ * http://colourco.de/
+ 5. extract a palette from an image.
+ * http://www.colr.org/
+ 6. search for 'word', get images and color palettes.
+ * http://colores.manugarri.com/
+ 7. user-created palettes.
+ * http://www.colourlovers.com/palettes
+ 8. a no-nonsense colorscheme generator.
+ * http://www.pluaang.dk/color+scheme/
+ 9. Adobe's fancy colorscheme generator.
+ * https://color.adobe.com/
+ 10. The classic 'Color Scheme Designer', rebranded.
+ * http://paletton.com/
+ 11. A very smart palette generator.
+ * http://vrl.cs.brown.edu/color
+ 12. "I Made My Own Colour Scheme and You Can Too!".
+ * https://cmcenroe.me/2018/04/03/colour-scheme.html
+
+ A few general advices:
+
+ * The Windows console is limited to the 16 so-called "ANSI" colors but it used to
+ have a few of them interverted which makes numbers impractical. Use color names
+ instead of numbers: :help cterm-colors
+ * The Windows console (yeah…) doesn't do italics, underlines or bolded text;
+ it is limited to normal and reverse. Keep that in mind if you want
+ your colorscheme to be usable in as many environments as possible by as many
+ people as possible.
+ * Actually, terminal emulators rarely do italics.
+ * The Windows Terminal, however, is capable of more.
+ * All of the terminal emulators in use these days allow their users to
+ change the 16 so-called "ANSI" colors. It is also possible on some platforms
+ to change some or all of the 256 colors in the xterm palette. Don't take
+ anything for granted.
+ * When used against a light background, strong colors work better than muted
+ ones. Light or dark doesn't really matters. Also, it is harder to discriminate
+ between two similar colors on a light background.
+ * Both strong and muted colors work well against a dark background. It is also
+ easier to work with similar colors, but dark colors don't work at all.
+ * Use as many text samples as possible. String-heavy languages may look completely
+ different than keyword-heavy ones. This can have an impact on the usability
+ of your colorscheme.
+ * Most terminal emulators and terminal multiplexers currently in use on unix-like
+ systems support 256 colors but they almost always default to a '$TERM' that tells
+ Vim otherwise. Your users will need to make sure their terminal emulator/multiplexer
+ is correctly set up if they want to enjoy the best possible experience.
+
+ Many thanks to Barry Arthur (https://github.com/dahu) for the original idea.
+
+ * You don't need to edit anything beyond this line. *
+]]
+
+require(name .. '/colorscheme')(
+ name,
+ Normal,
+ highlights,
+ terminal_ansi_colors
+)