mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-22 00:49:03 +02:00
feat(lazygit): lazygit now automatically uses colors from your Neovim colorscheme
Disable by setting `vim.g.lazygit_theme = false` in your `options.lua`
This commit is contained in:
parent
c00e3aa6b1
commit
7d0dbc6ded
5 changed files with 101 additions and 3 deletions
75
lua/lazyvim/util/lazygit.lua
Normal file
75
lua/lazyvim/util/lazygit.lua
Normal file
|
@ -0,0 +1,75 @@
|
|||
---@class lazyvim.util.lazygit
|
||||
---@field config_dir? string
|
||||
---@overload fun(cmd: string|string[], opts: LazyTermOpts): LazyFloat
|
||||
local M = setmetatable({}, {
|
||||
__call = function(m, ...)
|
||||
return m.open(...)
|
||||
end,
|
||||
})
|
||||
|
||||
M.theme_path = vim.fn.stdpath("cache") .. "/lazygit-theme.yml"
|
||||
|
||||
-- re-create theme file on startup
|
||||
M.dirty = true
|
||||
|
||||
-- re-create theme file on ColorScheme change
|
||||
vim.api.nvim_create_autocmd("ColorScheme", {
|
||||
callback = function()
|
||||
M.dirty = true
|
||||
end,
|
||||
})
|
||||
|
||||
-- Opens lazygit
|
||||
---@param opts? LazyTermOpts | {args?: string[]}
|
||||
function M.open(opts)
|
||||
opts = vim.tbl_deep_extend("force", {}, opts or {}, {
|
||||
esc_esc = false,
|
||||
ctrl_hjkl = false,
|
||||
})
|
||||
local cmd = { "lazygit" }
|
||||
if vim.g.lazygit_theme then
|
||||
if M.dirty then
|
||||
M.update_theme()
|
||||
end
|
||||
M.config_dir = M.config_dir or vim.trim(vim.fn.system("lazygit -cd"))
|
||||
vim.env.LG_CONFIG_FILE = M.config_dir .. "/config.yml" .. "," .. M.theme_path
|
||||
end
|
||||
vim.list_extend(cmd, opts.args or {})
|
||||
return LazyVim.terminal(cmd, opts)
|
||||
end
|
||||
|
||||
function M.set_ansi_color(idx, color)
|
||||
io.write(("\27]4;%d;%s\7"):format(idx, color))
|
||||
end
|
||||
|
||||
function M.update_theme()
|
||||
-- LazyGit uses color 241 a lot, so also set it to a nice color
|
||||
M.set_ansi_color(241, LazyVim.ui.color("Special") or "blue")
|
||||
|
||||
local theme = {
|
||||
activeBorderColor = { LazyVim.ui.color("MatchParen") or "orange", "bold" },
|
||||
cherryPickedCommitBgColor = { "cyan" },
|
||||
cherryPickedCommitFgColor = { "blue" },
|
||||
defaultFgColor = { "default" },
|
||||
inactiveBorderColor = { LazyVim.ui.color("FloatBorder") or "blue" },
|
||||
optionsTextColor = { "blue" },
|
||||
searchingActiveBorderColor = { LazyVim.ui.color("MatchParen") or "orange", "bold" },
|
||||
selectedLineBgColor = { LazyVim.ui.color("CursorLine", true) }, -- set to `default` to have no background colour
|
||||
unstagedChangesColor = { "red" },
|
||||
}
|
||||
---@type string[]
|
||||
local lines = {}
|
||||
lines[#lines + 1] = "gui:"
|
||||
lines[#lines + 1] = " theme:"
|
||||
for k, v in pairs(theme) do
|
||||
lines[#lines + 1] = (" %s:"):format(k)
|
||||
for _, c in ipairs(v) do
|
||||
lines[#lines + 1] = (" - %q"):format(c)
|
||||
end
|
||||
end
|
||||
local config = table.concat(lines, "\n")
|
||||
require("lazy.util").write_file(M.theme_path, config)
|
||||
M.dirty = false
|
||||
end
|
||||
|
||||
return M
|
Loading…
Add table
Add a link
Reference in a new issue