summaryrefslogtreecommitdiff
path: root/colors
diff options
context:
space:
mode:
authorbrustybee <bee@4d2.org>2026-03-15 01:57:01 +0530
committerbrustybee <bee@4d2.org>2026-03-15 01:57:01 +0530
commitb36ab7916276d16779eca4f5bf98d9cfdbcead41 (patch)
tree4daa6343d5dcfd8ffe389264bb34dc5eda460473 /colors
parent2479ff966522aeaad70f4260af1323dc637bc089 (diff)
meow in excitement
Diffstat (limited to 'colors')
-rw-r--r--colors/bee_matugen.lua98
1 files changed, 98 insertions, 0 deletions
diff --git a/colors/bee_matugen.lua b/colors/bee_matugen.lua
new file mode 100644
index 0000000..cd2ea1e
--- /dev/null
+++ b/colors/bee_matugen.lua
@@ -0,0 +1,98 @@
+local present, base46 = pcall(require, "base46")
+if not present then
+ vim.notify("base46 plugin not found or incorrect.", 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 settings_file_path = vim.fs.joinpath(config_home, "matugen", "neovim_matugen.json")
+
+local settings_file = io.open(settings_file_path, "r")
+if settings_file == nil then
+ vim.notify(
+ "Cannot read matugen settings file at '" .. settings_file_path .. "'. Did you run beesettings wall?",
+ vim.log.levels.WARN,
+ { title = "matugen integration" }
+ )
+ return
+end
+
+local content = settings_file:read("*a")
+settings_file:close()
+
+local ok, settings = pcall(vim.json.decode, content)
+if not ok or not settings then
+ vim.notify("Failed to parse matugen JSON", vim.log.levels.ERROR, { title = "matugen integration" })
+ return
+end
+
+local harmony = settings.harmony or 0.5
+local source_color = settings.source_color
+local bg_color = settings.background
+
+if not source_color or not bg_color then
+ vim.notify(
+ "Missing colors in matugen JSON. Check your template.",
+ vim.log.levels.ERROR,
+ { title = "matugen integration" }
+ )
+ return
+end
+
+-- local theme_base = "github_" .. vim.o.background
+local theme_base = "kanagawa"
+if vim.o.background == "light" then
+ theme_base = "one_light"
+end
+local theme_name = "bee_matugen"
+vim.o.background = settings.mode
+
+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()
+ -- Clear the cached theme table to force a rebuild
+ local f = io.open(settings_file_path, "r")
+ if f then
+ local new_content = f:read("*a")
+ f:close()
+ local ok_new, new_settings = pcall(vim.json.decode, new_content)
+ if ok_new and new_settings.mode then
+ vim.o.background = new_settings.mode
+ end
+ end
+ 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(settings_file_path, {}, handler)
+ end)
+ )
+ end
+ _G._matugen_theme_watcher[1]:start(settings_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, source_color, harmony)
+ harmonized = base46.theme_set_bg(harmonized, bg_color)
+
+ base46.theme_tables[theme_name] = harmonized
+end
+
+base46.load(theme_name)
+vim.g.colors_name = theme_name