local set = vim.keymap.set
vim.g.mapleader = " "

set("i", "jk", "<ESC>")
set("i", "kj", "<ESC>")

set({"n", "x"}, "j", [[v:count == 0 ? "gj" : "j"]], { expr = true })
set({"n", "x"}, "k", [[v:count == 0 ? "gk" : "k"]], { expr = true })

set({"n", "x"}, ";", ":")
set({"n", "x"}, ":", ";")

set({"n", "x"}, "gy", "\"+y")
set("n", "gp", "\"+p")

set("n", "n", "nzz")
set("n", "N", "Nzz")

set("n", "<c-u>", "<c-u>zz")
set("n", "<c-d>", "<c-d>zz")

set("n", "<leader>w", "<c-w>")

set("n", "<cr>", function()
  if vim.v.hlsearch == 1 then
    vim.cmd.nohlsearch()
    return ""
  else
    return "<cr>"
  end
end, { expr = true })

vim.api.nvim_create_autocmd("Filetype", {
  pattern = "lua",
  group = vim.api.nvim_create_augroup("RunLua", { clear = true }),
  callback = function()
    vim.keymap.set("n", "<leader>x", "<cmd>. lua<cr>", { buffer = true })
    vim.keymap.set("n", "<leader><leader>x", "<cmd>% lua<cr>", { buffer = true })
  end,
})