feat: Autocommands
This commit is contained in:
parent
23f7e8a3a6
commit
3e1c814afe
2 changed files with 164 additions and 0 deletions
14
lib/autocmds/default.nix
Normal file
14
lib/autocmds/default.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
_: {
|
||||
autocmds = rec {
|
||||
## [String] | String -> String -> [String] | String -> String -> String -> AttrSet
|
||||
mk = event: group': pattern: callback: desc: let
|
||||
group = "marleyos_${group'}";
|
||||
in {
|
||||
inherit event group pattern callback desc;
|
||||
};
|
||||
|
||||
## [String] | String -> String -> String -> String -> AttrSet
|
||||
mk' = event: group: callback: desc:
|
||||
mk event group null callback desc;
|
||||
};
|
||||
}
|
150
modules/nixvim/autocommands/default.nix
Normal file
150
modules/nixvim/autocommands/default.nix
Normal file
|
@ -0,0 +1,150 @@
|
|||
{
|
||||
lib,
|
||||
helpers,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.marleyos) mapListToAttrs autocmds;
|
||||
inherit (helpers) mkRaw;
|
||||
in {
|
||||
autoGroups =
|
||||
mapListToAttrs (i: {
|
||||
name = "marleyos_${i}";
|
||||
value = {clear = true;};
|
||||
}) [
|
||||
"checktime"
|
||||
"highlight_yank"
|
||||
"resize_splits"
|
||||
"last_loc"
|
||||
"close_with_q"
|
||||
"man_unlisted"
|
||||
"wrap_spell"
|
||||
"json_conceal"
|
||||
"auto_create_dir"
|
||||
];
|
||||
|
||||
autoCmd = [
|
||||
(autocmds.mk' ["FocusGained" "TermClose" "TermLeave"] "checktime" (mkRaw
|
||||
# lua
|
||||
''
|
||||
function()
|
||||
if vim.o.buftype ~= "nofile" then
|
||||
vim.cmd("checktime")
|
||||
end
|
||||
end
|
||||
'') "Check if file needs to be reloaded when changed")
|
||||
|
||||
(autocmds.mk' ["TextYankPost"] "highlight_yank" (mkRaw
|
||||
# lua
|
||||
''
|
||||
function()
|
||||
(vim.hl or vim.highlight).on_yank()
|
||||
end
|
||||
'') "Highlight on yank")
|
||||
|
||||
(autocmds.mk' ["VimResized"] "resize_splits" (mkRaw
|
||||
# lua
|
||||
''
|
||||
function()
|
||||
local current_tab = vim.fn.tabpagenr()
|
||||
vim.cmd("tabdo wincmd =")
|
||||
vim.cmd("tabnext " .. current_tab)
|
||||
end
|
||||
'') "Resize splits on window resize")
|
||||
|
||||
(autocmds.mk' ["BufReadPost"] "last_loc" (mkRaw
|
||||
# lua
|
||||
''
|
||||
function(event)
|
||||
local exclude = { "gitcommit" }
|
||||
local buf = event.buf
|
||||
if vim.tbl_contains(exclude, vim.bo[buf].filetype) or vim.b[buf].marleyvim_last_loc then
|
||||
return
|
||||
end
|
||||
vim.b[buf].marleyvim_last_loc = true
|
||||
local mark = vim.api.nvim_buf_get_mark(buf, '"')
|
||||
local lcount = vim.api.nvim_buf_line_count(buf)
|
||||
if mark[1] > 0 and mark[1] <= lcount then
|
||||
pcall(vim.api.nvim_win_set_cursor, 0, mark)
|
||||
end
|
||||
end
|
||||
'') "Go to last location when opening a buffer")
|
||||
|
||||
(autocmds.mk ["FileType"] "close_with_q" [
|
||||
"PlenaryTestPopup"
|
||||
"checkhealth"
|
||||
"dbout"
|
||||
"gitsigns-blame"
|
||||
"grug-far"
|
||||
"help"
|
||||
"lspinfo"
|
||||
"neotest-output"
|
||||
"neotest-output-panel"
|
||||
"neotest-summary"
|
||||
"notify"
|
||||
"qf"
|
||||
"snacks_win"
|
||||
"spectre_panel"
|
||||
"startuptime"
|
||||
"tsplayground"
|
||||
] (mkRaw
|
||||
# lua
|
||||
''
|
||||
function(event)
|
||||
vim.bo[event.buf].buflisted = false
|
||||
vim.schedule(function()
|
||||
vim.keymap.set("n", "q", function()
|
||||
vim.cmd("close")
|
||||
pcall(vim.api.nvim_buf_delete, event.buf, { force = true })
|
||||
end, {
|
||||
buffer = event.buf,
|
||||
silent = true,
|
||||
desc = "Quit buffer",
|
||||
})
|
||||
end)
|
||||
end
|
||||
'') "Close some filetypes with <q>")
|
||||
|
||||
(autocmds.mk ["FileType"] "man_unlisted" ["man"] (mkRaw
|
||||
# lua
|
||||
''
|
||||
function(event)
|
||||
vim.bo[event.buf].buflisted = false
|
||||
end
|
||||
'') "Easy-close man files")
|
||||
|
||||
(autocmds.mk ["FileType"] "wrap_spell" [
|
||||
"text"
|
||||
"plaintex"
|
||||
"typst"
|
||||
"gitcommit"
|
||||
"markdown"
|
||||
] (mkRaw
|
||||
# lua
|
||||
''
|
||||
function()
|
||||
vim.opt_local.wrap = true
|
||||
vim.opt_local.spell = true
|
||||
end
|
||||
'') "Wrap & check spelling in text files")
|
||||
|
||||
(autocmds.mk ["FileType"] "json_conceal" ["json" "jsonc" "json5"] (mkRaw
|
||||
# lua
|
||||
''
|
||||
function()
|
||||
vim.opt_local.conceallevel = 0
|
||||
end
|
||||
'') "Fix conceallevel for json files")
|
||||
|
||||
(autocmds.mk' ["BufWritePre"] "auto_create_dir" (mkRaw
|
||||
# lua
|
||||
''
|
||||
function(event)
|
||||
if event.match:match("^%w%w+:[\\/][\\/]") then
|
||||
return
|
||||
end
|
||||
local file = vim.uv.fs_realpath(event.match) or event.match
|
||||
vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
|
||||
end
|
||||
'') "Auto create missing parent dirs when saving")
|
||||
];
|
||||
}
|
Loading…
Reference in a new issue