local Util = require("lazyvim.util") local function map(mode, lhs, rhs, opts) local keys = require("lazy.core.handler").handlers.keys ---@cast keys LazyKeysHandler -- do not create the map if a lazy keys handler exists if not keys.active[keys.parse({ lhs, mode = mode }).id] then opts = opts or {} opts.silent = opts.silent ~= false vim.keymap.set(mode, lhs, rhs, opts) end end local opts = { noremap = true, silent = true } local term_opts = { silent = true } -- crimes against humanity, but I don't care map("n", "j", "h", opts) map("n", "l", "k", opts) map("n", "k", "j", opts) map("n", ";", "l", opts) map("v", "j", "h", opts) map("v", "k", "j", opts) map("v", "l", "k", opts) map("v", ";", "l", opts) -- debug map("n", "db", ':lua require("dap").toggle_breakpoint()', { desc = "Toggle breakpoint" }) map("n", "do", ':lua require("dap").step_over()', { desc = "Step over" }) map("n", "di", ':lua require("dap").step_into()', { desc = "Step into" }) map("n", "dc", ':lua require("dap").continue()', { desc = "Continue" }) map("n", "du", function() require("dapui").toggle() end, { desc = "Toggle DAP UI" }) map("n", "de", function() require("dapui").eval() end, { desc = "DAP Eval" }) -- window movement map("n", "", [[wincmd h]], opts) map("n", "", [[wincmd l]], opts) map("n", "", [[wincmd j]], opts) map("i", "", [[wincmd h]], opts) map("i", "", [[wincmd l]], opts) map("i", "", [[wincmd j]], opts) -- toggle terminal local lazyterm = function() Util.terminal(nil, { cwd = Util.root(), esc_esc = false, ctrl_hjkl = false }) end map("n", "", lazyterm, { desc = "Terminal (root dir)" }) map("t", "", "close", { desc = "Hide Terminal" }) -- semicolon thing -- map("i","" ,"A;", {desc = "add semi and newline"}) -- map("i","" ,"A;", {desc = "add semi"}) map("n", "m", "$a;", { desc = "add semi and newline" }) map("n", "n", "$a;", { desc = "add semi" }) -- tab switching map("n", "", ":BufferLineCyclePrev", opts) map("n", "", ":BufferLineCycleNext", opts) -- git map("n", "gq", function() require("telescope.builtin").git_commits() end, { desc = "Commits" }) map("n", "gw", function() require("telescope.builtin").git_bcommits() end, { desc = "Commits in branch" }) map("n", "gb", function() require("telescope.builtin").git_branches() end, { desc = "Branches" }) map("n", "gr", function() require("telescope.builtin").git_status() end, { desc = "Git status" }) map("n", "ga", function() require("telescope.builtin").git_stash() end, { desc = "Git stash" }) map("n", "gg", function() Util.terminal({ "gitui" }, { cwd = Util.root() }) end, { desc = "gitui (root dir)" }) map("n", "gG", function() Util.terminal({ "gitui" }) end, { desc = "gitui (cwd)" }) map("n", "gb", function() require("gitblame") vim.cmd(":GitBlameToggle") end, { desc = "gitui (cwd)" }) -- harpoon man map("n", "h1", function() require("harpoon.ui").nav_file(1) end, { desc = "First Harpoon File" }) map("n", "h2", function() require("harpoon.ui").nav_file(2) end, { desc = "Second Harpoon File" }) map("n", "h3", function() require("harpoon.ui").nav_file(3) end, { desc = "First Harpoon File" }) map("n", "ha", function() require("harpoon.mark").add_file() end, { desc = "First Harpoon File" }) map("n", "hd", function() require("harpoon.mark").remove_file() end, { desc = "First Harpoon File" }) map("n", "hm", ":Telescope harpoon marks", { noremap = true, silent = true, desc = "Show harpoon marks" }) -- telescope map("n", "fb", function() require("telescope").extensions.file_browser.file_browser({}) end, { desc = "File Browser" }) map("n", "ff", function() require("telescope.builtin").find_files() end, { desc = "Find Files" }) map("n", "fg", function() Live_grep_from_project_git_root() end, { desc = "Live Grep (root)" }) map("n", "fG", function() require("telescope.builtin").live_grep() end, { desc = "Live Grep (cwd)" }) map("n", "fh", function() require("telescope.builtin").help_tags() end, { desc = "Help" }) map("n", "fp", function() require("telescope").extensions.project.project({}) end, { noremap = true, silent = true, desc = "Projects" }) map("n", "z", function() require("telescope").extensions.zoxide.list({}) end, { desc = "Zoxide" }) -- neoscroll local t = {} t[""] = { "scroll", { "-vim.wo.scroll", "true", "250" } } t[""] = { "scroll", { "vim.wo.scroll", "true", "250" } } require("neoscroll.config").set_mappings(t) -- trouble map("n", "t", "TroubleToggle", term_opts) -- format map({ "n", "v" }, "", function() Util.format({ force = true }) end, { desc = "Format" }) -- better yank function Better_yank(opts) local current_line = unpack(vim.api.nvim_win_get_cursor(0)) vim.api.nvim_command(current_line .. "," .. (opts.count - (current_line - 1)) .. "y") end vim.api.nvim_create_user_command("BetterYank", Better_yank, { count = 1 }) map("n", "by", ":BetterYank", term_opts) -- better delete function Better_delete(opts) local current_line = unpack(vim.api.nvim_win_get_cursor(0)) vim.api.nvim_command(current_line .. "," .. (opts.count - (current_line - 1)) .. "d") end vim.api.nvim_create_user_command("BetterDelete", Better_delete, { count = 1 }) map("n", "bd", ":BetterDelete", term_opts) -- neovide zoom local change_scale_factor = function(delta) vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta end vim.keymap.set("n", "", function() change_scale_factor(1.25) end) vim.keymap.set("n", "", function() change_scale_factor(1 / 1.25) end) -- neovide paste vim.g.neovide_input_use_logo = 1 vim.api.nvim_set_keymap("i", "", "pI", { noremap = true, silent = true }) function Get_git_root() local opts = {} local function is_git_repo() vim.fn.system("git rev-parse --is-inside-work-tree") return vim.v.shell_error == 0 end if is_git_repo() then local dot_git_path = vim.fn.finddir(".git", ".;") local root = vim.fn.fnamemodify(dot_git_path, ":h") opts = { cwd = root, } end return opts end function Live_grep_from_project_git_root() local opts = Get_git_root() require("telescope.builtin").live_grep(opts) end