mirror of
https://github.com/davegallant/nix-config
synced 2025-08-06 11:23:40 +00:00
286 lines
9.2 KiB
VimL
286 lines
9.2 KiB
VimL
" Color Scheme: CandyPaper
|
|
" Author: DF_XYZ
|
|
" License: MIT
|
|
|
|
highlight clear
|
|
set background=dark
|
|
|
|
if exists("syntax_on")
|
|
syntax reset
|
|
endif
|
|
|
|
let colors_name = "CandyCode"
|
|
|
|
" Convert color from HSV to RGB as a hex string
|
|
" See: https://en.wikipedia.org/wiki/HSL_and_HSV#From_HSV
|
|
function s:hsv_to_rgb(h, s, v) "{
|
|
let l:C = (a:s / 100.0) * (a:v / 100.0)
|
|
let l:H = a:h / 60.0 | let l:H_mod_2 = float2nr(l:H) % 2 + l:H - float2nr(l:H)
|
|
let l:X = l:C * (1 - abs(l:H_mod_2 - 1))
|
|
|
|
if 0 <= l:H && l:H < 1
|
|
let l:r = l:C
|
|
let l:g = l:X
|
|
let l:b = 0
|
|
elseif 1 <= H && H < 2
|
|
let l:r = l:X
|
|
let l:g = l:C
|
|
let l:b = 0
|
|
elseif 2 <= l:H && l:H < 3
|
|
let l:r = 0
|
|
let l:g = l:C
|
|
let l:b = l:X
|
|
elseif 3 <= l:H && l:H < 4
|
|
let l:r = 0
|
|
let l:g = l:X
|
|
let l:b = l:C
|
|
elseif 4 <= l:H && l:H < 5
|
|
let l:r = X
|
|
let l:g = 0
|
|
let l:b = C
|
|
elseif 5 <= l:H && l:H < 6
|
|
let l:r = C
|
|
let l:g = 0
|
|
let l:b = X
|
|
else
|
|
let l:r = 0
|
|
let l:g = 0
|
|
let l:b = 0
|
|
endif
|
|
|
|
let l:r += a:v / 100.0 - l:C
|
|
let l:g += a:v / 100.0 - l:C
|
|
let l:b += a:v / 100.0 - l:C
|
|
let l:R = float2nr(round(l:r * 255))
|
|
let l:G = float2nr(round(l:g * 255))
|
|
let l:B = float2nr(round(l:b * 255))
|
|
|
|
return printf("#%02x%02x%02x", l:R, l:G, l:B)
|
|
endfunction "}
|
|
|
|
" Return the approximate grey index with the given grey level
|
|
function s:grey_index(x) "{
|
|
if a:x < 14
|
|
return 0
|
|
else
|
|
let l:i = (a:x - 8) / 10
|
|
let l:j = (a:x - 8) % 10
|
|
return l:j < 5 ? l:i : l:i + 1
|
|
endif
|
|
endfunction "}
|
|
|
|
" Return the actual grey level with the grey index
|
|
function s:grey_level(x) "{
|
|
return a:x == 0 ? 0 : a:x * 10 + 8
|
|
endfunction "}
|
|
|
|
" Return the color index with the given grey index
|
|
function s:grey_color_index(x) "{
|
|
if a:x == 0
|
|
return 16
|
|
elseif a:x == 25
|
|
return 231
|
|
else
|
|
return 231 + a:x
|
|
endif
|
|
endfunction "}
|
|
|
|
" Return the approximate color index with the given color level
|
|
function s:color_index(x) "{
|
|
if a:x < 75
|
|
return 0
|
|
else
|
|
let l:i = (a:x - 55) / 40
|
|
let l:j = (a:x - 55) % 40
|
|
return l:j < 20 ? l:i : l:i + 1
|
|
endif
|
|
endfunction "}
|
|
|
|
" Return the actual color level with the color index
|
|
function s:color_level(x) "{
|
|
return a:x == 0 ? 0 : a:x * 40 + 55
|
|
endfunction "}
|
|
|
|
" Return the color index with the given color indices
|
|
function s:rgb_color_index(x, y, z) "{
|
|
return 16 + a:x * 36 + a:y * 6 + a:z
|
|
endfunction "}
|
|
|
|
" Return the color index with the given RGB hex string
|
|
function s:rgb_to_index(rgb) "{
|
|
let l:r = str2nr(strpart(a:rgb, 1, 2), 16)
|
|
let l:g = str2nr(strpart(a:rgb, 3, 2), 16)
|
|
let l:b = str2nr(strpart(a:rgb, 5, 2), 16)
|
|
|
|
let l:grey_x = s:grey_index(l:r)
|
|
let l:grey_y = s:grey_index(l:g)
|
|
let l:grey_z = s:grey_index(l:b)
|
|
|
|
let l:x = s:color_index(l:r)
|
|
let l:y = s:color_index(l:g)
|
|
let l:z = s:color_index(l:b)
|
|
|
|
if l:grey_x == l:grey_y && l:grey_y == l:grey_z
|
|
let l:diff_grey_r = s:grey_level(l:grey_x) - l:r
|
|
let l:diff_grey_g = s:grey_level(l:grey_y) - l:g
|
|
let l:diff_grey_b = s:grey_level(l:grey_z) - l:b
|
|
let l:diff_grey = l:diff_grey_r * l:diff_grey_r + l:diff_grey_g * l:diff_grey_g + l:diff_grey_b * l:diff_grey_b
|
|
let l:diff_r = s:color_level(l:grey_x) - l:r
|
|
let l:diff_g = s:color_level(l:grey_y) - l:g
|
|
let l:diff_b = s:color_level(l:grey_z) - l:b
|
|
let l:diff_color = l:diff_r * l:diff_r + l:diff_g * l:diff_g + l:diff_b * l:diff_b
|
|
return l:diff_grey < l:diff_color ? s:grey_color_index(l:grey_x) : s:rgb_color_index(l:x, l:y, l:z)
|
|
else
|
|
return s:rgb_color_index(l:x, l:y, l:x)
|
|
endif
|
|
endfunction "}
|
|
|
|
" Set foreground color
|
|
function s:fg(group, h, s, v) "{
|
|
let l:rgb = s:hsv_to_rgb(a:h, a:s, a:v)
|
|
let l:index = s:rgb_to_index(l:rgb)
|
|
exec "highlight " . a:group . " guifg=" . l:rgb . " ctermfg=" . l:index
|
|
endfunction "}
|
|
|
|
" Set background color
|
|
function s:bg(group, h, s, v) "{
|
|
let l:rgb = s:hsv_to_rgb(a:h, a:s, a:v)
|
|
let l:index = s:rgb_to_index(l:rgb)
|
|
exec "highlight " . a:group . " guibg=" . l:rgb . " ctermbg=" . l:index
|
|
endfunction "}
|
|
|
|
" Set attributions
|
|
function s:attr(group, attr) "{
|
|
exec "highlight " . a:group . " gui=" . a:attr . " cterm=" . a:attr
|
|
endfunction "}
|
|
|
|
" Basic Highlighting Groups:
|
|
" {
|
|
call s:fg("SpecialKey", 60, 60, 75)
|
|
call s:fg("NonText", 120, 15, 45) | call s:attr("NonText", "none")
|
|
call s:fg("Directory", 210, 60, 75)
|
|
call s:fg("IncSearch", 0, 0, 15) | call s:bg("IncSearch", 90, 45, 75) | call s:attr("IncSearch", "none")
|
|
call s:fg("Search", 0, 0, 15) | call s:bg("Search", 60, 60, 75) | call s:attr("Search", "none")
|
|
call s:fg("ErrorMsg", 0, 0, 75) | call s:bg("ErrorMsg", 0, 75, 60)
|
|
call s:fg("WarningMsg", 0, 60, 75)
|
|
call s:fg("MoreMsg", 120, 45, 75) | call s:attr("MoreMsg", "none")
|
|
call s:attr("ModeMsg", "none")
|
|
call s:fg("LineNr", 120, 15, 45)
|
|
call s:fg("CursorLineNr", 120, 15, 60) | call s:attr("CursorLineNr", "none")
|
|
call s:fg("Question", 120, 45, 75) | call s:attr("Question", "none")
|
|
call s:fg("StatusLine", 0, 0, 15) | call s:bg("StatusLine", 120, 15, 75) | call s:attr("StatusLine", "none")
|
|
call s:fg("StatusLineNC", 120, 15, 30) | call s:bg("StatusLineNC", 120, 15, 75) | call s:attr("StatusLine", "none")
|
|
call s:fg("Title", 120, 45, 75) | call s:attr("Title", "none")
|
|
call s:bg("Visual", 210, 60, 30)
|
|
call s:bg("VisualNOS", 210, 60, 30) | call s:attr("VisualNOS", "underline")
|
|
call s:fg("WildMenu", 120, 15, 75) | call s:bg("WildMenu", 0, 0, 15)
|
|
call s:fg("Folded", 90, 45, 75) | call s:bg("Folded", 150, 45, 30)
|
|
call s:fg("FoldColumn", 90, 45, 75) | call s:bg("FoldColumn", 0, 0, 15)
|
|
call s:bg("DiffAdd", 120, 45, 30)
|
|
call s:bg("DiffChange", 210, 45, 30)
|
|
call s:fg("DiffDelete", 120, 15, 75) | call s:bg("DiffDelete", 0, 0, 30) | call s:attr("DiffDelete", "none")
|
|
call s:bg("DiffText", 0, 45, 30) | call s:attr("DiffText", "none")
|
|
call s:fg("SignColumn", 90, 45, 75) | call s:bg("SignColumn", 0, 0, 15)
|
|
call s:fg("Conceal", 210, 60, 75) | call s:bg("Conceal", 0, 0, 15)
|
|
call s:fg("Pmenu", 0, 0, 15) | call s:bg("Pmenu", 120, 15, 60)
|
|
call s:fg("PmenuSel", 120, 15, 75) | call s:bg("PmenuSel", 210, 60, 30)
|
|
call s:bg("PmenuSbar", 120, 5, 45)
|
|
call s:bg("PmenuThumb", 120, 5, 75)
|
|
call s:fg("TabLine", 0, 0, 15) | call s:bg("TabLine", 120, 15, 75) | call s:attr("TabLine", "none")
|
|
call s:attr("TabLineSel", "none")
|
|
call s:bg("CursorLine", 120, 15, 20) | call s:attr("CursorLine", "none")
|
|
call s:bg("CursorColumn", 120, 15, 20)
|
|
call s:bg("ColorColumn", 120, 15, 30)
|
|
" }
|
|
|
|
" Basic Syntax Groups:
|
|
" {
|
|
call s:fg("MatchParen", 90, 45, 75) | call s:bg("MatchParen", 150, 45, 30)
|
|
call s:fg("Normal", 120, 15, 75) | call s:bg("Normal", 0, 0, 15)
|
|
call s:fg("Comment", 120, 30, 60)
|
|
call s:fg("Constant", 300, 30, 75)
|
|
call s:fg("String", 90, 45, 75)
|
|
call s:fg("Character", 90, 45, 75)
|
|
call s:fg("Boolean", 120, 45, 75)
|
|
call s:fg("Identifier", 210, 60, 75)
|
|
call s:fg("Function", 210, 30, 75)
|
|
call s:fg("Statement", 120, 45, 75) | call s:attr("Statement", "none")
|
|
call s:fg("Operator", 210, 30, 75)
|
|
call s:fg("PreProc", 120, 45, 75)
|
|
call s:fg("Type", 120, 45, 75) | call s:attr("Type", "none")
|
|
call s:fg("Special", 60, 60, 75)
|
|
call s:fg("Tag", 120, 45, 75)
|
|
call s:fg("SpecialComment", 120, 45, 75)
|
|
call s:fg("Underlined", 210, 45, 75)
|
|
call s:fg("Ignore", 120, 15, 45)
|
|
highlight clear Error | call s:fg("Error", 0, 60, 75)
|
|
highlight clear Todo | call s:fg("Todo", 60, 60, 60)
|
|
" }
|
|
|
|
" Java Syntax:
|
|
" {
|
|
call s:fg("javaOperator", 120, 45, 75)
|
|
call s:fg("javaCommentTitle", 120, 30, 60)
|
|
call s:fg("javaDocTags", 120, 45, 75)
|
|
call s:fg("javaDocParam", 120, 15, 75)
|
|
call s:fg("javaConstant", 120, 45, 75)
|
|
call s:fg("javaAnnotation", 270, 30, 75)
|
|
" }
|
|
|
|
" Python:
|
|
" {
|
|
call s:fg("pythonOperator", 120, 45, 75)
|
|
call s:fg("pythonDecorator", 270, 30, 75)
|
|
call s:fg("pythonDecoratorName", 270, 30, 75)
|
|
call s:fg("pythonExceptions", 210, 60, 75)
|
|
" }
|
|
|
|
" Markdown:
|
|
" {
|
|
call s:fg("markdownHeadingDelimiter", 120, 45, 75)
|
|
call s:fg("markdownCodeDelimiter", 90, 45, 75)
|
|
call s:fg("markdownCode", 90, 45, 75)
|
|
call s:fg("markdownCodeBlock", 90, 45, 75)
|
|
" }
|
|
|
|
" Vim Syntax:
|
|
" {
|
|
call s:fg("vimOption", 270, 30, 75)
|
|
call s:fg("vimParenSep", 210, 30, 75)
|
|
" }
|
|
|
|
" XML Syntax:
|
|
" {
|
|
call s:fg("xmlEntity", 270, 30, 75)
|
|
call s:fg("xmlAttrib", 210, 60, 75)
|
|
call s:fg("xmlTagName", 120, 45, 75)
|
|
call s:fg("xmlTag", 120, 45, 75)
|
|
call s:fg("xmlEndTag", 120, 45, 75)
|
|
" }
|
|
|
|
" HTML Syntax:
|
|
" {
|
|
call s:fg("htmlTag", 120, 45, 75)
|
|
call s:fg("htmlEndTag", 120, 45, 75)
|
|
call s:fg("htmlArg", 210, 60, 75)
|
|
call s:fg("htmlSpecialChar", 270, 30, 75)
|
|
call s:fg("javascript", 120, 15, 75)
|
|
" }
|
|
|
|
" Delete Functions:
|
|
" {
|
|
delfunction s:hsv_to_rgb
|
|
delfunction s:grey_index
|
|
delfunction s:grey_level
|
|
delfunction s:grey_color_index
|
|
delfunction s:color_index
|
|
delfunction s:color_level
|
|
delfunction s:rgb_color_index
|
|
delfunction s:rgb_to_index
|
|
delfunction s:fg
|
|
delfunction s:bg
|
|
delfunction s:attr
|
|
" }
|
|
|
|
" vim: cc=120 foldmethod=marker foldmarker={,}
|