local M = {}
M.group = vim.api.nvim_create_augroup("nvim_vimrc", { clear = true })

---@param event string|string[]
---@return function
function M.autocmd(event)
  ---@param opts table
  return function(opts)
    vim.api.nvim_create_autocmd(
      event,
      vim.tbl_deep_extend("force", { group = M.group, pattern = "*" }, opts)
    )
  end
end

M.autocmd "TermOpen" {
  callback = function()
    -- NOTE: check lazily to handle opening in background
    vim.fn.timer_start(0, function()
      if vim.bo.buftype == "terminal" then
        vim.cmd.startinsert {}
        vim.wo.number = false
        vim.wo.relativenumber = false
        vim.wo.signcolumn = "no"
        vim.wo.cursorline = false
      end
    end)
  end,
}

M.autocmd "TextYankPost" {
  callback = function()
    vim.highlight.on_yank { timeout = 100, on_macro = true }
  end,
}

M.autocmd "InsertLeave" {
  command = "mode",
}

return setmetatable(M, {
  __call = function(_, event) return M.autocmd(event) end,
})