Go to file
Iron-E b89b9be1e4
feat(setup): `upstream` remote when running script
This is so that users can keep track of changes to the plugin while
maintaining their own changes.

CLOSES #14
2021-08-02 19:03:55 -04:00
colors fix(colors): <lang>Todo overrides TodoBg<group> 2021-08-01 16:26:28 -04:00
doc docs: document overriding groups from init.vim 2021-01-26 14:36:38 -05:00
lua perf(highlite): calculate the cterm palette once 2021-06-13 12:05:38 -04:00
media docs(media): update preview 2020-12-12 15:19:21 -05:00
.gitignore Added .gitignore 2019-07-28 11:32:58 +02:00
LICENSE Update directions 2020-06-19 20:49:05 -04:00
README.md Update README.md 2021-02-27 01:02:33 +02:00
setup.sh feat(setup): `upstream` remote when running script 2021-08-02 19:03:55 -04:00

README.md

Default Settings Preview

lua preview

Introduction

nvim-highlite is a colorscheme template repository for Neovim 0.5+.

This template's defaults focus on:

  1. Compatability with semantic highlighting.
    • I was using colorschemes that often did not provide enough highlight groups to provide distinction between tokens.
  2. Visibility in any range of blue-light.
    • I use redshift often, and many colorschemes did not allow for me to see when I had lower color temperatures.

