diff --git a/home/editors/neovim/dap/mappings.lua b/home/editors/neovim/dap/mappings.lua
index d10e37f..9502506 100644
--- a/home/editors/neovim/dap/mappings.lua
+++ b/home/editors/neovim/dap/mappings.lua
@@ -1,11 +1,9 @@
-local map = vim.api.nvim_set_keymap
-
-map("n", "<leader>dc", "<cmd>lua require'dap'.continue()<CR>", { noremap = true })
-map("n", "<leader>db", "<cmd>lua require'dap'.toggle_breakpoint()<CR>", { noremap = true })
-map("n", "<leader>do", "<cmd>lua require'dap'.step_over()<CR>", { noremap = true })
-map("n", "<leader>di", "<cmd>lua require'dap'.step_into()<CR>", { noremap = true })
-map("n", "<leader>dO", "<cmd>lua require'dap'.step_out()<CR>", { noremap = true })
-map("n", "<leader>dh", "<cmd>lua require'dap'.goto()<CR>", { noremap = true })
-map("n", "<leader>dk", "<cmd>lua require'dap.ui.variables'.hover()<CR>", { noremap = true })
-map("n", "<leader>dr", "<cmd>lua require'dap'.repl.open()<CR>", { noremap = true })
-map("n", "<leader>dl", "<cmd>lua require'dap'.repl.run_last()<CR>", { noremap = true })
+vim.keymap.set("n", "<leader>dc", require"dap".continue)
+vim.keymap.set("n", "<leader>db", require"dap".toggle_breakpoint)
+vim.keymap.set("n", "<leader>do", require"dap".step_over)
+vim.keymap.set("n", "<leader>di", require"dap".step_into)
+vim.keymap.set("n", "<leader>dO", require"dap".step_out)
+vim.keymap.set("n", "<leader>dh", require"dap".goto_)
+vim.keymap.set("n", "<leader>dk", require"dap.ui.variables".hover)
+vim.keymap.set("n", "<leader>dr", require"dap".repl.open)
+vim.keymap.set("n", "<leader>dl", require"dap".repl.run_last)
diff --git a/home/editors/neovim/gitsigns.lua b/home/editors/neovim/gitsigns.lua
index 2b9ad65..8b05d4f 100644
--- a/home/editors/neovim/gitsigns.lua
+++ b/home/editors/neovim/gitsigns.lua
@@ -1,11 +1,9 @@
--- TODO vim.keymap.set not yet supported on stable neovim
--- see gitsigns repo for sample when migrating to vim.keymap.set
-
 require("gitsigns").setup {
   on_attach = function(bufnr)
-    local function map(mode, lhs, rhs, opts)
-        opts = vim.tbl_extend('force', {noremap = true, silent = true}, opts or {})
-        vim.api.nvim_buf_set_keymap(bufnr, mode, lhs, rhs, opts)
+    local function map(mode, l, r, opts)
+      opts = opts or {}
+      opts.buffer = bufnr
+      vim.keymap.set(mode, l, r, opts)
     end
 
     -- Navigation
diff --git a/home/editors/neovim/init.lua b/home/editors/neovim/init.lua
index 3509f3d..52a9ff2 100644
--- a/home/editors/neovim/init.lua
+++ b/home/editors/neovim/init.lua
@@ -35,13 +35,11 @@ vim.g.closetag_regions = {
   ["javascript.jsx"] = "jsxRegion",
 }
 
-local map = vim.api.nvim_set_keymap
-
-map("n", ";", ":lua require('telescope.builtin').find_files()<CR>", { noremap = true })
-map("n", ",", ":lua require('telescope.builtin').live_grep()<CR>", { noremap = true })
+vim.keymap.set("n", ";", require("telescope.builtin").find_files)
+vim.keymap.set("n", ",", require("telescope.builtin").live_grep)
 
 require("nvim-tree").setup {}
-map("n", "<C-p>", ":lua require('nvim-tree').toggle()<CR>", { noremap = true })
+vim.keymap.set("n", "<C-p>", require("nvim-tree").toggle)
 
 vim.g.netrw_banner = 0
 vim.g.netrw_liststyle = 3
diff --git a/home/editors/neovim/lsp/lsp.lua b/home/editors/neovim/lsp/lsp.lua
index d1c90e3..989e2c8 100644
--- a/home/editors/neovim/lsp/lsp.lua
+++ b/home/editors/neovim/lsp/lsp.lua
@@ -6,7 +6,7 @@ vim.cmd [[autocmd CursorHold,CursorHoldI * lua require'nvim-lightbulb'.update_li
 local on_attach = function(_, bufnr)
   -- codelens
   vim.api.nvim_command [[autocmd CursorHold,CursorHoldI,InsertLeave <buffer> lua vim.lsp.codelens.refresh()]]
-  vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>l", "<Cmd>lua vim.lsp.codelens.run()<CR>", {silent = true;})
+  vim.keymap.set("n", "<leader>l", vim.lsp.codelens.run, { silent = true, buffer = bufnr })
 end
 
 -- format on save
diff --git a/home/editors/neovim/lsp/mappings.lua b/home/editors/neovim/lsp/mappings.lua
index 12436db..0ceed0e 100644
--- a/home/editors/neovim/lsp/mappings.lua
+++ b/home/editors/neovim/lsp/mappings.lua
@@ -1,20 +1,15 @@
-local map = vim.api.nvim_set_keymap
-
--- maps
-map("n", "gd",         "<cmd>lua vim.lsp.buf.definition()<CR>", { noremap = true, silent = true })
-map("n", "gp",         "<cmd>lua peek_definition()<CR>", { noremap = true, silent = true })
-map("n", "gy",         "<cmd>lua vim.lsp.buf.type_definition()<CR>", { noremap = true, silent = true })
-map("n", "gi",         "<cmd>lua vim.lsp.buf.implementation()<CR>", { noremap = true, silent = true })
-map("n", "gr",         "<cmd>lua vim.lsp.buf.references()<CR>", { noremap = true, silent = true })
-map("n", "gD",         "<cmd>lua vim.lsp.buf.declaration()<CR>", { noremap = true, silent = true })
-map("n", "K",          "<cmd>lua vim.lsp.buf.hover()<CR>", { noremap = true, silent = true })
-map("n", "<c-k>",      "<cmd>lua vim.lsp.buf.signature_help()<CR>", { noremap = true, silent = true })
-map("n", "<leader>sd", "<cmd>lua vim.lsp.buf.document_symbol()<CR>", { noremap = true, silent = true })
-map("n", "<leader>sw", "<cmd>lua vim.lsp.buf.workspace_symbol()<CR>", { noremap = true, silent = true })
-map("n", "<leader>f",  "<cmd>lua vim.lsp.buf.formatting_seq_sync(nil, nil, { 'tsserver', 'diagnosticls' })<CR>", { noremap = true, silent = true })
-map("n", "<leader>a",  "<cmd>lua vim.lsp.buf.code_action()<CR>", { noremap = true, silent = true })
-map("n", "<leader>r",  "<cmd>lua vim.lsp.buf.rename()<CR>", { noremap = true, silent = true })
-map("n", "<leader>i",  "<cmd>lua vim.diagnostic.open_float()<CR>", { noremap = true, silent = true })
-map("n", "<leader>q",  "<cmd>lua vim.diagnostic.setloclist()<CR>", { noremap = true, silent = true })
-map("n", "[d",         "<cmd>lua vim.diagnostic.goto_prev()<CR>", { noremap = true, silent = true })
-map("n", "]d",         "<cmd>lua vim.diagnostic.goto_next()<CR>", { noremap = true, silent = true })
+vim.keymap.set("n", "gd",         vim.lsp.buf.definition, { silent = true })
+vim.keymap.set("n", "gp",         peek_definition, { silent = true })
+vim.keymap.set("n", "gy",         vim.lsp.buf.type_definition, { silent = true })
+vim.keymap.set("n", "gi",         vim.lsp.buf.implementation, { silent = true })
+vim.keymap.set("n", "gr",         vim.lsp.buf.references, { silent = true })
+vim.keymap.set("n", "gD",         vim.lsp.buf.declaration, { silent = true })
+vim.keymap.set("n", "K",          vim.lsp.buf.hover, { silent = true })
+vim.keymap.set("n", "<c-k>",      vim.lsp.buf.signature_help, { silent = true })
+vim.keymap.set("n", "<leader>sd", vim.lsp.buf.document_symbol, { silent = true })
+vim.keymap.set("n", "<leader>sw", vim.lsp.buf.workspace_symbol, { silent = true })
+vim.keymap.set("n", "<leader>f",  function()
+  vim.lsp.buf.formatting_seq_sync(nil, nil, { "tsserver", "diagnosticls" })
+end, { silent = true })
+vim.keymap.set("n", "<leader>a",  vim.lsp.buf.code_action, { silent = true })
+vim.keymap.set("n", "<leader>r",  vim.lsp.buf.rename, { silent = true })