2025-04-12 23:49:02 +01:00
|
|
|
-- [[ Basic Autocommands ]]
|
|
|
|
|
-- See `:help lua-guide-autocommands`
|
|
|
|
|
|
|
|
|
|
-- Highlight when yanking (copying) text
|
|
|
|
|
-- Try it with `yap` in normal mode
|
|
|
|
|
-- See `:help vim.highlight.on_yank()`
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd("TextYankPost", {
|
|
|
|
|
desc = "Highlight when yanking (copying) text",
|
|
|
|
|
group = vim.api.nvim_create_augroup("kickstart-highlight-yank", { clear = true }),
|
|
|
|
|
callback = function()
|
|
|
|
|
vim.highlight.on_yank()
|
|
|
|
|
end,
|
2025-04-12 23:49:02 +01:00
|
|
|
})
|
|
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
local autosave_group = vim.api.nvim_create_augroup("autosaving", { clear = true })
|
2025-04-13 22:53:08 +01:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd("FocusLost", {
|
|
|
|
|
group = autosave_group,
|
|
|
|
|
pattern = "*",
|
|
|
|
|
command = "silent! wa", -- Save all files when moving away from the window
|
|
|
|
|
nested = true, -- Allow other autocommands to run after this one
|
2025-04-13 22:53:08 +01:00
|
|
|
})
|
|
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd("BufLeave", {
|
|
|
|
|
group = autosave_group,
|
|
|
|
|
pattern = "*",
|
|
|
|
|
command = "silent! wa", -- Save all files when switching buffers
|
|
|
|
|
nested = true, -- Allow other autocommands to run after this one
|
2025-04-17 08:53:20 +01:00
|
|
|
})
|
2025-04-13 22:53:08 +01:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd("SwapExists", {
|
|
|
|
|
desc = "Always choose to delete the swap file, files are saved automatically",
|
|
|
|
|
group = vim.api.nvim_create_augroup("NoSwaps", { clear = true }),
|
|
|
|
|
callback = function(args)
|
|
|
|
|
vim.cmd("let v:swapchoice = 'd'")
|
|
|
|
|
end,
|
2025-08-26 18:23:14 +01:00
|
|
|
})
|
|
|
|
|
|
2025-04-14 15:20:54 +01:00
|
|
|
-- vim.api.nvim_create_autocmd('TextChanged', {
|
2026-05-04 13:43:39 +01:00
|
|
|
-- group = autosave_group,
|
|
|
|
|
-- pattern = '*',
|
|
|
|
|
-- command = 'silent! wa', -- Save all files when text is changed
|
|
|
|
|
-- })
|
2025-04-13 22:53:08 +01:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd("User", {
|
|
|
|
|
pattern = "OilActionsPost",
|
|
|
|
|
callback = function(event)
|
|
|
|
|
if event.data.actions.type == "move" then
|
|
|
|
|
Snacks.rename.on_rename_file(event.data.actions.src_url, event.data.actions.dest_url)
|
|
|
|
|
end
|
|
|
|
|
end,
|
2026-05-04 13:43:39 +01:00
|
|
|
})
|
2025-04-14 11:38:42 +01:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
local fidget_group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", { clear = true })
|
2025-04-15 20:48:35 +01:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd({ "User" }, {
|
|
|
|
|
pattern = "CodeCompanionRequestStarted",
|
|
|
|
|
group = fidget_group,
|
|
|
|
|
callback = function(event)
|
|
|
|
|
local FidgetHelper = require("utils.fidget_helper")
|
|
|
|
|
-- Pass event instead of request if the callback receives the full event object
|
|
|
|
|
local handle = FidgetHelper:create_progress_handle(event)
|
|
|
|
|
FidgetHelper:store_progress_handle(event.data.id, handle)
|
|
|
|
|
end,
|
2026-05-04 13:43:39 +01:00
|
|
|
})
|
2025-04-15 20:48:35 +01:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd({ "User" }, {
|
|
|
|
|
pattern = "CodeCompanionRequestFinished",
|
|
|
|
|
group = fidget_group,
|
|
|
|
|
callback = function(event)
|
|
|
|
|
local FidgetHelper = require("utils.fidget_helper")
|
|
|
|
|
local handle = FidgetHelper:pop_progress_handle(event.data.id)
|
|
|
|
|
if handle then
|
|
|
|
|
FidgetHelper:report_exit_status(handle, event)
|
|
|
|
|
handle:finish()
|
|
|
|
|
end
|
|
|
|
|
end,
|
2026-05-04 13:43:39 +01:00
|
|
|
})
|
2025-04-22 16:55:58 +01:00
|
|
|
|
2026-05-04 13:43:39 +01:00
|
|
|
-- vim.api.nvim_create_autocmd('BufEnter', {
|
|
|
|
|
-- callback = function(event)
|
|
|
|
|
-- local windows = vim.api.nvim_list_wins()
|
|
|
|
|
--
|
|
|
|
|
-- for _, window in ipairs(windows) do
|
|
|
|
|
-- local bufnr = vim.api.nvim_win_get_buf(window)
|
|
|
|
|
-- local ft = vim.api.nvim_get_option_value('filetype', { buf = bufnr })
|
|
|
|
|
-- if vim.api.nvim_get_option_value('buflisted', { buf = bufnr })
|
|
|
|
|
-- or ft == 'oil'
|
|
|
|
|
-- or ft == 'snacks_dashboard' then
|
|
|
|
|
-- return
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
-- vim.cmd 'qa'
|
|
|
|
|
-- end,
|
|
|
|
|
-- })
|
2025-04-15 21:02:09 +01:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd({ "BufWritePre" }, {
|
|
|
|
|
pattern = { "*.lua" },
|
|
|
|
|
callback = function(args)
|
|
|
|
|
require("helpers").format_buffer("stylua", args.buf)
|
|
|
|
|
end,
|
2026-07-03 13:48:02 +01:00
|
|
|
})
|
|
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
local modes_group = vim.api.nvim_create_augroup("modes", { clear = true })
|
|
|
|
|
vim.api.nvim_create_autocmd("FocusLost", {
|
|
|
|
|
group = modes_group,
|
|
|
|
|
pattern = "*",
|
|
|
|
|
command = 'call feedkeys("\\<Esc>")',
|
2026-05-04 13:43:39 +01:00
|
|
|
})
|
2025-04-15 21:02:09 +01:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd("BufNewFile", {
|
|
|
|
|
group = modes_group,
|
|
|
|
|
pattern = "*",
|
|
|
|
|
command = 'call feedkeys("i")',
|
2026-05-04 13:43:39 +01:00
|
|
|
})
|
2025-04-15 20:48:35 +01:00
|
|
|
|
2026-05-04 13:43:39 +01:00
|
|
|
-- Reload LuaSnip snippets when saving files in the snippets directory
|
2026-07-21 21:09:03 +01:00
|
|
|
local snippets_dir = vim.fn.stdpath("config") .. "/lua/snippets"
|
|
|
|
|
vim.api.nvim_create_autocmd("BufWritePost", {
|
|
|
|
|
pattern = snippets_dir .. "/*.json", -- Adjust the path to match your snippets directory
|
|
|
|
|
desc = "Reload LuaSnip snippets on save",
|
|
|
|
|
callback = function()
|
|
|
|
|
require("luasnip.loaders.from_vscode").lazy_load({ paths = { snippets_dir } })
|
|
|
|
|
vim.notify("Snippets reloaded!", vim.log.levels.INFO)
|
|
|
|
|
end,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
-- Run shortcuts script when saving shortcut files
|
|
|
|
|
vim.api.nvim_create_autocmd("BufWritePost", {
|
|
|
|
|
pattern = {
|
|
|
|
|
os.getenv("XDG_CONFIG_HOME") .. "/shell/bm-files",
|
|
|
|
|
os.getenv("XDG_CONFIG_HOME") .. "/shell/bm-dirs",
|
|
|
|
|
},
|
|
|
|
|
desc = "Run shortcuts script",
|
|
|
|
|
callback = function()
|
|
|
|
|
os.execute("station-shortcuts")
|
|
|
|
|
vim.notify("Shortcuts updated!", vim.log.levels.INFO)
|
|
|
|
|
end,
|
2026-05-04 13:43:39 +01:00
|
|
|
})
|
2025-04-24 11:59:36 +01:00
|
|
|
|
2026-05-04 13:43:39 +01:00
|
|
|
local configs = {
|
2026-07-21 21:09:03 +01:00
|
|
|
{
|
|
|
|
|
path = os.getenv("HOME") .. "/.config/nixos",
|
|
|
|
|
worktree = nil,
|
|
|
|
|
git_dir = nil,
|
|
|
|
|
track_untracked = false,
|
|
|
|
|
force_add = false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path = os.getenv("HOME") .. "/.config/nvim",
|
|
|
|
|
worktree = nil,
|
|
|
|
|
git_dir = nil,
|
|
|
|
|
track_untracked = false,
|
|
|
|
|
force_add = false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path = os.getenv("HOME"),
|
|
|
|
|
worktree = os.getenv("HOME"),
|
|
|
|
|
git_dir = os.getenv("HOME") .. "/.config/dotfiles/.git",
|
|
|
|
|
track_untracked = true,
|
|
|
|
|
force_add = true, -- Handles ignored files in dotfiles
|
|
|
|
|
include_dirs = { ".config", ".local/bin", ".local/share" },
|
|
|
|
|
},
|
2026-05-04 13:43:39 +01:00
|
|
|
}
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-05-04 13:43:39 +01:00
|
|
|
local function get_git_status(config)
|
2026-07-21 21:09:03 +01:00
|
|
|
local base = "git"
|
|
|
|
|
if config.git_dir and config.worktree then
|
|
|
|
|
base = string.format("git --git-dir=%s --worktree=%s", config.git_dir, config.worktree)
|
|
|
|
|
end
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
-- Check modified and untracked (including ignored if force_add is true)
|
|
|
|
|
local cmd = base .. " status --porcelain"
|
|
|
|
|
if config.force_add then
|
|
|
|
|
cmd = cmd .. " --ignored"
|
|
|
|
|
end
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
local handle = io.popen(cmd)
|
|
|
|
|
local result = handle:read("*a")
|
|
|
|
|
handle:close()
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
local has_changes = false
|
|
|
|
|
for line in result:gmatch("[^\r\n]+") do
|
|
|
|
|
local status = line:sub(1, 2)
|
|
|
|
|
local file = line:sub(4)
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
if status:match("[MAR]") then
|
|
|
|
|
has_changes = true
|
|
|
|
|
elseif (status == "??" or status == "!!") and config.track_untracked then
|
|
|
|
|
if config.include_dirs then
|
|
|
|
|
for _, dir in ipairs(config.include_dirs) do
|
|
|
|
|
if file:sub(1, #dir) == dir then
|
|
|
|
|
has_changes = true
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
has_changes = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return has_changes, base
|
2026-05-04 13:43:39 +01:00
|
|
|
end
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
vim.api.nvim_create_autocmd("VimLeavePre", {
|
|
|
|
|
callback = function()
|
|
|
|
|
local cwd = vim.fn.getcwd()
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
for _, config in ipairs(configs) do
|
|
|
|
|
if cwd:sub(1, #config.path) == config.path then
|
|
|
|
|
local has_changes, git_base = get_git_status(config)
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
if has_changes then
|
|
|
|
|
local confirm = vim.fn.confirm("Uncommitted changes in managed path. Commit?", "&Yes\n&No", 2)
|
|
|
|
|
if confirm == 1 then
|
|
|
|
|
local msg = vim.fn.input("Commit message: ", "chore: update files")
|
|
|
|
|
if msg ~= "" then
|
|
|
|
|
msg = "Update files"
|
|
|
|
|
end
|
|
|
|
|
local add_cmd = " add -A"
|
|
|
|
|
os.execute(git_base .. add_cmd)
|
|
|
|
|
os.execute(git_base .. " commit -m " .. vim.fn.shellescape(msg))
|
|
|
|
|
os.execute(git_base .. " push")
|
|
|
|
|
print("\nChanges committed.")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end,
|
2026-05-04 13:43:39 +01:00
|
|
|
})
|
2026-03-06 17:02:36 +00:00
|
|
|
|
2026-07-21 21:09:03 +01:00
|
|
|
require("helpers").edit_cf("a", "/lua/autocmd.lua")
|
2026-07-03 13:48:02 +01:00
|
|
|
|