aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--README.md42
-rw-r--r--autoload/README.md3
-rw-r--r--autoload/spectral.py492
-rw-r--r--autoload/spectral.vim250
-rw-r--r--colors/cooldown.vim159
-rw-r--r--colors/meltdown.vim193
-rw-r--r--colors/poison.vim145
-rw-r--r--colors/royal.vim104
-rw-r--r--colors/spectral.vim35
10 files changed, 1424 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a0b127d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*cache
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a7e071a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,42 @@
+#Spectral.vim
+
+A better way to create colorschemes in Neovim.
+
+## Description
+
+Spectral is an easy way to create beautiful Vim colorschemes. The user only
+needs to focus on building a colorscheme using true colors and Spectral will do
+the rest!
+
+Spectral will
+
+ * Provide powerful utilities to operate on colors to mix and match them
+ relative to each other.
+ * Generate the cterm colors using the Python colormath library so your
+ colorscheme will look just as great on a 256-color terminal!
+ * Generate the highlights for the complimentary background setting by flipping
+ the brightness using the Python colormath library, so your colorscheme will
+ look great as both a light and dark colorscheme! (Manual overrides totally
+ possible, too!)
+ * Compile the colorscheme to make it blazing fast on reloads. (It is slow on
+ first time loads, I'll grant)
+
+## Dependencies
+
+This requires the colormath Python library. Install it with Pip!
+
+ $ pip install colormath
+
+## Included Colorschemes
+
+A list of colorschemes included in Spectral:
+
+ * meltdown
+ * cooldown
+ * poison
+ * royal
+
+## Caveats
+
+Spectral is only really tested using Neovim. There's no reason it shouldn't work
+on Vim, but I use Neovim.
diff --git a/autoload/README.md b/autoload/README.md
new file mode 100644
index 0000000..9f6104e
--- /dev/null
+++ b/autoload/README.md
@@ -0,0 +1,3 @@
+# Vivid.vim
+
+
diff --git a/autoload/spectral.py b/autoload/spectral.py
new file mode 100644
index 0000000..f7903aa
--- /dev/null
+++ b/autoload/spectral.py
@@ -0,0 +1,492 @@
+import os
+
+import vim
+import colormath
+import colormath.color_diff
+from colormath.color_objects import LabColor, sRGBColor
+from colormath.color_conversions import convert_color
+import sys
+import math
+
+xterm_tbl = {
+ "000000": "016",
+ "00005f": "017",
+ "000087": "018",
+ "0000af": "019",
+ "0000d7": "020",
+ "0000ff": "021",
+ "005f00": "022",
+ "005f5f": "023",
+ "005f87": "024",
+ "005faf": "025",
+ "005fd7": "026",
+ "005fff": "027",
+ "008700": "028",
+ "00875f": "029",
+ "008787": "030",
+ "0087af": "031",
+ "0087d7": "032",
+ "0087ff": "033",
+ "00af00": "034",
+ "00af5f": "035",
+ "00af87": "036",
+ "00afaf": "037",
+ "00afd7": "038",
+ "00afff": "039",
+ "00d700": "040",
+ "00d75f": "041",
+ "00d787": "042",
+ "00d7af": "043",
+ "00d7d7": "044",
+ "00d7ff": "045",
+ "00ff00": "046",
+ "00ff5f": "047",
+ "00ff87": "048",
+ "00ffaf": "049",
+ "00ffd7": "050",
+ "00ffff": "051",
+ "5fff00": "082",
+ "5fff5f": "083",
+ "5fff87": "084",
+ "5fffaf": "085",
+ "5fffd7": "086",
+ "5fffff": "087",
+ "5fd700": "076",
+ "5fd75f": "077",
+ "5fd787": "078",
+ "5fd7af": "079",
+ "5fd7d7": "080",
+ "5fd7ff": "081",
+ "5faf00": "070",
+ "5faf5f": "071",
+ "5faf87": "072",
+ "5fafaf": "073",
+ "5fafd7": "074",
+ "5fafff": "075",
+ "5f8700": "064",
+ "5f875f": "065",
+ "5f8787": "066",
+ "5f87af": "067",
+ "5f87d7": "068",
+ "5f87ff": "069",
+ "5f5f00": "058",
+ "5f5f5f": "059",
+ "5f5f87": "060",
+ "5f5faf": "061",
+ "5f5fd7": "062",
+ "5f5fff": "063",
+ "5f0000": "052",
+ "5f005f": "053",
+ "5f0087": "054",
+ "5f00af": "055",
+ "5f00d7": "056",
+ "5f00ff": "057",
+ "8700ff": "093",
+ "8700d7": "092",
+ "8700af": "091",
+ "870087": "090",
+ "87005f": "089",
+ "870000": "088",
+ "875fff": "099",
+ "875fd7": "098",
+ "875faf": "097",
+ "875f87": "096",
+ "875f5f": "095",
+ "875f00": "094",
+ "8787ff": "105",
+ "8787d7": "104",
+ "8787af": "103",
+ "878787": "102",
+ "87875f": "101",
+ "878700": "100",
+ "87afff": "111",
+ "87afd7": "110",
+ "87afaf": "109",
+ "87af87": "108",
+ "87af5f": "107",
+ "87af00": "106",
+ "87d7ff": "117",
+ "87d7d7": "116",
+ "87d7af": "115",
+ "87d787": "114",
+ "87d75f": "113",
+ "87d700": "112",
+ "87ffff": "123",
+ "87ffd7": "122",
+ "87ffaf": "121",
+ "87ff87": "120",
+ "87ff5f": "119",
+ "87ff00": "118",
+ "afffff": "159",
+ "afffd7": "158",
+ "afffaf": "157",
+ "afff87": "156",
+ "afff5f": "155",
+ "afff00": "154",
+ "afd7ff": "153",
+ "afd7d7": "152",
+ "afd7af": "151",
+ "afd787": "150",
+ "afd75f": "149",
+ "afd700": "148",
+ "afafff": "147",
+ "afafd7": "146",
+ "afafaf": "145",
+ "afaf87": "144",
+ "afaf5f": "143",
+ "afaf00": "142",
+ "af87ff": "141",
+ "af87d7": "140",
+ "af87af": "139",
+ "af8787": "138",
+ "af875f": "137",
+ "af8700": "136",
+ "af5fff": "135",
+ "af5fd7": "134",
+ "af5faf": "133",
+ "af5f87": "132",
+ "af5f5f": "131",
+ "af5f00": "130",
+ "af00ff": "129",
+ "af00d7": "128",
+ "af00af": "127",
+ "af0087": "126",
+ "af005f": "125",
+ "af0000": "124",
+ "d70000": "160",
+ "d7005f": "161",
+ "d70087": "162",
+ "d700af": "163",
+ "d700d7": "164",
+ "d700ff": "165",
+ "d75f00": "166",
+ "d75f5f": "167",
+ "d75f87": "168",
+ "d75faf": "169",
+ "d75fd7": "170",
+ "d75fff": "171",
+ "d78700": "172",
+ "d7875f": "173",
+ "d78787": "174",
+ "d787af": "175",
+ "d787d7": "176",
+ "d787ff": "177",
+ "dfaf00": "178",
+ "dfaf5f": "179",
+ "dfaf87": "180",
+ "dfafaf": "181",
+ "dfafdf": "182",
+ "dfafff": "183",
+ "dfdf00": "184",
+ "dfdf5f": "185",
+ "dfdf87": "186",
+ "dfdfaf": "187",
+ "dfdfdf": "188",
+ "dfdfff": "189",
+ "dfff00": "190",
+ "dfff5f": "191",
+ "dfff87": "192",
+ "dfffaf": "193",
+ "dfffdf": "194",
+ "dfffff": "195",
+ "ffff00": "226",
+ "ffff5f": "227",
+ "ffff87": "228",
+ "ffffaf": "229",
+ "ffffdf": "230",
+ "ffffff": "231",
+ "ffdf00": "220",
+ "ffdf5f": "221",
+ "ffdf87": "222",
+ "ffdfaf": "223",
+ "ffdfdf": "224",
+ "ffdfff": "225",
+ "ffaf00": "214",
+ "ffaf5f": "215",
+ "ffaf87": "216",
+ "ffafaf": "217",
+ "ffafdf": "218",
+ "ffafff": "219",
+ "ff8700": "208",
+ "ff875f": "209",
+ "ff8787": "210",
+ "ff87af": "211",
+ "ff87df": "212",
+ "ff87ff": "213",
+ "ff5f00": "202",
+ "ff5f5f": "203",
+ "ff5f87": "204",
+ "ff5faf": "205",
+ "ff5fdf": "206",
+ "ff5fff": "207",
+ "ff0000": "196",
+ "ff005f": "197",
+ "ff0087": "198",
+ "ff00af": "199",
+ "ff00df": "200",
+ "ff00ff": "201",
+ "080808": "232",
+ "121212": "233",
+ "1c1c1c": "234",
+ "262626": "235",
+ "303030": "236",
+ "3a3a3a": "237",
+ "444444": "238",
+ "4e4e4e": "239",
+ "585858": "240",
+ "626262": "241",
+ "6c6c6c": "242",
+ "767676": "243",
+ "eeeeee": "255",
+ "e4e4e4": "254",
+ "dadada": "253",
+ "d0d0d0": "252",
+ "c6c6c6": "251",
+ "bcbcbc": "250",
+ "b2b2b2": "249",
+ "a8a8a8": "248",
+ "9e9e9e": "247",
+ "949494": "246",
+ "8a8a8a": "245",
+ "808080": "244",
+ "000000": "000",
+ "800000": "001",
+ "008000": "002",
+ "808000": "003",
+ "000080": "004",
+ "800080": "005",
+ "008080": "006",
+ "c0c0c0": "007",
+ "808080": "008",
+ "ff0000": "009",
+ "00ff00": "010",
+ "ffff00": "011",
+ "0000ff": "012",
+ "ff00ff": "013",
+ "00ffff": "014",
+ "ffffff": "015"
+}
+
+xterm_tbl_lab = [(convert_color(sRGBColor.new_from_rgb_hex("#" + k),
+ LabColor), v) for (k, v) in xterm_tbl.items()]
+
+
+def colors_name_from_file(file):
+ basename = os.path.basename(file)
+ if basename.endswith(".vim"):
+ return basename[:-4]
+ return basename
+
+
+flip_algs = {
+ 'sqrt': math.sqrt,
+ 'cbrt': lambda x: math.pow(x, 1/3.),
+ '2/3': lambda x: math.pow(x, 2/3.),
+ 'linear': lambda x: x,
+ 'log': math.log
+}
+
+class Vivid:
+
+ def __init__(self, outfile):
+ self.outfilename = outfile
+ self.outfile = open(outfile, "w")
+ self.params = vim.eval("g:spectral_parameters")
+ self.default_bg = self.params.get("default_bg", "dark")
+ self.filter_fg = self.params.get("filter_fg",
+ [[1, 0, 0], [0, 1, 0], [0, 0, 1]])
+ self.filter_bg = self.params.get("filter_bg",
+ [[1, 0, 0], [0, 1, 0], [0, 0, 1]])
+ self.flip_algorithm = self.params.get("flip_algorithm", "sqrt")
+
+ self.dark_highlights = []
+ self.light_highlights = []
+ self.after_highlights = []
+
+ def writeln(self, str):
+ self.outfile.write(str + "\n")
+
+ def start(self):
+ self.writeln("""
+hi clear
+if exists('syntax_on')
+ syntax reset
+endif
+" Default BG = """ + self.default_bg + """
+" Filter FG = """ + str(self.filter_fg) + """
+" Filter BG = """ + str(self.filter_bg) + """
+let g:colors_name="%s"
+""" % (colors_name_from_file(self.outfilename)))
+
+ def highlight_dark(self, name, fg, bg, sp, extra):
+ self._highlight_dark(name, apply_filter(self.filter_fg, fg),
+ apply_filter(self.filter_bg, bg), sp, extra)
+
+ def highlight_light(self, name, fg, bg, sp, extra):
+ self._highlight_light(name, apply_filter(self.filter_fg, fg),
+ apply_filter(self.filter_bg, bg), sp, extra)
+
+ def _highlight_dark(self, name, fg, bg, sp, extra):
+ self.dark_highlights.append(
+ "highlight! %s guifg=%s guibg=%s guisp=%s ctermfg=%s ctermbg=%s %s %s" %
+ (name, fg, bg, sp, self.project(fg), self.project(bg),
+ to_gui(",".join(extra)), to_cterm(",".join(extra))))
+
+ def _highlight_light(self, name, fg, bg, sp, extra):
+ self.light_highlights.append(
+ "highlight! %s guifg=%s guibg=%s guisp=%s ctermfg=%s ctermbg=%s %s %s" %
+ (name, fg, bg, sp, self.project(fg), self.project(bg),
+ to_gui(",".join(extra)), to_cterm(",".join(extra))))
+
+ def highlight_after(self, name, fg, bg, sp, extra):
+ self.after_highlights.append(
+ "highlight! %s guifg=%s guibg=%s guisp=%s ctermfg=%s ctermbg=%s %s %s" %
+ (name, fg, bg, sp, self.project(fg), self.project(bg),
+ to_gui(",".join(extra)), to_cterm(",".join(extra))))
+
+ def highlight(self, name, fg, bg, sp, extra):
+ if self.default_bg == "light":
+ self.highlight_light(name, fg, bg, sp, extra)
+ self.highlight_dark(
+ name,
+ self.flip_brightness(fg),
+ self.flip_brightness(bg),
+ self.flip_brightness(sp),
+ extra)
+ else:
+ self.highlight_dark(name, fg, bg, sp, extra)
+ self.highlight_light(
+ name,
+ self.flip_brightness(fg),
+ self.flip_brightness(bg),
+ self.flip_brightness(sp),
+ extra)
+
+ def project(self, color_hex):
+ if color_hex == "None":
+ return "None"
+
+ lab_color = convert_color(sRGBColor.new_from_rgb_hex(color_hex), LabColor)
+
+ min_value = "0"
+ min_number = 100000000
+
+ for (k, v) in xterm_tbl_lab:
+ number = colormath.color_diff.delta_e_cie2000(k, lab_color)
+ if number < min_number:
+ min_number = number
+ min_value = v
+
+ return min_value
+
+ def finish(self):
+ self.writeln("if &bg == 'dark'")
+ for l in self.dark_highlights:
+ self.writeln(l)
+ self.writeln("else")
+ for l in self.light_highlights:
+ self.writeln(l)
+ self.writeln("endif")
+ for l in self.after_highlights:
+ self.writeln(l)
+
+ self.outfile.flush()
+ self.outfile.close()
+
+ def flip_brightness(self, color_hex):
+ if color_hex == "None":
+ return color_hex
+
+ color = sRGBColor.new_from_rgb_hex(color_hex)
+ color_lab = convert_color(color, LabColor)
+ (l, a, b) = color_lab.get_value_tuple()
+
+ lf = l / 100.0
+ lf = 1 - lf
+
+ lf = flip_algs[self.flip_algorithm](lf)
+
+ new_lab = LabColor(lf * 100, a, b)
+
+ return get_rgb_hex(convert_color(new_lab, sRGBColor))
+
+def spectral_flip_brightness(color_hex):
+ c = spectral_ctx.flip_brightness(color_hex)
+ vim.command('let g:return="%s"' % c)
+
+def spectral_highlight(name, fg, bg):
+ spectral_ctx.highlight(name, fg, bg)
+
+
+def spectral_start(outfile):
+ global spectral_ctx
+ spectral_ctx = Vivid(outfile)
+ spectral_ctx.start()
+
+
+def lighter(color, amt):
+ if isinstance(color, str):
+ color = sRGBColor.new_from_rgb_hex(color)
+
+ color_lab = convert_color(color, LabColor)
+ (l, a, b) = color_lab.get_value_tuple()
+ new_lab = LabColor(l * amt, a, b)
+
+ return convert_color(new_lab, sRGBColor)
+
+
+def spectral_lighter(color, amt):
+ c = lighter(color, amt)
+ vim.command('let g:return="#%02x%02x%02x"' %
+ (int(c.clamped_rgb_r * 255), int(
+ c.clamped_rgb_g * 255), int(c.clamped_rgb_b * 255)))
+
+
+def get_rgb_hex(c):
+ # why colormath no clip values?!
+ (r, g, b) = c.get_upscaled_value_tuple()
+ return "#%02x%02x%02x" % (min(r, 255), min(g, 255), min(b, 255))
+
+
+def to_gui(s):
+ if s:
+ return "gui=" + s
+ else:
+ return ""
+
+
+def to_cterm(s):
+ if s:
+ return "cterm=" + s
+ else:
+ return ""
+
+
+def spectral_finish():
+ spectral_ctx.finish()
+
+
+def apply_filter(filter, color_hex):
+ if color_hex == "None":
+ return "None"
+
+ r = int(color_hex[1:3], 16) / 255.
+ g = int(color_hex[3:5], 16) / 255.
+ b = int(color_hex[5:7], 16) / 255.
+
+ rn = (
+ float(filter[0][0]) * r + float(filter[0][1]) * g +
+ float(filter[0][2]) * b)
+
+ gn = (
+ float(filter[1][0]) * r + float(filter[1][1]) * g +
+ float(filter[1][2]) * b)
+
+ bn = (
+ float(filter[2][0]) * r + float(filter[2][1]) * g +
+ float(filter[2][2]) * b)
+
+ def clip(n):
+ return int(max(min(n, 255), 0))
+
+ return "#%02x%02x%02x" % (clip(rn * 255), clip(gn * 255), clip(bn * 255))
diff --git a/autoload/spectral.vim b/autoload/spectral.vim
new file mode 100644
index 0000000..0284d19
--- /dev/null
+++ b/autoload/spectral.vim
@@ -0,0 +1,250 @@
+function! s:dirname(arg) abort
+ return substitute(a:arg, '/[^/]*$', '', '')
+endfunction
+
+function! s:basename(arg) abort
+ return substitute(a:arg, '.\{-}/\([^/]*\)$', '\1', '')
+endfunction
+
+let s:cache_folder = s:dirname(expand('<sfile>')) . '/cache/'
+let s:this_file = expand('<sfile>')
+let s:this_folder = s:dirname(s:this_file)
+
+let s:source = []
+let s:cache_file = ''
+let s:loaded_python = 0
+let s:use_cache = 0
+
+function! spectral#brighter(color, amount)
+ let saved = 0
+ if exists('g:return')
+ let old_return = g:return
+ let saved = 1
+ endif
+
+ call s:loadPythonScript()
+ exec printf('python3 spectral_lighter("%s", %s)', a:color, a:amount)
+
+ let ret = g:return
+
+ if saved
+ let g:return = old_return
+ else
+ unlet g:return
+ endif
+
+ return ret
+endfunction
+
+function! spectral#desaturate(color, amount)
+ let matrix = [ spectral#normalize([1, a:amount, a:amount], 1),
+ \ spectral#normalize([a:amount, 1, a:amount], 1),
+ \ spectral#normalize([a:amount, a:amount, 1], 1) ]
+
+ let [r, g, b] = spectral#parseColor(a:color)
+
+ let nr = r * matrix[0][0] + g * matrix[0][1] + b * matrix[0][2]
+ let ng = r * matrix[1][0] + g * matrix[1][1] + b * matrix[1][2]
+ let nb = r * matrix[2][0] + g * matrix[2][1] + b * matrix[2][2]
+
+ return spectral#toColor(nr, ng, nb)
+endfunction
+
+
+function! spectral#parseColor(color) abort
+ if type(a:color) == v:t_list
+ return a:color
+ endif
+
+ return [
+ \ str2nr(a:color[1:2], 16),
+ \ str2nr(a:color[3:4], 16),
+ \ str2nr(a:color[5:6], 16) ]
+endfunction
+
+function! spectral#toColor(r, g, b) abort
+ let r = spectral#clip(a:r, 0, 255)
+ let g = spectral#clip(a:g, 0, 255)
+ let b = spectral#clip(a:b, 0, 255)
+
+ return printf("#%02x%02x%02x",
+ \ float2nr(r),
+ \ float2nr(g),
+ \ float2nr(b))
+endfunction
+
+function! spectral#clip(c, min, max) abort
+ if a:c < a:min
+ return a:min
+ elseif a:c > a:max
+ return a:max
+ else
+ return a:c
+ endif
+endfunction
+
+function! s:loadPythonScript()
+ if s:loaded_python
+ return
+ endif
+
+ exec 'py3file ' . s:this_folder . '/spectral.py'
+ let s:loaded_python = 1
+endfunction
+
+function! spectral#normalize(ls, target_mag) abort
+ let total_mag = 0
+ for l in a:ls
+ let total_mag += l * l
+ endfor
+ let total_mag = sqrt(total_mag)
+
+ let lsp = []
+ let frac = total_mag / a:target_mag
+ for l in a:ls
+ call add(lsp, l / frac)
+ endfor
+
+ return lsp
+endfunction
+
+function! spectral#mix(color1, color2, ...) abort
+ if a:0 == 1
+ let amt = a:1
+ else
+ let amt = 0.5
+ endif
+
+ let [r1, g1, b1] = spectral#parseColor(a:color1)
+ let [r2, g2, b2] = spectral#parseColor(a:color2)
+
+ return spectral#toColor(
+ \ r1 * (1 - amt) + r2 * amt,
+ \ g1 * (1 - amt) + g2 * amt,
+ \ b1 * (1 - amt) + b2 * amt)
+
+endfunction
+
+function! spectral#StartCompile()
+ if !exists('g:spectral_parameters')
+ let g:spectral_parameters = {}
+ endif
+
+ call system('mkdir -p ' . shellescape(s:cache_folder))
+
+ let basename = s:basename(g:spectral_colorscheme_file)
+ let s:cache_file = printf('%s/%s', s:cache_folder, basename)
+
+ if filereadable(s:cache_file)
+ let cache_file_time = getftime(s:cache_file)
+ let script_file_time = getftime(g:spectral_colorscheme_file)
+ let this_file_time = getftime(s:this_file)
+ let python_file_time = getftime(s:this_folder . '/spectral.py')
+
+ if cache_file_time >= script_file_time
+ \ && cache_file_time >= this_file_time
+ \ && cache_file_time >= python_file_time
+ exec "source " . s:cache_file
+ let s:use_cache = 1
+ return 1
+ endif
+ endif
+
+ let s:use_cache = 0
+ call s:loadPythonScript()
+ exec "python3 spectral_start('" . s:cache_file . "')"
+
+ return 0
+endfunction
+
+function! s:resolve(name) abort
+ if (len(a:name) == 0 || a:name[0] != '#') && a:name != "None"
+ return eval(a:name)
+ else
+ return a:name
+ endif
+endfunction
+
+function! spectral#flip_brightness(color) abort
+ let saved = 0
+ if exists('g:return')
+ let old_return = g:return
+ let saved = 1
+ endif
+
+ call s:loadPythonScript()
+ exec printf('python3 spectral_flip_brightness("%s")', a:color)
+
+ let ret = g:return
+
+ if saved
+ let g:return = old_return
+ else
+ unlet g:return
+ endif
+
+ return ret
+endfunction
+
+function! spectral#Hi(bang, fn, name, ...)
+ if s:use_cache
+ return
+ endif
+
+ let count = a:0
+ if count == 4
+ let fg = s:resolve(a:1)
+ let bg = s:resolve(a:2)
+ let sp = s:resolve(a:3)
+ let extra = eval(a:4)
+ elseif count == 3
+ let fg = s:resolve(a:1)
+ let bg = s:resolve(a:2)
+ let sp = "None"
+ let extra = eval(a:3)
+ elseif count == 2
+ let fg = s:resolve(a:1)
+ let bg = s:resolve(a:2)
+ let sp = "None"
+ let extra = []
+ elseif count == 1
+ let fg = s:resolve(a:1)
+ let bg = "None"
+ let sp = "None"
+ let extra = []
+ endif
+
+ if extra == []
+ let extra = ["None"]
+ endif
+
+ if a:bang
+ exec printf('python3 spectral_ctx.highlight_after("%s", "%s", "%s", "%s", %s)',
+ \ a:name, fg, bg, sp, string(extra))
+ elseif a:fn == "dark"
+ exec printf('python3 spectral_ctx.highlight_dark("%s", "%s", "%s", "%s", %s)',
+ \ a:name, fg, bg, sp, string(extra))
+ elseif a:fn == "light"
+ exec printf('python3 spectral_ctx.highlight_light("%s", "%s", "%s", "%s", %s)',
+ \ a:name, fg, bg, sp, string(extra))
+ else
+ exec printf('python3 spectral_ctx.highlight("%s", "%s", "%s", "%s", %s)',
+ \ a:name, fg, bg, sp, string(extra))
+ endif
+endfunction
+
+command! -bang -nargs=* Hi call spectral#Hi("<bang>" == "!", "", <f-args>)
+command! -bang -nargs=* HiDark call spectral#Hi("<bang>" == "!", "dark", <f-args>)
+command! -bang -nargs=* HiLight call spectral#Hi("<bang>" == "!", "light", <f-args>)
+
+function! spectral#Finish()
+ unlet g:spectral_parameters
+ unlet g:spectral_colorscheme_file
+
+ if s:use_cache
+ return
+ endif
+
+ python3 spectral_finish()
+ exec "source " . s:cache_file
+endfunction
diff --git a/colors/cooldown.vim b/colors/cooldown.vim
new file mode 100644
index 0000000..20b05fe
--- /dev/null
+++ b/colors/cooldown.vim
@@ -0,0 +1,159 @@
+if !exists('g:spectral_colorscheme_file')
+ let g:spectral_colorscheme_file = expand('<sfile>')
+endif
+
+if !exists('g:spectral_parameters')
+ let g:spectral_parameters = {
+ \ 'default_bg': 'dark',
+ \ 'filter_fg': [spectral#normalize([1, 0, 0], 1),
+ \ spectral#normalize([0, 1, 0], 1),
+ \ spectral#normalize([0, 0, 1], 1)],
+ \ 'flip_algorithm': 'sqrt'}
+endif
+
+let g:_snormal = "#fbdeff"
+let g:_sbackground = "#202025"
+let g:_svert = spectral#brighter(g:_sbackground, 2)
+let g:_sstatement = "#50D28C"
+let g:_stype = '#b7b0ff'
+let g:_sabstract_class = spectral#mix(g:_stype,"#ff0000",0.1)
+let g:_sinterface = spectral#mix(g:_stype,"#ff0000",0.2)
+let g:_senum = spectral#mix(g:_stype,"#ff0000",0.3)
+let g:_spreproc = spectral#brighter(g:_snormal,0.6)
+let g:_sfunction = '#d9a7ff'
+let g:_syellow1 = '#e4c692'
+let g:_scodebg = spectral#brighter(g:_sbackground,2)
+
+call spectral#StartCompile()
+
+Hi Title g:_syellow1 None None ["Underline","Bold"]
+Hi HtmlH2 g:_syellow1 None None ["Bold"]
+Hi HtmlH3 g:_syellow1 None None ["Italic"]
+Hi HtmlItalic g:_snormal None None ["Italic"]
+Hi HtmlBold g:_snormal None None ["Bold"]
+Hi HtmlUnderline g:_snormal None None ["Underline"]
+Hi HtmlBoldItalic g:_snormal None None ["Bold","Italic"]
+Hi markdownCodeBlock None g:_scodebg
+Hi markdownCode None g:_scodebg
+Hi Yellow1 g:_syellow1 None None []
+Hi Blue2 #8fcf81 None None []
+Hi Blue3 #ffc2b1 None None []
+Hi Blue4 #fffbeb None None []
+Hi ColorColumn g:_svert None None []
+Hi Comment #96856a None None ["italic"]
+Hi Conceal #fff0ff None None ["bold"]
+Hi CursorColumn None #666666 None []
+Hi CursorLine None #1d1e1e None []
+Hi CursorLineNr #00557b #151717 None []
+Hi DarkGray #8e8e8e None None []
+Hi DarkTeal #ba928f None None []
+Hi Directory #e4c692 None None ["bold"]
+Hi Error #147d80 #767878 None []
+Hi Fern1 #ffb0fd None None []
+Hi Folded #6b6b6b #c9c7e1 None []
+Hi Function g:_sfunction None None []
+Hi Green1 #f299ff None None []
+Hi Green2 #f57cff None None []
+Hi Green3 #d9a7ff None None []
+Hi IncSearch #7aa6d2 #6b6b6b None ["inverse","reverse"]
+Hi javaError #147d80 None None []
+Hi javaParen None None None []
+Hi LineNr #7d7e96 #0e1010 None ["bold"]
+Hi MatchParen None #008b8b None []
+Hi NonText #9c7e25 #151717 None ["bold"]
+Hi Normal g:_snormal g:_sbackground None []
+Hi VertSplit g:_svert g:_svert
+Hi Orange1 None None None []
+Hi Orange2 #f1afff None None []
+Hi Orange3 None None None []
+Hi Orange4 None None None []
+Hi Orange5 None None None []
+Hi Orange6 None None None []
+Hi PMenu None #ff00ff None []
+Hi PMenuSel None #a9a9a9 None []
+Hi Red1 #7aa6d2 None None []
+Hi Red3 #499b89 None None []
+Hi Red4 None None None []
+Hi Red5 None None None []
+Hi Red6 #7fc774 None None []
+Hi Sage1 #c9c7e1 None None []
+Hi Sage2 #dac1e1 None None []
+Hi Sage3 #e1c1f9 None None []
+Hi Sage3Mix None None None []
+Hi Search #ffdeff #6b6b6b None ["inverse","reverse"]
+Hi SignColumn None #0e1010 None []
+Hi Statement g:_sstatement None None ["bold"]
+Hi StatusLineNC #9da4a4 #727272 None ["bold"]
+Hi StorageClass #7aa6d2 None None ["bold"]
+Hi String #f299ff None None []
+Hi Teal1 #ff8e71 None None []
+Hi Visual #737373 #ffffff None []
+Hi WarmSage #bfcbc7 None None []
+Hi Warning None None None []
+Hi Yellow1 #eeceff None None []
+Hi PreProc g:_spreproc None ["Bold"]
+
+Hi TabLineFill None g:_svert
+Hi TabLineSel #ffffff g:_sbackground ["bold"]
+Hi TabLine #808080 spectral#mix(g:_sbackground,g:_svert) []
+
+Hi Type g:_stype
+Hi EnjinAbstractClass g:_sabstract_class
+Hi EnjinInterface g:_sinterface
+Hi EnjinEnum g:_senum
+
+Hi Pmenu None spectral#mix(g:_sbackground,'#000020',0.3)
+
+Hi PreProcEnjinFunction spectral#mix(g:_sfunction,'#ffffff',0.3)
+Hi PreProcEnjinClass spectral#mix(g:_stype,'#ffffff',0.3)
+Hi PreProcEnjinAbstractClass spectral#mix(g:_sabstract_class,'#ffffff',0.3)
+Hi PreProcEnjinInterface spectral#mix(g:_sinterface,'#ffffff',0.3)
+Hi PreProcEnjinEnum spectral#mix(g:_senum,'#ffffff',0.3)
+Hi PreProcEnjinAnnotation spectral#mix(g:_stype,'#ffffff',0.3)
+
+let g:_sstatuslfg='#7aa6d2'
+Hi StatusLine g:_sstatuslfg spectral#mix(g:_svert,'#0000ff',0.2) None ["bold"]
+Hi StatusLineNC spectral#desaturate(g:_sstatuslfg,0.5) g:_svert None ["bold"]
+
+call spectral#Finish()
+
+hi! link TagbarAccessProtected Yellow1
+hi! link FoldColumn Green1
+hi! link RadiationJavaConstant Constant
+hi! link xmlTag Yellow1
+hi! link RadiationCppNamespace Sage2
+hi! link RadiationJavaAbstractClass Red4
+hi! link RadiationJavaFunction Function
+hi! link javaDocTags Orange6
+hi! link RadiationJavaTypeParameter Red6
+hi! link javaAnnotation PreProc
+hi! link htmlEndTag Blue2
+hi! link javaCodedoc WarmSage
+hi! link RadiationProtoType Red5
+hi! link RadiationCppStruct Type
+hi! link xmlAttrib Green3
+hi! link RadiationJavaParam Orange3
+hi! link RadiationJavaForIterator Sage3Mix
+hi! link RadiationJavaMember Yellow1
+hi! link Structure Red1
+hi! link htmlTagName Yellow1
+hi! link RadiationCppEnum Type
+hi! link RadiationJavaLocalVar Sage2
+hi! link TagbarAccessPublic Green1
+hi! link xmlEndTag Red1
+hi! link Identifier Orange4
+hi! link javaOperator Operator
+hi! link RadiationJavaEnhancedForIterator RadiationJavaForIterator
+hi! link RadiationCppUnion Type
+hi! link RadiationCppTypedef RadiationProtoType
+hi! link javaCommentTitle Yellow1
+hi! link Constant PreProc
+hi! link SpecialKey Yellow1
+hi! link Number Constant
+hi! link javaDocComment Comment
+hi! link TagbarAccessPrivate Red1
+hi! link htmlTag Blue2
+hi! link Operator Yellow1
+hi! link RadiationJavaClass Type
+hi! link RadiationJavaInterface RadiationProtoType
+hi! link Special Orange2
diff --git a/colors/meltdown.vim b/colors/meltdown.vim
new file mode 100644
index 0000000..dca7def
--- /dev/null
+++ b/colors/meltdown.vim
@@ -0,0 +1,193 @@
+if !exists('g:spectral_colorscheme_file')
+ let g:spectral_colorscheme_file = expand('<sfile>')
+endif
+
+if !exists('g:spectral_parameters')
+ let g:spectral_parameters = {
+ \ 'default_bg': 'dark',
+ \ 'filter_fg': [spectral#normalize([1, 0, 0], 1),
+ \ spectral#normalize([0, 1, 0], 1),
+ \ spectral#normalize([0, 0, 1], 1)],
+ \ 'flip_algorithm': "2/3"}
+endif
+
+call spectral#StartCompile()
+
+let g:_sblue1 = '#80a0ff'
+let g:_scomment = '#8ba3bb'
+let g:_snormal = '#d8e5b8'
+let g:_sbackground = '#1e1d1c'
+
+Hi HtmlItalic g:_snormal None None ["Italic"]
+Hi HtmlBold g:_snormal None None ["Bold"]
+Hi Blue1 g:_sblue1 None None []
+Hi ColorColumn #4d5c8b None None []
+Hi Comment g:_scomment None None []
+Hi Conceal spectral#brighter(g:_sbackground,3)
+Hi CursorColumn None #313030 None []
+Hi CursorLine None #313030 None []
+Hi CursorLineNr #ff5d34 #272424 None []
+Hi DarkGray #404040 None None []
+Hi DarkTeal #346063 None None []
+Hi DiffAdd None #1e2d1c None []
+Hi DiffChange None #3e3d1c None []
+Hi DiffDelete #af0000 #3e1d1c None ["bold"]
+Hi DiffText None #4e7d3c None []
+Hi Directory g:_sblue1 None None ["bold"]
+Hi Error #ff0000 #1a1818 None []
+Hi Fern1 #71bc78 None None []
+Hi FoldColumn #80ab24 #1a1818 None []
+Hi FoldColumn1 #80a84f #1a1818 None []
+Hi FoldColumn2 #80a67b #1a1818 None []
+Hi FoldColumn3 #80a4a7 #1a1818 None []
+Hi FoldColumn4 #80a2d3 #1a1818 None []
+Hi FoldColumn5 g:_sblue1 #1a1818 None []
+Hi FoldColumn6 #9992d6 #1a1818 None []
+Hi FoldColumn7 #b285ad #1a1818 None []
+Hi FoldColumn8 #cc7785 #1a1818 None []
+Hi FoldColumn9 #e56a5c #1a1818 None []
+Hi Folded #000000 #9f9a84 None []
+Hi Function #aba024 None None []
+Hi FunctionPreProc #9fa456 None None []
+Hi Green1 #80ab24 None None []
+Hi Green2 #3dab24 None None []
+Hi Green3 #aba024 None None []
+Hi IncSearch #ff5d34 #000000 None ["inverse","reverse"]
+Hi LineNr #9f9a84 #1a1818 None ["bold"]
+Hi MatchParen None #346063 None ["bold"]
+Hi NonText g:_sblue1 #272424 None ["bold"]
+Hi Normal g:_snormal g:_sbackground None []
+Hi Orange1 #ff892f None None []
+Hi Orange2 #ffbd2f None None []
+Hi Orange3 #ff552f None None []
+Hi Orange4 #ffb780 None None []
+Hi Orange5 #ffd780 None None []
+Hi Orange6 #ff9780 None None []
+Hi PMenu #686060 #101010 None []
+Hi PMenuSel #ff5d34 #343030 None ["bold"]
+Hi Red1 #ff5d34 None None []
+Hi Red1PreProc #c0895c None None []
+Hi Red2 #ff8f34 None None []
+Hi Red2PreProc #c09d5c None None []
+Hi Red3 #ff3448 None None []
+Hi Red3PreProc #c07864 None None []
+Hi Red4 #ffa034 None None []
+Hi Red4PreProc #c0a45c None None []
+Hi Red5 #ff9074 None None []
+Hi Red5PreProc #c09d76 None None []
+Hi Red6 #ff74f4 None None []
+Hi Red6PreProc #c092a9 None None []
+Hi Royal #f02690 None None []
+Hi Sage1 #9f9a84 None None []
+Hi Sage2 #8e9f84 None None []
+Hi Sage3 #96a677 None None []
+Hi Sage3Mix g:_scomment None None []
+Hi Search #ffd780 #000000 None ["inverse","reverse"]
+Hi SignColumn None #1a1818 None []
+Hi SpellBad None None #b67632 ["undercurl"]
+Hi Statement g:_sblue1 None None ["bold"]
+Hi StatusLine #ff5d34 #0f0e0e None ["bold"]
+Hi StatusLineNC #686060 #0f0e0e None ["bold"]
+Hi StorageClass #ff5d34 None None ["bold"]
+Hi String #80ab24 None None []
+Hi TabLine #686060 #444040 None ["bold"]
+Hi TabLineFill #686060 #0f0e0e None []
+Hi TabLineSel #ff5d34 #1e1d1c g:_sblue1 ["bold"]
+Hi Teal1 #34ffd6 None None []
+Hi Title #ff8f34 #444040 None ["bold"]
+Hi VertSplit #0f0e0e #0f0e0e None []
+Hi Visual #101010 #e0e0e0 None []
+Hi WarmSage #a09598 None None []
+Hi Warning #ffff00 #1a1818 None []
+Hi Yellow1 #e0bf65 None None []
+Hi Yellow1PreProc #b4b070 None None []
+Hi javaError #dd0000 None None []
+Hi javaParen g:_sblue1 None None ["bold"]
+
+call spectral#Finish()
+
+" if &bg == 'light'
+" hi Normal guifg=#0a1900 ctermfg=233 guibg=#ffffe1 ctermbg=255 gui=NONE cterm=NONE
+" endif
+
+hi! link LiteralTab Warning
+hi! link Constant PreProc
+hi! link Identifier Orange4
+hi! link Number Constant
+hi! link Operator Blue1
+hi! link PreProc Sage3
+hi! link RadiationCppEnum Type
+hi! link RadiationCppNamespace Sage2
+hi! link RadiationCppStruct Type
+hi! link RadiationCppTypedef RadiationProtoType
+hi! link RadiationCppUnion Type
+hi! link RadiationJavaAbstractClass Red4
+hi! link RadiationJavaClass Type
+hi! link RadiationJavaConstant Constant
+hi! link RadiationJavaEnhancedForIterator RadiationJavaForIterator
+hi! link RadiationJavaForIterator Sage3Mix
+hi! link RadiationJavaFunction Function
+hi! link RadiationJavaInterface RadiationProtoType
+hi! link RadiationJavaLambdaParam Royal
+hi! link RadiationJavaLocalVar Sage2
+hi! link RadiationJavaMember Yellow1
+hi! link RadiationJavaParam Orange3
+hi! link RadiationJavaTypeParameter Red6
+hi! link RadiationProtoType Red5
+hi! link Special Orange2
+hi! link SpecialKey Blue1
+hi! link Structure Red1
+hi! link TagbarAccessPrivate Red1
+hi! link TagbarAccessProtected Yellow1
+hi! link TagbarAccessPublic Green1
+hi! link Type Red2
+hi! link htmlEndTag Blue2
+hi! link htmlTag Blue2
+hi! link htmlTagName Blue1
+hi! link javaAnnotation PreProc
+hi! link javaCodedoc WarmSage
+hi! link javaCommentTitle Blue1
+hi! link javaDocComment Comment
+hi! link javaDocTags Orange6
+hi! link javaOperator Operator
+hi! link xmlAttrib Green3
+hi! link xmlEndTag Red1
+hi! link xmlTag Blue1
+
+hi! link EnjinAbstractClass Red4
+hi! link EnjinClass Type
+hi! link EnjinEnum EnjinClass
+hi! link EnjinConstant Constant
+hi! link EnjinEnhancedForVar RadiationJavaForIterator
+hi! link EnjinBasicForVar Sage3Mix
+hi! link EnjinFunction Function
+hi! link EnjinInterface RadiationProtoType
+hi! link EnjinLambdaParameter Royal
+hi! link EnjinLocalVar Sage2
+hi! link EnjinField Yellow1
+hi! link EnjinParameter Orange3
+hi! link EnjinTypeParameter Red6
+hi! link EnjinCatchVar EnjinBasicForVar
+hi! link EnjinAnnotation EnjinInterface
+hi! link EnjinTryVar EnjinCatchVar
+
+hi! link PreProcEnjinAbstractClass PreProcRed4
+hi! link PreProcEnjinClass Red2PreProc
+hi! link PreProcEnjinEnum PreProcEnjinClass
+hi! link PreProcEnjinConstant Yellow1PreProc
+hi! link PreProcEnjinEnhancedForVar RadiationJavaForIterator
+hi! link PreProcEnjinBasicForVar Sage3Mix
+hi! link PreProcEnjinFunction FunctionPreProc
+hi! link PreProcEnjinAnnotationElement FunctionPreProc
+hi! link PreProcEnjinInterface Red5PreProc
+hi! link PreProcEnjinLambdaParameter Royal
+hi! link PreProcEnjinLocalVar Sage2
+hi! link PreProcEnjinField Yellow1
+hi! link PreProcEnjinParameter Orange3
+hi! link PreProcEnjinTypeParameter Red6
+hi! link PreProcEnjinCatchVar EnjinBasicForVar
+hi! link PreProcEnjinAnnotation PreProcEnjinInterface
+hi! link PreProcEnjinTryVar EnjinCatchVar
+
+hi! link javaImportPackage Sage2
+hi! link javaPackage Sage2
diff --git a/colors/poison.vim b/colors/poison.vim
new file mode 100644
index 0000000..6b14a08
--- /dev/null
+++ b/colors/poison.vim
@@ -0,0 +1,145 @@
+if !exists('g:spectral_colorscheme_file')
+ let g:spectral_colorscheme_file = expand('<sfile>')
+endif
+
+if !exists('g:spectral_parameters')
+ let g:spectral_parameters = {
+ \ 'default_bg': 'dark',
+ \ 'filter_fg': [spectral#normalize([1, 0, 0], 1),
+ \ spectral#normalize([0, 1, 0], 1),
+ \ spectral#normalize([0, 0, 1], 1)],
+ \ 'flip_algorithm': "sqrt" }
+endif
+
+call spectral#StartCompile()
+
+let g:_sbackground = '#1e1d1c'
+let g:_solive = '#b7ce41'
+let g:_sdesat = '#aae171'
+let g:_sgreen = '#4eff0c'
+let g:_syellow ='#ffde0c'
+let g:_snormal = '#e5dab8'
+let g:_sred = '#ff0c6c'
+let g:_sorange = '#ffa20c'
+let g:_sgray = '#8b9da1'
+let g:_sbrightgray = spectral#brighter('#8b9da1', 1.2)
+let g:_sblue = '#6ee0e0'
+let g:_spurple = '#f87fff'
+
+let g:_svertsplit = spectral#brighter(g:_sbackground,2.5)
+let g:_ssigncol = spectral#brighter(g:_sbackground,1.8)
+
+let g:_stype = g:_sorange
+let g:_senum = spectral#mix(g:_sorange,g:_sgray,0.4)
+let g:_sinterface = spectral#mix(g:_sorange,g:_sred,0.4)
+let g:_sabstract_class = spectral#mix(g:_sorange,g:_sred,0.2)
+let g:_sstring = spectral#mix(g:_sgreen, g:_syellow, 0.5)
+
+let g:_sgold = '#ffd900'
+
+Hi StatusLine g:_sred spectral#brighter(g:_svertsplit,0.7) ["Bold"]
+Hi StatusLineNC g:_sgray spectral#brighter(g:_svertsplit,0.7) ["None"]
+
+Hi Folded g:_sred spectral#brighter(g:_sbackground,1.5)
+Hi Error #d52a2f None #d52a2f ["Undercurl"]
+Hi Warning #d5d32a None #d5d32a ["None"]
+Hi Success #2ad547 None
+Hi Normal g:_snormal g:_sbackground
+Hi Comment spectral#brighter(g:_sblue,0.9) None ["Italic"]
+Hi StorageClass g:_sgreen None ["Bold"]
+Hi Statement g:_sgreen None ["Bold"]
+Hi String g:_sstring None ["Italic"]
+Hi Identifier g:_sbrightgray None
+Hi Structure g:_sred None ["Bold"]
+Hi Function #b8b3a9 None ["None"]
+Hi Type g:_stype None ["Bold"]
+Hi Special g:_sgold
+Hi javaCommentTitle g:_sblue None ["Bold","Italic"]
+Hi javaDocTags g:_sdesat None ["None"]
+Hi htmlTag #dc00ff None ["None"]
+Hi htmlTagName g:_sblue None ["Bold"]
+Hi javaDocComment spectral#brighter(spectral#desaturate(g:_sblue,0.5),0.7) None ["Italic"]
+Hi PreProc g:_sgray None ["Bold"]
+Hi EnjinParameter spectral#mix(g:_sbrightgray,g:_sorange,0.4) None []
+Hi EnjinLambdaParameter spectral#mix(g:_sbrightgray,g:_sred,0.4) None []
+Hi EnjinLocalVar spectral#mix(g:_sbrightgray,g:_sgreen,0.4) None []
+Hi EnjinEnum g:_senum None ["Bold"]
+Hi EnjinInterface g:_sinterface None ["Bold"]
+Hi EnjinAbstractClass g:_sabstract_class None ["Bold"]
+Hi EnjinField spectral#mix(g:_sbrightgray,g:_syellow,0.4)
+Hi EnjinTypeParameter g:_sred None ["Bold"]
+Hi EnjinCatchVar g:_sred
+Hi EnjinForVar g:_sred
+Hi EnjinEnhancedForVar g:_sred
+Hi Directory g:_sblue None ["Bold"]
+Hi PMenu g:_snormal spectral#brighter(g:_sbackground,1.3)
+Hi UnderCursor None spectral#brighter(g:_sbackground,2)
+Hi CursorLine None spectral#brighter(g:_sbackground,2)
+Hi Search None spectral#brighter(g:_sbackground,3)
+Hi IncSearch None spectral#brighter(g:_sbackground,3)
+Hi Visual g:_sbackground g:_snormal
+Hi javaImportPackage g:_sgray
+Hi SpellBad None None #ff834a ["Undercurl"]
+Hi Operator g:_sred None ["Bold"]
+Hi Number #dbff00
+Hi PreProcEnjinEnum spectral#mix(g:_senum,g:_sbrightgray,0.6) None ["Bold"]
+Hi PreProcEnjinClass spectral#mix(g:_stype,g:_sbrightgray,0.6) None ["Bold"]
+Hi PreProcEnjinInterface spectral#mix(g:_sinterface,g:_sbrightgray,0.6) None ["Bold"]
+Hi PreProcEnjinAbstractClass spectral#mix(g:_sabstract_class,g:_sbrightgray,0.6) None ["Bold"]
+Hi PreProcEnjinConstant spectral#mix(g:_sgray,g:_sbrightgray,0.6) None ["Bold"]
+Hi PreProcEnjinFunction spectral#mix(g:_syellow,g:_sbrightgray,0.6)
+Hi DiagnosticSignWarn g:_sgold None ["None"]
+Hi DiagnosticSignError #d52a2f None ["None"]
+Hi DiagnosticVirtualTextWarn g:_sgold spectral#brighter(g:_sbackground,0.7) ["None"]
+Hi DiagnosticVirtualTextError #d52a2f spectral#brighter(g:_sbackground,0.7) ["None"]
+Hi DiagnosticUnderlineWarn None None #ffaf00 ["undercurl"]
+Hi DiagnosticUnderlineError None None #ff0a00 ["undercurl"]
+Hi LineNr spectral#desaturate(g:_syellow,0.2) g:_ssigncol ["Bold"]
+Hi ColorColumn g:_ssigncol None
+Hi SignColumn g:_ssigncol g:_ssigncol
+Hi NonText g:_sred g:_ssigncol ["Bold","Italic"]
+Hi VertSplit g:_svertsplit g:_svertsplit ["Bold","Italic"]
+Hi TabLineFill g:_ssigncol g:_ssigncol
+Hi TabLine g:_snormal spectral#brighter(g:_ssigncol,1.3)
+Hi TabLineSel g:_sred g:_sbackground g:_sgreen ["Bold"]
+
+call spectral#Finish()
+
+if &background == "dark"
+ let g:terminal_color_0="#282828"
+ let g:terminal_color_1="#cc241d"
+ let g:terminal_color_2="#98971a"
+ let g:terminal_color_3="#d79921"
+ let g:terminal_color_4="#458588"
+ let g:terminal_color_5="#b16286"
+ let g:terminal_color_6="#689d6a"
+ let g:terminal_color_7="#a89984"
+ let g:terminal_color_8="#928374"
+ let g:terminal_color_9="#fb4934"
+ let g:terminal_color_10="#b8bb26"
+ let g:terminal_color_11="#fabd2f"
+ let g:terminal_color_12="#83a598"
+ let g:terminal_color_13="#d3869b"
+ let g:terminal_color_14="#8ec07c"
+ let g:terminal_color_15="#ebdbb2"
+else
+ let g:terminal_color_0="#dedede"
+ let g:terminal_color_1="#df3c2f"
+ let g:terminal_color_2="#485300"
+ let g:terminal_color_3="#5c3400"
+ let g:terminal_color_4="#347073"
+ let g:terminal_color_5="#9a4c71"
+ let g:terminal_color_6="#215b2b"
+ let g:terminal_color_7="#4e4431"
+ let g:terminal_color_8="#65594b"
+ let g:terminal_color_9="#b30005"
+ let g:terminal_color_10="#2a3600"
+ let g:terminal_color_11="#3f1b00"
+ let g:terminal_color_12="#2a493e"
+ let g:terminal_color_13="#712d44"
+ let g:terminal_color_14="#003b00"
+ let g:terminal_color_15="#1e1600"
+endif
+
+hi! link Constant PreProc
+hi! link vimFunction Function
diff --git a/colors/royal.vim b/colors/royal.vim
new file mode 100644
index 0000000..15fafe8
--- /dev/null
+++ b/colors/royal.vim
@@ -0,0 +1,104 @@
+
+if !exists('g:spectral_colorscheme_file')
+ let g:spectral_colorscheme_file = expand('<sfile>')
+endif
+
+if !exists('g:spectral_parameters')
+ let g:spectral_parameters = {
+ \ 'default_bg': 'light',
+ \ 'filter_fg': [spectral#normalize([1, 0.2, 0.2], 0.8),
+ \ spectral#normalize([0.2, 1, 0.2], 0.8),
+ \ spectral#normalize([0.2, 0.2, 1], 0.8)]}
+endif
+
+let g:_snormal = '#2a1a12'
+let g:_sbg = '#e5dab8'
+let g:_sblueish = '#4e587e'
+let g:_sdarknormal = '#f1dbcf'
+let g:_sdarkbg = '#25211a'
+let g:_sdarkvsplit = spectral#brighter(g:_sdarkbg, 2)
+let g:_sdarktablinefill = spectral#brighter(g:_sdarkbg, 0.6)
+let g:_sdarktabline = spectral#brighter(g:_sdarkbg, 0.8)
+
+call spectral#StartCompile()
+
+Hi StatusLineNC #2a1a12 #f0f0f0
+Hi StatusLine #903300 #f0f0f0 ["Bold"]
+
+HiLight Normal g:_snormal g:_sbg
+HiDark Normal g:_sdarknormal g:_sdarkbg
+
+HiLight Comment #a38643 None ["Italic"]
+HiDark Comment spectral#brighter(g:_sdarkbg,3) None ["Italic"]
+
+Hi PMenu #2a1a12 #e9dfc9 ["None"]
+Hi SignColumn #2a1a12 #e9dfc9 ["None"]
+Hi NonText None spectral#brighter(g:_sbg,1.2)
+Hi Visual #e5dac0 #2a1a12 ["None"]
+Hi Special g:_sblueish
+
+Hi StorageClass #903300 None ["bold"]
+Hi Structure #903300 None ["bold"]
+Hi String #2d5c05 None ["None"]
+Hi Type #3c2c5c None ["bold"]
+Hi Statement #b34700 None ["bold"]
+Hi ColorColumn #8080dd None ["None"]
+Hi PreProc #735a65 None ["None"]
+Hi Function g:_sblueish None ["None"]
+Hi Identifier #1a2d4b None ["None"]
+Hi Number #b32da0 None ["None"]
+Hi Directory #542db3 None ["None"]
+Hi Constant #58545c None ["Italic"]
+
+Hi EnjinTypeParameter #b36b00 None ["bold"]
+Hi EnjinLambdaParameter #a000d0 None ["italic"]
+Hi EnjinInterface #9c2c5c None ["bold"]
+Hi EnjinAbstractClass #6c2c5c None ["bold"]
+
+Hi EnjinParameter #8b2d1a None ["Italic"]
+Hi EnjinField #443c44 None ["None"]
+Hi EnjinLocalVar #565b5c None ["Italic"]
+
+Hi javaCommentTitle #6b4b00 None ["Bold"]
+Hi javaDocTags #8b2b00 None ["None"]
+Hi javaDocComment #636343 None ["None"]
+Hi htmlTag #e65c00 None ["None"]
+Hi htmlTagName #b34700 None ["None"]
+Hi LineNr #b34700 #dad5d0 ["Bold"]
+Hi CursorLineNr #b347b3 #dad5d0 ["Bold"]
+Hi CursorColumn None #d3d0ca ["None"]
+Hi CursorLine None #d3d0ca ["None"]
+Hi LspDiagnosticsDefaultWarning #FF4F00 None ["None"]
+Hi LspDiagnosticsUnderlineWarning None None #FFaF00 ["undercurl"]
+Hi LspDiagnosticsUnderlineError None None #FF0a00 ["undercurl"]
+
+HiLight VertSplit #a59a70 #a59a70 ["None"]
+HiDark VertSplit g:_sdarkvsplit g:_sdarkvsplit
+
+HiLight TabLineFill #2a1a12 spectral#brighter(g:_sbg,2) ["None"]
+HiLight TabLine #000000 spectral#brighter(g:_sbg,1.2) ["Bold"]
+HiLight TabLineSel g:_sblueish g:_sbg #000000 ["Bold"]
+
+HiDark TabLineFill None g:_sdarktablinefill
+HiDark TabLine None g:_sdarktabline
+HiDark TabLineSel spectral#flip_brightness(g:_sblueish) g:_sdarkbg ["Bold"]
+
+Hi PreProcEnjinInterface #483e60 None ["None"]
+Hi PreProcEnjinClass #2d2145 None ["None"]
+Hi PreProcEnjinFunction #30374f None ["None"]
+Hi PreProcEnjinEnum #483e60 None ["None"]
+Hi PreProcEnjinAnnotationElement #30374f None ["None"]
+
+call spectral#Finish()
+
+if &bg=="dark"
+ hi EnjinTypeParameter guifg=#ff9900
+ hi javaCommentTitle guifg=#ffaa00 gui=bold
+ hi javaDocComment guifg=#ffdd30
+endif
+
+hi Terminal guibg=#000000 guifg=#e0e0e0
+
+hi link CurosorLine CursorColumn
+hi link vimFunction Function
+hi link PreProcEnjinAnnotation PreProcEnjinInterface
diff --git a/colors/spectral.vim b/colors/spectral.vim
new file mode 100644
index 0000000..7a0e579
--- /dev/null
+++ b/colors/spectral.vim
@@ -0,0 +1,35 @@
+
+if !exists('g:spectral_colorscheme_file')
+ let g:spectral_colorscheme_file = expand('<sfile>')
+endif
+
+let g:spectral_parameters = {'default_bg': 'light'}
+
+if spectral#StartCompile()
+ finish
+endif
+
+Hi Normal #2a1a12 #f5ead0 ["None"]
+Hi SignColumn #2a1a12 #e5dac0 ["None"]
+Hi NonText #2a1a12 #e5dad0 ["bold"]
+
+Hi StorageClass #931d80 None ["None"]
+Hi Structure #dd5050 None ["None"]
+Hi String #4f7a40 None ["None"]
+Hi Type #2c2c5c None ["None"]
+Hi Statement #8c2f10 None ["None"]
+Hi ColorColumn #8080dd None ["None"]
+Hi PreProc #735a65 None ["None"]
+Hi Function #1a2d4b None ["None"]
+Hi Identifier #1a2d4b None ["None"]
+Hi Number #b32da0 None ["None"]
+Hi Comment #313167 None ["None"]
+Hi Directory #542db3 None ["None"]
+
+Hi PreProcEnjinInterface #483e60 None ["None"]
+Hi PreProcEnjinEnum #483e60 None ["None"]
+
+call spectral#Finish()
+
+hi link vimFunction Function
+hi link PreProcEnjinAnnotation PreProcEnjinInterface