From 603e7a2b7abc1e34158e26bfa48da30ae2f9e1a1 Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 21 Jul 2026 21:09:03 +0100 Subject: [PATCH] Add autocommand to update shortcuts files --- lua/autocmd.lua | 317 +++++++++++++++++++++++++----------------------- 1 file changed, 165 insertions(+), 152 deletions(-) diff --git a/lua/autocmd.lua b/lua/autocmd.lua index 92bdbe0..fb0281e 100644 --- a/lua/autocmd.lua +++ b/lua/autocmd.lua @@ -4,36 +4,36 @@ -- Highlight when yanking (copying) text -- Try it with `yap` in normal mode -- See `:help vim.highlight.on_yank()` -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, +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, }) -local autosave_group = vim.api.nvim_create_augroup('autosaving', { clear = true }) +local autosave_group = vim.api.nvim_create_augroup("autosaving", { clear = true }) -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 +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 }) -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 +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 }) -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, +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, }) -- vim.api.nvim_create_autocmd('TextChanged', { @@ -42,39 +42,39 @@ vim.api.nvim_create_autocmd('SwapExists', { -- command = 'silent! wa', -- Save all files when text is changed -- }) -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, +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, }) -local fidget_group = vim.api.nvim_create_augroup('CodeCompanionFidgetHooks', { clear = true }) +local fidget_group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", { clear = true }) -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, +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, }) -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, +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, }) -- vim.api.nvim_create_autocmd('BufEnter', { @@ -94,128 +94,141 @@ vim.api.nvim_create_autocmd({ 'User' }, { -- end, -- }) -vim.api.nvim_create_autocmd({ 'BufWritePre' }, { - pattern = { '*.lua' }, - callback = function(args) - require('helpers').format_buffer('stylua', args.buf) - end, +vim.api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = { "*.lua" }, + callback = function(args) + require("helpers").format_buffer("stylua", args.buf) + end, }) -local modes_group = vim.api.nvim_create_augroup('modes', { clear = true }) -vim.api.nvim_create_autocmd('FocusLost', { - group = modes_group, - pattern = '*', - command = 'call feedkeys("\\")', +local modes_group = vim.api.nvim_create_augroup("modes", { clear = true }) +vim.api.nvim_create_autocmd("FocusLost", { + group = modes_group, + pattern = "*", + command = 'call feedkeys("\\")', }) -vim.api.nvim_create_autocmd('BufNewFile', { - group = modes_group, - pattern = '*', - command = 'call feedkeys("i")', +vim.api.nvim_create_autocmd("BufNewFile", { + group = modes_group, + pattern = "*", + command = 'call feedkeys("i")', }) -- Reload LuaSnip snippets when saving files in the snippets directory -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, +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, }) local configs = { - { - 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' }, - }, + { + 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" }, + }, } local function get_git_status(config) - 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 + 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 - -- 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 + -- 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 - local handle = io.popen(cmd) - local result = handle:read '*a' - handle:close() + local handle = io.popen(cmd) + local result = handle:read("*a") + handle:close() - local has_changes = false - for line in result:gmatch '[^\r\n]+' do - local status = line:sub(1, 2) - local file = line:sub(4) + local has_changes = false + for line in result:gmatch("[^\r\n]+") do + local status = line:sub(1, 2) + local file = line:sub(4) - 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 + 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 end -vim.api.nvim_create_autocmd('VimLeavePre', { - callback = function() - local cwd = vim.fn.getcwd() +vim.api.nvim_create_autocmd("VimLeavePre", { + callback = function() + local cwd = vim.fn.getcwd() - for _, config in ipairs(configs) do - if cwd:sub(1, #config.path) == config.path then - local has_changes, git_base = get_git_status(config) + for _, config in ipairs(configs) do + if cwd:sub(1, #config.path) == config.path then + local has_changes, git_base = get_git_status(config) - 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, + 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, }) -require('helpers').edit_cf('a', '/lua/autocmd.lua') +require("helpers").edit_cf("a", "/lua/autocmd.lua")