vim.keymap.set("i", "jj", "<Esc>", {})
vim.keymap.set({ "n", "v" }, "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
vim.keymap.set({ "n", "v" }, "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
vim.keymap.set("n", "<S-k>", "<Nop>", {})
vim.keymap.set("t", "jj", "<C-\\><C-n>", { noremap = true, silent = true })
vim.keymap.set("n", "<Backspace>", ":q<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<C-Backspace>", ":q!<cr>", { noremap = true, silent = true })
vim.keymap.set("n", ",;", ":", { noremap = true, silent = true })
vim.keymap.set("n", "<C-U>", "<C-O>", { noremap = true, silent = true })
vim.keymap.set("n", "<S-C-U>", "g;", { noremap = true, silent = true })
vim.keymap.set("n", "<S-C-I>", "g,", { noremap = true, silent = true })
vim.keymap.set("n", "<C-E>", "<C-U>zz", { noremap = true, silent = true })
vim.keymap.set("n", "<C-D>", "<C-D>zz", { noremap = true, silent = true })
vim.keymap.set("n", "<C-I>", "<C-I>", { noremap = true, silent = true })
vim.keymap.set("n", "n", "nzz", { noremap = true })
vim.keymap.set("n", "N", "Nzz", { noremap = true })
vim.keymap.set("x", "<leader>p", [["_dP]], { noremap = true })
vim.keymap.set({ "n", "v" }, "<leader>y", [["+y]])
vim.keymap.set({ "n", "v" }, "<leader>Y", [["+Y]])
vim.keymap.set("n", "<Tab>", "<Nop>", { noremap = true })
vim.keymap.set("n", "<leader><space>", ":noh<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "gn", ":n<cr>", { noremap = true, silent = true })
-- vim.keymap.set("n", "gi", ":ClangdSwitchSourceHeader<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "-", function() require("oil").open() end, { desc = "Open parent directory" })
vim.keymap.set("n", "<leader>-", function() require("oil").open() end, { desc = "Open parent directory" })
vim.keymap.set("n", "<leader>g", function() require("neogit").open({ kind = "replace" }) end,
    { noremap = true, silent = true })
vim.keymap.set("x", "<leader>a", "<C-A>", { noremap = true, silent = true })
vim.keymap.set("x", "<leader>x", "<C-X>", { noremap = true, silent = true })
vim.keymap.set("x", "<leader>ga", "g<C-A>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>s", ":sp<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<leader>v", ":vs<cr>", { noremap = true, silent = true })
vim.keymap.set("n", "<cr>", "<cr>", { noremap = true, silent = true })
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")

-- Backup in case hyprnav doesn't work
vim.keymap.set("n", "<C-h>", ":wincmd h<CR>", { noremap = true, silent = true })
vim.keymap.set("n", "<C-j>", ":wincmd j<CR>", { noremap = true, silent = true })
vim.keymap.set("n", "<C-k>", ":wincmd k<CR>", { noremap = true, silent = true })
vim.keymap.set("n", "<C-l>", ":wincmd l<CR>", { noremap = true, silent = true })
