palette.lua 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. local interpolate = function(source, target, percent)
  2. local result = "#"
  3. for _, i in pairs({ 2, 4, 6 }) do
  4. local sval = tonumber(source:sub(i, i + 1), 16)
  5. local tval = tonumber(target:sub(i, i + 1), 16)
  6. local difference = tval - sval
  7. local delta = math.floor(difference * (percent / 100))
  8. local value = string.format("%x",
  9. math.max(math.min(sval + delta, 255), 0))
  10. if value:len() == 1 then value = "0" .. value end
  11. result = result .. value
  12. end
  13. return result
  14. end
  15. return {
  16. load = function()
  17. local loaded = {}
  18. local output = vim.fn.system([[
  19. echo BLACK=$JONATHANDARKER_COLOR_00;
  20. echo RED=$JONATHANDARKER_COLOR_01;
  21. echo GREEN=$JONATHANDARKER_COLOR_02;
  22. echo ORANGE=$JONATHANDARKER_COLOR_03;
  23. echo CYAN=$JONATHANDARKER_COLOR_04;
  24. echo MAGENTA=$JONATHANDARKER_COLOR_05;
  25. echo LILAC=$JONATHANDARKER_COLOR_06;
  26. echo SILVER=$JONATHANDARKER_COLOR_07;
  27. echo GREY=$JONATHANDARKER_COLOR_08;
  28. echo BURGUNDY=$JONATHANDARKER_COLOR_09;
  29. echo CHARTREUSE=$JONATHANDARKER_COLOR_10;
  30. echo YELLOW=$JONATHANDARKER_COLOR_11;
  31. echo BLUE=$JONATHANDARKER_COLOR_12;
  32. echo PLUM=$JONATHANDARKER_COLOR_13;
  33. echo PERIWINKLE=$JONATHANDARKER_COLOR_14;
  34. echo WHITE=$JONATHANDARKER_COLOR_15;
  35. echo BACKGROUND=$JONATHANDARKER_COLOR_BG;
  36. echo BACKGROUNDALT=$JONATHANDARKER_COLOR_BA;
  37. echo FOREGROUND=$JONATHANDARKER_COLOR_FG;
  38. echo FOREGROUNDALT=$JONATHANDARKER_COLOR_FA;
  39. ]])
  40. for definition in string.gmatch(output, "[^%s]+=[^%s]+") do
  41. local name = definition:match("[^%s]+="):sub(1, -2)
  42. local value = definition:match("=[^%s]+"):sub(2)
  43. loaded[name] = value
  44. end
  45. loaded.SPECIAL_SUBTLE = interpolate(loaded.BACKGROUND,
  46. loaded.FOREGROUND, 12)
  47. loaded.SPECIAL_CURSOR = interpolate(loaded.FOREGROUND,
  48. loaded.BACKGROUND, 10)
  49. loaded.hset = function(group, config)
  50. vim.api.nvim_set_hl(0, group, config)
  51. end
  52. loaded.link = function(group, target)
  53. vim.api.nvim_set_hl(0, group, { link = target })
  54. end
  55. return loaded
  56. end
  57. }