diff --git a/NEWS.md b/NEWS.md index 50b72da3..90937459 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,6 +2,23 @@ ## 10.x +- **lazygit** now automatically uses the colors of your current colorscheme. + This is enabled by default. To disable, add the below to your `options.lua`: + + ```lua + vim.g.lazygit_theme = false + ``` + +- Added support for `basedpyright` to the **python** extra. + Enable in your `options.lua` with: + + ```lua + vim.g.lazyvim_python_lsp = "basedpyright" + ``` + + Be aware that `basedpyright` is still in development and + may not work exactly the same as `pyright`. + - User extras under `lua/plugins/extras` can now also be managed with **LazyExtras** diff --git a/lua/lazyvim/config/keymaps.lua b/lua/lazyvim/config/keymaps.lua index e5790d8f..339bf82a 100644 --- a/lua/lazyvim/config/keymaps.lua +++ b/lua/lazyvim/config/keymaps.lua @@ -125,12 +125,12 @@ map("n", "uT", function() if vim.b.ts_highlight then vim.treesitter.stop map("n", "ub", function() LazyVim.toggle("background", false, {"light", "dark"}) end, { desc = "Toggle Background" }) -- lazygit -map("n", "gg", function() LazyVim.terminal({ "lazygit" }, { cwd = LazyVim.root.git(), esc_esc = false, ctrl_hjkl = false }) end, { desc = "Lazygit (root dir)" }) -map("n", "gG", function() LazyVim.terminal({ "lazygit" }, {esc_esc = false, ctrl_hjkl = false}) end, { desc = "Lazygit (cwd)" }) +map("n", "gg", function() LazyVim.lazygit( { cwd = LazyVim.root.git() }) end, { desc = "Lazygit (root dir)" }) +map("n", "gG", function() LazyVim.lazygit() end, { desc = "Lazygit (cwd)" }) map("n", "gf", function() local git_path = vim.api.nvim_buf_get_name(0) - LazyVim.terminal({ "lazygit", "-f", vim.trim(git_path) }, { esc_esc = false, ctrl_hjkl = false }) + LazyVim.lazygit({args = { "-f", vim.trim(git_path) }}) end, { desc = "Lazygit current file history" }) -- quit diff --git a/lua/lazyvim/config/options.lua b/lua/lazyvim/config/options.lua index 26e9fe75..af73e61e 100644 --- a/lua/lazyvim/config/options.lua +++ b/lua/lazyvim/config/options.lua @@ -12,6 +12,11 @@ vim.g.autoformat = true -- * a function with signature `function(buf) -> string|string[]` vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" } +-- LazyVim automatically configures the lazygit theme, +-- based on the active colorscheme. +-- Set to false to disable. +vim.g.lazygit_theme = true + -- Optionally setup the terminal to use -- This sets `vim.o.shell` and does some additional configuration for: -- * pwsh diff --git a/lua/lazyvim/util/init.lua b/lua/lazyvim/util/init.lua index 4de0d3e7..93abe101 100644 --- a/lua/lazyvim/util/init.lua +++ b/lua/lazyvim/util/init.lua @@ -6,6 +6,7 @@ local LazyUtil = require("lazy.core.util") ---@field root lazyvim.util.root ---@field telescope lazyvim.util.telescope ---@field terminal lazyvim.util.terminal +---@field lazygit lazyvim.util.lazygit ---@field toggle lazyvim.util.toggle ---@field format lazyvim.util.format ---@field plugin lazyvim.util.plugin diff --git a/lua/lazyvim/util/lazygit.lua b/lua/lazyvim/util/lazygit.lua new file mode 100644 index 00000000..031c6124 --- /dev/null +++ b/lua/lazyvim/util/lazygit.lua @@ -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