Vimscript to lua for an augroup/autocommand

The augroup below runs some direct code in nvim. How can I write this in lua?

augroup exe_code
      autocmd!

      " execute ruby code 
      autocmd FileType lua nnoremap <buffer> <leader>r
                  \ :sp<CR> :term lua %<CR> :startinsert<CR>
      " execute javascript code 
      autocmd FileType javascript nnoremap <buffer> <leader>r
                  \ :sp<CR> :term node %<CR> :startinsert<CR>
      " execute python code 
      autocmd FileType python nnoremap <buffer> <leader>r
                  \ :sp<CR> :term python3 %<CR> :startinsert<CR>
       " execute rust code 
      autocmd FileType rust nnoremap <buffer> <leader>r
                  \ :sp<CR> :term cargo run %<CR> :startinsert<CR>
      " execute shell code 
      autocmd FileType bash,sh nnoremap <buffer> <leader>r
                  \ :sp<CR> :term bash %<CR> :startinsert<CR>
      " execute c,c++ code 
      autocmd FileType c,c++ nnoremap <buffer> <leader>r
                  \ :sp<CR> :term gcc % -o %< && ./%< <CR> :startinsert<CR>
      " remove c,c++ bin 
      autocmd FileType c,c++ nnoremap <buffer> <leader>db
                  \ :sp<CR> :term rm -rf ./%< <CR> :startinsert<CR>
      " execute sql (for postgres) code 
      autocmd FileType sql nnoremap <buffer> <leader>r
                  \ :sp<CR> :term psql -d $(echo $DATABASE_URL) -f %<CR> :startinsert<CR>
augroup END

Something like this:

local group_id = vim.api.nvim_create_augroup("exe_code", {})
vim.api.nvim_create_autocmd(
  {"FileType"},
  {
    pattern = {"lua"},
    group = group_id,
    callback = function()
      vim.keymap.set(
        {"n"},
        "<leader>r",
        ":sp<CR> :term lua %<CR> :startinsert<CR>",
        { buffer = true }
      )
    end
  }
)

Thanks. it works. It’s just more verbose.