diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-08-23 12:42:37 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-08-23 12:42:37 +0900 |
| commit | 07d294425a98ee5d1e22d03e2b24ae2c76e487c0 (patch) | |
| tree | a6818f0d64438c5fdb88b00a35d944f80c056213 /mac/.config/LunarVim/lua/lvim/core/autocmds.lua | |
| parent | 6fc28cdb3529ca8ee864cb5c41674cb0a4af72a1 (diff) | |
updates
Diffstat (limited to 'mac/.config/LunarVim/lua/lvim/core/autocmds.lua')
| -rw-r--r-- | mac/.config/LunarVim/lua/lvim/core/autocmds.lua | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/mac/.config/LunarVim/lua/lvim/core/autocmds.lua b/mac/.config/LunarVim/lua/lvim/core/autocmds.lua new file mode 100644 index 0000000..f7ec7eb --- /dev/null +++ b/mac/.config/LunarVim/lua/lvim/core/autocmds.lua @@ -0,0 +1,281 @@ +local M = {} +local Log = require "lvim.core.log" + +--- Load the default set of autogroups and autocommands. +function M.load_defaults() + local definitions = { + { + "TextYankPost", + { + group = "_general_settings", + pattern = "*", + desc = "Highlight text on yank", + callback = function() + vim.highlight.on_yank { higroup = "Search", timeout = 100 } + end, + }, + }, + { + "FileType", + { + group = "_hide_dap_repl", + pattern = "dap-repl", + command = "set nobuflisted", + }, + }, + { + "FileType", + { + group = "_filetype_settings", + pattern = { "lua" }, + desc = "fix gf functionality inside .lua files", + callback = function() + ---@diagnostic disable: assign-type-mismatch + -- credit: https://github.com/sam4llis/nvim-lua-gf + vim.opt_local.include = [[\v<((do|load)file|require|reload)[^''"]*[''"]\zs[^''"]+]] + vim.opt_local.includeexpr = "substitute(v:fname,'\\.','/','g')" + vim.opt_local.suffixesadd:prepend ".lua" + vim.opt_local.suffixesadd:prepend "init.lua" + + for _, path in pairs(vim.api.nvim_list_runtime_paths()) do + vim.opt_local.path:append(path .. "/lua") + end + end, + }, + }, + { + "FileType", + { + group = "_buffer_mappings", + pattern = { + "qf", + "help", + "man", + "floaterm", + "lspinfo", + "lir", + "lsp-installer", + "null-ls-info", + "tsplayground", + "DressingSelect", + "Jaq", + }, + callback = function() + vim.keymap.set("n", "q", "<cmd>close<cr>", { buffer = true }) + vim.opt_local.buflisted = false + end, + }, + }, + { + "VimResized", + { + group = "_auto_resize", + pattern = "*", + command = [[ + let _auto_resize_current_tab = tabpagenr() + tabdo wincmd = + execute 'tabnext' _auto_resize_current_tab + ]], + }, + }, + { + "FileType", + { + group = "_filetype_settings", + pattern = "alpha", + callback = function() + vim.cmd [[ + set nobuflisted + ]] + end, + }, + }, + { + "FileType", + { + group = "_filetype_settings", + pattern = "lir", + callback = function() + vim.opt_local.number = false + vim.opt_local.relativenumber = false + end, + }, + }, + { + "ColorScheme", + { + group = "_lvim_colorscheme", + callback = function() + if lvim.builtin.breadcrumbs.active then + require("lvim.core.breadcrumbs").get_winbar() + end + local statusline_hl = vim.api.nvim_get_hl(0, { name = "StatusLine" }) + local cursorline_hl = vim.api.nvim_get_hl(0, { name = "CursorLine" }) + local normal_hl = vim.api.nvim_get_hl(0, { name = "Normal" }) + vim.api.nvim_set_hl(0, "CmpItemKindCopilot", { fg = "#6CC644" }) + vim.api.nvim_set_hl(0, "CmpItemKindTabnine", { fg = "#CA42F0" }) + vim.api.nvim_set_hl(0, "CmpItemKindCrate", { fg = "#F64D00" }) + vim.api.nvim_set_hl(0, "CmpItemKindEmoji", { fg = "#FDE030" }) + vim.api.nvim_set_hl(0, "SLCopilot", { fg = "#6CC644", bg = statusline_hl.bg }) + vim.api.nvim_set_hl(0, "SLGitIcon", { fg = "#E8AB53", bg = cursorline_hl.bg }) + vim.api.nvim_set_hl(0, "SLBranchName", { fg = normal_hl.fg, bg = cursorline_hl.bg }) + vim.api.nvim_set_hl(0, "SLSeparator", { fg = cursorline_hl.fg, bg = statusline_hl.bg }) + end, + }, + }, + { -- taken from AstroNvim + "BufEnter", + { + group = "_dir_opened", + nested = true, + callback = function(args) + local bufname = vim.api.nvim_buf_get_name(args.buf) + if require("lvim.utils").is_directory(bufname) then + vim.api.nvim_del_augroup_by_name "_dir_opened" + vim.cmd "do User DirOpened" + vim.api.nvim_exec_autocmds(args.event, { buffer = args.buf, data = args.data }) + end + end, + }, + }, + { -- taken from AstroNvim + { "BufRead", "BufWinEnter", "BufNewFile" }, + { + group = "_file_opened", + nested = true, + callback = function(args) + local buftype = vim.api.nvim_get_option_value("buftype", { buf = args.buf }) + if not (vim.fn.expand "%" == "" or buftype == "nofile") then + vim.api.nvim_del_augroup_by_name "_file_opened" + vim.api.nvim_exec_autocmds("User", { pattern = "FileOpened" }) + require("lvim.lsp").setup() + end + end, + }, + }, + } + + M.define_autocmds(definitions) +end + +local get_format_on_save_opts = function() + local defaults = require("lvim.config.defaults").format_on_save + -- accept a basic boolean `lvim.format_on_save=true` + if type(lvim.format_on_save) ~= "table" then + return defaults + end + + return { + pattern = lvim.format_on_save.pattern or defaults.pattern, + timeout = lvim.format_on_save.timeout or defaults.timeout, + } +end + +function M.enable_format_on_save() + local opts = get_format_on_save_opts() + vim.api.nvim_create_augroup("lsp_format_on_save", {}) + vim.api.nvim_create_autocmd("BufWritePre", { + group = "lsp_format_on_save", + pattern = opts.pattern, + callback = function() + require("lvim.lsp.utils").format { timeout_ms = opts.timeout, filter = opts.filter } + end, + }) + Log:debug "enabled format-on-save" +end + +function M.disable_format_on_save() + M.clear_augroup "lsp_format_on_save" + Log:debug "disabled format-on-save" +end + +function M.configure_format_on_save() + if type(lvim.format_on_save) == "table" and lvim.format_on_save.enabled then + M.enable_format_on_save() + elseif lvim.format_on_save == true then + M.enable_format_on_save() + else + M.disable_format_on_save() + end +end + +function M.toggle_format_on_save() + local exists, autocmds = pcall(vim.api.nvim_get_autocmds, { + group = "lsp_format_on_save", + event = "BufWritePre", + }) + if not exists or #autocmds == 0 then + M.enable_format_on_save() + else + M.disable_format_on_save() + end +end + +function M.enable_reload_config_on_save() + -- autocmds require forward slashes (even on windows) + local pattern = get_config_dir():gsub("\\", "/") .. "/*.lua" + + vim.api.nvim_create_augroup("lvim_reload_config_on_save", {}) + vim.api.nvim_create_autocmd("BufWritePost", { + group = "lvim_reload_config_on_save", + pattern = pattern, + desc = "Trigger LvimReload on saving config.lua", + callback = function() + require("lvim.config"):reload() + end, + }) +end + +function M.enable_transparent_mode() + vim.api.nvim_create_autocmd("ColorScheme", { + pattern = "*", + callback = function() + local hl_groups = { + "Normal", + "SignColumn", + "NormalNC", + "TelescopeBorder", + "NvimTreeNormal", + "NvimTreeNormalNC", + "EndOfBuffer", + "MsgArea", + } + for _, name in ipairs(hl_groups) do + vim.cmd(string.format("highlight %s ctermbg=none guibg=none", name)) + end + end, + }) + vim.opt.fillchars = "eob: " +end + +--- Clean autocommand in a group if it exists +--- This is safer than trying to delete the augroup itself +---@param name string the augroup name +function M.clear_augroup(name) + -- defer the function in case the autocommand is still in-use + Log:debug("request to clear autocmds " .. name) + vim.schedule(function() + pcall(function() + vim.api.nvim_clear_autocmds { group = name } + end) + end) +end + +--- Create autocommand groups based on the passed definitions +--- Also creates the augroup automatically if it doesn't exist +---@param definitions table contains a tuple of event, opts, see `:h nvim_create_autocmd` +function M.define_autocmds(definitions) + for _, entry in ipairs(definitions) do + local event = entry[1] + local opts = entry[2] + if type(opts.group) == "string" and opts.group ~= "" then + local exists, _ = pcall(vim.api.nvim_get_autocmds, { group = opts.group }) + if not exists then + vim.api.nvim_create_augroup(opts.group, {}) + end + end + vim.api.nvim_create_autocmd(event, opts) + end +end + +return M |
