local aucmd_dict = {
    FileType = {
        {
	        -- Set tabstop to 2 for Dart, Vue, JavaScript, TypeScript, and JSON files
            pattern = "dart,vue,javascript,typescript,json,markdown",
            callback = function()
                vim.opt_local.tabstop = 2
                vim.opt_local.softtabstop = 2
                vim.opt_local.shiftwidth = 2
            end,
        },
        {
            pattern = 'dart',
            callback = function ()
                vim.bo.commentstring = '// %s'
            end
        },
    },

    BufWritePre = {
        {
            -- Remove trailing whitespace on save
            command = [[%s/\s\+$//e]],
        },
    },

    BufRead = {
        {
            -- Return cursor to where it was previously when re-opening a file
            callback = function()
                if vim.fn.expand('%:p') ~= '.git/COMMIT_EDITMSG' and vim.fn.line("'\"") > 1 and vim.fn.line("'\"") <= vim.fn.line("$") then
                    vim.cmd("normal! g`\"")
                end
            end
        },

        {
            -- Set syntax for Dockerfiles
            pattern = { '*.docker' },
            callback = function()
                vim.opt_local.syntax = 'dockerfile'
            end
        },

        {
            pattern = { '*.blade.php' },
            command = [[set syntax=html]],
        },
    },

    BufNewFile = {
        {
            -- Set syntax for Dockerfiles
            pattern = { '*.docker' },
            callback = function()
                vim.opt_local.syntax = 'dockerfile'
            end
        },
    },
}

for event, opt_tbls in pairs(aucmd_dict) do
    for _, opt_tbl in pairs(opt_tbls) do
        vim.api.nvim_create_autocmd(event, opt_tbl)
    end
end