-- Update colors based on environment variables function _G.update_colors() local function maybe_set(scope, name, val, force) force = force or false local changed = vim[scope][name] ~= val if changed or force then if scope == "g" and name == "colors_name" then -- Colorscheme is different. Use this instead of setting colors_name directly -- Try to set the colorscheme. If not loaded, skip the error local status, _ = pcall(vim.cmd, "colorscheme " .. val) if not status then vim.notify("Failed to set colorscheme to " .. val .. ". Maybe it's not yet loaded") end else vim[scope][name] = val end return changed end return false end -- Set colorscheme based on env local utils = require("utils") local default_color = "wombat_lush" local env_color = utils.env_default("VIM_COLOR", default_color) env_color = utils.env_default("NVIM_COLOR", env_color) -- Read dark mode local mode = utils.env_default("IS_DARKMODE", "dark") if vim.g.is_mac == 1 then local cmd = "defaults read -g AppleInterfaceStyle 2>/dev/null || echo Light" mode = vim.fn.system(cmd):gsub("\n", ""):lower() end -- Update background and theme local change = false if mode == "dark" then env_color = utils.env_default("VIM_COLOR_DARK", env_color) env_color = utils.env_default("NVIM_COLOR_DARK", env_color) change = maybe_set("o", "background", "dark") change = maybe_set("g", "colors_name", env_color, false) or change elseif mode == "light" then env_color = utils.env_default("VIM_COLOR_LIGHT", env_color) env_color = utils.env_default("NVIM_COLOR_LIGHT", env_color) change = maybe_set("o", "background", "light") change = maybe_set("g", "colors_name", env_color, false) or change end -- Update status line theme if change then if vim.fn.exists(":AirlineRefresh") == 1 then vim.cmd(":AirlineRefresh") elseif utils.is_plugin_loaded("lualine.nvim") then require("plugins.lualine").config_lualine() end end return change and "Changed color to " .. env_color .. " with mode " .. mode or "No change" end -- Don't need the autocommand when dark-notify is installed local utils = require("utils") if not utils.is_plugin_loaded("dark-notify") then -- TODO: remove check when dropping v0.6.0 if vim.fn.has("nvim-0.7.0") == 1 then vim.api.nvim_create_autocmd({ "FocusGained" }, { pattern = "*", callback = _G.update_colors, group = vim.api.nvim_create_augroup("auto_colors", { clear = true }), }) else utils.autocmd("auto_colors", "FocusGained * call v:lua.update_colors()") end end -- Initial setting of colors _G.update_colors()