From 9bc8f4e8f0033b0ea577f20a787afd6d0626eccc Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 19 Sep 2022 06:47:39 +0200 Subject: [PATCH] feat: improved tokyonight moon (based on moonlight theme) palette --- lua/tokyonight/colors.lua | 128 +++++++++++++++++++++----------------- lua/tokyonight/util.lua | 7 ++- 2 files changed, 75 insertions(+), 60 deletions(-) diff --git a/lua/tokyonight/colors.lua b/lua/tokyonight/colors.lua index ba95083..cfede88 100644 --- a/lua/tokyonight/colors.lua +++ b/lua/tokyonight/colors.lua @@ -2,44 +2,54 @@ local util = require("tokyonight.util") local M = {} -M.default = function() - return { - none = "NONE", - bg_dark = "#1f2335", - bg = "#24283b", - bg_highlight = "#292e42", - terminal_black = "#414868", - fg = "#c0caf5", - fg_dark = "#a9b1d6", - fg_gutter = "#3b4261", - dark3 = "#545c7e", - comment = "#565f89", - dark5 = "#737aa2", - blue0 = "#3d59a1", - blue = "#7aa2f7", - cyan = "#7dcfff", - blue1 = "#2ac3de", - blue2 = "#0db9d7", - blue5 = "#89ddff", - blue6 = "#b4f9f8", - blue7 = "#394b70", - magenta = "#bb9af7", - magenta2 = "#ff007c", - purple = "#9d7cd8", - orange = "#ff9e64", - yellow = "#e0af68", - green = "#9ece6a", - green1 = "#73daca", - green2 = "#41a6b5", - teal = "#1abc9c", - red = "#f7768e", - red1 = "#db4b4b", - git = { change = "#6183bb", add = "#449dab", delete = "#914c54" }, - } -end +---@class Palette +M.default = { + none = "NONE", + bg_dark = "#1f2335", + bg = "#24283b", + bg_highlight = "#292e42", + terminal_black = "#414868", + fg = "#c0caf5", + fg_dark = "#a9b1d6", + fg_gutter = "#3b4261", + dark3 = "#545c7e", + comment = "#565f89", + dark5 = "#737aa2", + blue0 = "#3d59a1", + blue = "#7aa2f7", + cyan = "#7dcfff", + blue1 = "#2ac3de", + blue2 = "#0db9d7", + blue5 = "#89ddff", + blue6 = "#b4f9f8", + blue7 = "#394b70", + magenta = "#bb9af7", + magenta2 = "#ff007c", + purple = "#9d7cd8", + orange = "#ff9e64", + yellow = "#e0af68", + green = "#9ece6a", + green1 = "#73daca", + green2 = "#41a6b5", + teal = "#1abc9c", + red = "#f7768e", + red1 = "#db4b4b", + git = { change = "#6183bb", add = "#449dab", delete = "#914c54" }, + gitSigns = { + add = "#266d6a", + change = "#536c9e", + delete = "#b2555b", + }, +} + +M.night = { + bg = "#1a1b26", + bg_dark = "#16161e", +} +M.day = M.night M.moon = function() - return { + local ret = { none = "NONE", bg_dark = "#1e2030", -- bg = "#222436", -- @@ -51,27 +61,37 @@ M.moon = function() dark3 = "#545c7e", comment = "#7a88cf", -- dark5 = "#737aa2", - blue0 = "#3d59a1", + blue0 = "#3e68d7", -- blue = "#82aaff", -- cyan = "#86e1fc", -- - blue1 = "#2ac3de", + blue1 = "#65bcff", -- blue2 = "#0db9d7", blue5 = "#89ddff", - blue6 = "#b4f9f8", + blue6 = "#b4f9f8", -- blue7 = "#394b70", - magenta = "#c099ff", -- + magenta = "#fca7ea", -- magenta2 = "#ff007c", purple = "#c099ff", -- orange = "#ff966c", -- yellow = "#ffc777", -- green = "#c3e88d", -- - green1 = "#73daca", + green1 = "#4fd6be", -- green2 = "#41a6b5", teal = "#4fd6be", -- red = "#ff757f", -- - red1 = "#db4b4b", - git = { change = "#6183bb", add = "#449dab", delete = "#914c54" }, + red1 = "#c53b53", -- } + ret.git = { + change = util.blend(ret.blue, ret.bg, "ee"), + add = util.blend(ret.green, ret.bg, "ee"), + delete = util.blend(ret.red, ret.bg, "dd"), + } + ret.gitSigns = { + change = util.blend(ret.blue, ret.bg, "66"), + add = util.blend(ret.green, ret.bg, "66"), + delete = util.blend(ret.red, ret.bg, "aa"), + } + return ret end ---@return ColorScheme @@ -79,15 +99,15 @@ function M.setup(opts) opts = opts or {} local config = require("tokyonight.config") - -- Color Palette - ---@class ColorScheme - local colors = M.default() - if config.options.style == "moon" then - colors = vim.tbl_deep_extend("force", colors, M.moon()) - elseif config.options.style == "night" or config.is_day() then - colors.bg = "#1a1b26" - colors.bg_dark = "#16161e" + local palette = M[config.options.style] or {} + if type(palette) == "function" then + palette = palette() end + + -- Color Palette + ---@class ColorScheme: Palette + local colors = vim.tbl_deep_extend("force", M.default, palette) + util.bg = colors.bg util.day_brightness = config.options.day_brightness @@ -98,12 +118,6 @@ function M.setup(opts) text = colors.blue7, } - colors.gitSigns = { - add = "#266d6a", - change = "#536c9e", - delete = "#b2555b", - } - colors.git.ignore = colors.dark3 colors.black = util.darken(colors.bg, 0.8, "#000000") colors.border_highlight = colors.blue0 diff --git a/lua/tokyonight/util.lua b/lua/tokyonight/util.lua index ce8f5cc..98e8b86 100644 --- a/lua/tokyonight/util.lua +++ b/lua/tokyonight/util.lua @@ -14,8 +14,9 @@ end ---@param foreground string foreground color ---@param background string background color ----@param alpha number number between 0 and 1. 0 results in bg, 1 results in fg +---@param alpha number|string number between 0 and 1. 0 results in bg, 1 results in fg function M.blend(foreground, background, alpha) + alpha = type(alpha) == "string" and (tonumber(alpha, 16) / 0xff) or alpha local bg = hexToRgb(background) local fg = hexToRgb(foreground) @@ -28,11 +29,11 @@ function M.blend(foreground, background, alpha) end function M.darken(hex, amount, bg) - return M.blend(hex, bg or M.bg, math.abs(amount)) + return M.blend(hex, bg or M.bg, amount) end function M.lighten(hex, amount, fg) - return M.blend(hex, fg or M.fg, math.abs(amount)) + return M.blend(hex, fg or M.fg, amount) end function M.invert_color(color)