This template's design focuses on:

  1. Ease of use and rapid development.
    • New features may simply be integrated with current configurations, rather than rewritten over them.
    • Merging with the upstream repository is simplified by GitHub, allowing you to select what new defaults to add.
    • It provides a large supply of defaults for plugins and programming languages.
      • Define a smaller set of "categorical" highlights (see Neovim's group-name help page) and many more will link automatically.
  2. Inversion of Control
    • Changes made to the highlighting algorithm won't affect how you write your colorscheme.
    • New highlight group attributes which are unaccounted for in older versions will simply be ignored without errors due to Lua's tables.

Prerequisites

  1. Neovim 0.5+

Installation

Creating Your Own

  1. Fork this repository, or clone it with git clone https://github.com/Iron-E/nvim-highlite.
  2. Follow the instructions in colors/highlite.vim.
    • If you are on a Unix system, use the setup script like so:
    chmod +x ./setup.sh
    ./setup.sh highlite <colorscheme>
    
    Where <colorscheme> is the name of your desired colorscheme.
    • If you are on Windows, rename the files manually.

Just The Defaults

  1. Install a plugin manager such as vim-plug and use it to "plug" this repository.
    " vim-plug example
    Plug "Iron-E/nvim-highlite"
    
  2. Specify this colorscheme as your default colorscheme in the init.vim:
    " Enable 24-bit color output. Only do this IF your environment supports it.
    " This plugin is fully compatible with 8-bit, 16-bit, and 24-bit colors.
    set termguicolors
    " Use the colorscheme
    colorscheme highlite
    

Usage

Examples

This repository in itself is an example of how to use nvim-highlite. Aside from this, the following colorschemes are built using nvim-highlite:

  • (if you use this, open an issue and I'll add it here!)

As Dependency

Below is an example of how to use nvim-highlite as a dependency.

  • See :h highlite-usage for more.
-- Import nvim-highlite
local highlite = require('highlite')

-- First, define some colors
local red = {'#FF0000', 1, 'red'}
local black = {'#000000', 0, 'black'}
local white = {'#FFFFFF', 255, 'white'}

-- Highlight 'Identifier'
highlite.highlight('Identifier', {bg=red, fg=black, style='bold'})

-- Highlight 'Function' conditionally according to background color.
highlite.highlight('Function', {bg=black, fg=red, light={bg=white}})

-- Link 'Example' to 'Identifier'
highlite.highlight('Example', 'Identifier')

-- You can also reference specific attributes of another highlight group.
highlite.highlight('AnotherExample', {bg=highlite.group'SpellBad'.bg, fg=white})

As Template

Below is an example of how to use nvim-highlite as a template.

-- First, define some colors
local red = {'#FF0000', 1, 'red'}
local black = {'#000000', 0, 'black'}
local white = {'#FFFFFF', 255, 'white'}

-- Next define some highlight groups.
local highlight_groups = {
	-- Any field which can be set to "NONE" doesn't need to be set, it will be automatically assumed to be "NONE".
	Identifier = {bg=red, fg=black, style='bold'},
	-- If your colorscheme should respond to multiple background settings, you can do that too:
	Function = {bg=black, fg=red, light={bg=white}},
	--[[ Note that light/dark differentiation is completely optional. ]]

	-- You can also reference specific attributes of another highlight group.
	SomethingElse = function(self) return {fg=self.Identifier.fg, bg=self.Function.bg} end,
}

-- The rest is mostly handled by the template.

FAQ

How can I override the highlighting of one specific highlight group in my init.vim?

When using this plugin, it is important to know that you can't just run :hi on a highlight group and expect that its changes will be retained. You must attach them to the ColorScheme autocmd event, as shown below:

packadd nvim-highlite
set termguicolors "optional

" WRONG! Don't do this.
hi! Error guifg=#000000 guibg=#FFFFFF

" Do this instead.
augroup Highlite
	" You can also use `highlite.highlight()` instead of `:hi!`
	autocmd ColorScheme highlite hi! Error guifg=#000000 guibg=#FFFFFF
augroup end

colorscheme highlite

Of course, substitute highlite with the name of your colorscheme.

Why am I receiving E5108: Error executing lua [string ":lua"]:1: module '<colorscheme>' not found?

Ensure your colorscheme's base folder is in Neovim's rtp before sourcing.

What syntax files should I use for X language?

You can either use nvim-treesitter, vim-polyglot, or some of the following:

Language Syntax Plugin
ALGOL sterpe/vim-algol68
C++ bfrg/vim-cpp-modern
Coq whonore/Coqtail
Dart dart-lang/dart-vim-plugin
DTrace vim-scripts/dtrace-syntax-file
F# ionide/Ionide-vim
Gas Shirk/vim-gas
Git tpope/vim-git
Go fatih/vim-go
GraphViz liuchengxu/graphviz
HTML5 othree/html5
i3conf mboughaba/i3config
Java Iron-E/java-syntax
JavaScript pangloss/vim-javascript
JSON elzr/vim-json
Julia JuliaEditorSupport/julia-vim
Kotlin udalov/kotlin-vim
LESS groenewege/vim-less
LLVM rhysd/vim-llvm
Lua tbastos/vim-lua
Markdown plasticboy/vim-markdown
MIPS vim-scripts/mips
Moonscript leafo/moonscript-vim
PlantUML aklt/plantuml-syntax
Prettier prettier/vim-prettier
Python vim-python/python-syntax
Razor jlcrochet/vim-razor
RST marshallward/vim-restructuredtext
Ruby vim-ruby/vim-ruby
Rust Iron-E/rust.vim
SCSS cakebaker/scss-syntax
Shell arzg/vim-sh
SQL shmup/vim-sql-syntax
Stylus wavded/vim-stylus
SystemD wgwoods/vim-systemd-syntax
SystemTap nickhutchinson/vim-systemtap
TeX lervag/vimtex
TOML cespare/vim-toml
Ungrammar Iron-E/vim-ungrammar
VB.NET vim-scripts/vbnet
Vim Logs MTDL9/vim-log-highlighting
XML amadeus/vim-xml
YAML stephpy/vim-yaml
YATS HerringtonDarkholme/yats

Contribution

This repository is looking for contributions! The following things are appreciated:

  • More default support for plugins, languages, etc.
  • Setup scripts for Windows.

If you would like to contribute something, and you aren't sure how, open a ticket! I'd love to help you help me.