From 9365a8e96827cbf7bc5adad6d29bcd05b4d761b2 Mon Sep 17 00:00:00 2001 From: bee Date: Tue, 5 May 2026 22:37:10 +0530 Subject: Migrate from nixcats to nix-wrapper-modules --- colors/matugen.lua | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 colors/matugen.lua (limited to 'colors/matugen.lua') diff --git a/colors/matugen.lua b/colors/matugen.lua new file mode 100644 index 0000000..241bdf2 --- /dev/null +++ b/colors/matugen.lua @@ -0,0 +1,78 @@ +local present, base46 = pcall(require, "base46") +if not present or not base46._DMS_SUPPORT then + vim.notify( + "base46 plugin not found or incorrect, make sure to install AvengeMedia/base46", + vim.log.levels.ERROR, + { title = "matugen integration" } + ) + return +end + +local config_home = vim.env.XDG_CONFIG_HOME +if config_home == nil or #config_home == 0 then + config_home = vim.fs.joinpath(vim.env.HOME, ".config") +end + +local colors_file_path = vim.fs.joinpath(config_home, "nvim", "colors.json") +local colors_file = io.open(colors_file_path, "r") +if colors_file == nil then + vim.notify( + "cannnot read matugen colors file at '" .. colors_file_path .. "'", + vim.log.levels.ERROR, + { title = "matugen integration" } + ) + return +end +local colors = vim.json.decode(colors_file:read("*a")) +colors_file:close() + +local mode = colors.mode +if mode ~= nil then + if mode:match("light") then + vim.o.background = "light" + elseif mode:match("dark") then + vim.o.background = "dark" + end +end + +local settings = { matugenTemplateNeovimSetBackground = true } + +local theme_base = ("github_" .. vim.o.background) +local harmony = 0.5 +local theme_name = "matugen" + +if not _G._matugen_theme_watcher then + local uv = vim.uv or vim.loop + _G._matugen_theme_watcher = { uv.new_fs_event(), reload_timer = uv.new_timer() } + + local debounce_time = 100 -- ms + local function handler() + _G._matugen_theme_watcher.reload_timer:stop() + _G._matugen_theme_watcher.reload_timer:start( + debounce_time, + 0, + vim.schedule_wrap(function() + base46.theme_tables[theme_name] = nil + if vim.g.colors_name == theme_name then + vim.cmd.colorscheme(theme_name) + end + _G._matugen_theme_watcher[1]:stop() + _G._matugen_theme_watcher[1]:start(colors_file_path, {}, handler) + end) + ) + end + _G._matugen_theme_watcher[1]:start(colors_file_path, {}, handler) +end + +if not base46.theme_tables[theme_name] or base46.theme_tables[theme_name].type ~= vim.o.background then + local builtin = vim.deepcopy(assert(base46.get_builtin_theme(theme_base))) + local harmonized = base46.theme_harmonize(builtin, colors.source_color, harmony) + if settings.matugenTemplateNeovimSetBackground ~= false then + harmonized = base46.theme_set_bg(harmonized, colors.background) + end + + base46.theme_tables[theme_name] = harmonized +end + +base46.load(theme_name) +vim.g.colors_name = theme_name -- cgit v1.3.1