mirror of
https://github.com/ViViDboarder/vim-settings.git
synced 2024-11-10 05:16:27 +00:00
78 lines
2.9 KiB
Lua
78 lines
2.9 KiB
Lua
-- 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()
|