summaryrefslogtreecommitdiff
path: root/pkgs/custom-neovim/config/lua/keymaps.lua
blob: 2b2b70e29987a9140e28b57c6cb3af2e82a4b583 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
-- ╭─────────────────────────────────────────────────────────╮
-- │                         Keymaps                         │
-- ╰─────────────────────────────────────────────────────────╯

-- Create keymap function
local mapkey = function(mode, key, desc, action, plugin)
  local keymapper = plugin and require("lz.n").keymap(plugin).set or vim.keymap.set
  keymapper(mode, key, action, { noremap = true, silent = true, desc = desc })
end

-- Set the leader key
vim.g.mapleader = " "

-- Pickers
mapkey("n", "<leader>f", "Open file picker", ":Pick files<cr>", "mini.pick")
mapkey("n", "<leader>o", "Open old file picker", ":Pick oldfiles<cr>", "mini.pick")
mapkey("n", "<leader>/", "Open live grep picker", ":Pick grep_live<cr>", "mini.pick")
mapkey("n", "<leader>k", "Open colorscheme picker", ":Pick colorschemes<cr>", "mini.pick")
mapkey("n", "<leader>z", "Open zoxide picker", ":Zi<cr>", "zoxide.vim")
mapkey("n", "<leader>l", "Open tab directory picker", function ()
  local dirstr = vim.fn.system("fd -t d")

  local pos,dirtbl = 0,{}
  for st,sp in function() return string.find(dirstr, "\n", pos, true) end do
      table.insert(dirtbl, string.sub(dirstr, pos, st - 1))
      pos = sp + 1
  end
  table.insert(dirtbl, string.sub(dirstr, pos))
  vim.ui.select(
    dirtbl,
    {},
    function (choice)
      vim.cmd.tcd(choice)
    end
  )
end, "mini.pick")
mapkey("n", "<leader>L", "Open directory picker", function ()
  local dirstr = vim.fn.system("fd -t d")

  local pos,dirtbl = 0,{}
  for st,sp in function() return string.find(dirstr, "\n", pos, true) end do
      table.insert(dirtbl, string.sub(dirstr, pos, st - 1))
      pos = sp + 1
  end
  table.insert(dirtbl, string.sub(dirstr, pos))
  vim.ui.select(
    dirtbl,
    {},
    function (choice)
      vim.cmd.cd(choice)
    end
  )
end, "mini.pick")

-- File manager
mapkey("n", "<leader>e", "Open file manager", ":lua MiniFiles.open()<cr>", "mini.files")

-- Git
mapkey("n", "<leader>g", "Manage git", "")
mapkey("n", "<leader>gg", "Open neogit", ":Neogit<cr>", "neogit")
mapkey("n", "<leader>ga", "Git add", ":Git add %:p<cr>", "mini-git")
mapkey("n", "<leader>gA", "Git add cwd", function() vim.cmd("Git add " .. vim.fn.getcwd() .. "/.") end, "mini-git")
mapkey("n", "<leader>gr", "Git remove", ":Git rm %:p<cr>", "mini-git")
mapkey("n", "<leader>gc", "Git commit", ":Git commit<cr>", "mini-git")
mapkey("n", "<leader>gs", "Git status", ":Git status<cr>", "mini-git")
mapkey("n", "<leader>gp", "Git pull", ":Git pull<cr>", "mini-git")
mapkey("n", "<leader>gP", "Git push", ":Git push<cr>", "mini-git")

-- Tabs
mapkey("n", "<leader>t", "Manage tabs", "")
mapkey("n", "<leader>tt", "Go to next tab", ":tabn<cr>")
mapkey("n", "<leader>tT", "Go to previous tab", ":tabp<cr>")
mapkey("n", "<leader>to", "Open new tab", ":tabnew<cr>")
mapkey("n", "<leader>tc", "Close current tab", ":tabclose<cr>")

-- Buffers
mapkey("n", "<leader>b", "Manage buffers", "")
mapkey("n", "<leader>bb", "Open buffer picker", ":Pick buffers<cr>", "mini.pick")
mapkey("n", "<leader>bc", "Clear invisible buffers", function ()
  local bufinfos = vim.fn.getbufinfo({buflisted = 1})
  vim.tbl_map(function (bufinfo)
    if bufinfo.changed == 0 and (not bufinfo.windows or #bufinfo.windows == 0) then
      vim.api.nvim_buf_delete(bufinfo.bufnr, {force = false, unload = false})
      vim.cmd.redrawtabline()
    end
  end, bufinfos)
end)

-- Comment box
mapkey("n", "<leader>j", "Manage comment graphics", "")
mapkey("n", "<leader>jb", "Create comment box", ":CB")

-- Session
mapkey("n", "<leader>w", "Manage sessions", "")
mapkey("n", "<leader>ww", "Open a session", ":AutoSession search<cr>", "mini.pick")
mapkey("n", "<leader>wd", "Delete a session", ":AutoSession deletePicker<cr>", "mini.pick")
mapkey("n", "<leader>wD", "Delete current session", ":AutoSession delete<cr>", "mini.pick")
mapkey("n", "<leader>wr", "Restore last session", ":AutoSession restore<cr>")
mapkey("n", "<leader>wp", "Purge orphaned sessions", ":AutoSession purgeOrphaned<cr>")
mapkey("n", "<leader>ws", "Save session", ":AutoSession save<cr>")

-- Terminal
mapkey("n", "<leader>n", "Open terminal", ":botright terminal<cr>")

-- Toggle spellcheck
mapkey("n", "zq", "Toggle spellcheck", ":set spell!<cr>")

-- Spelling suggestions
mapkey("n", "z=", "Pick spelling suggestions", ":Pick spellsuggest<cr>")

-- Do operations without yanking
mapkey({ "n", "v" }, "<leader>d", "Fully delete", [["_d]])
mapkey({ "n", "v" }, "<leader>D", "Fully delete line", [["_D]])
mapkey({ "n", "v" }, "<leader>x", "Fully delete character", [["_x]])
mapkey({ "n", "v" }, "<leader>X", "Fully delete previous character", [["_X]])
mapkey({ "n", "v" }, "<leader>c", "Fully change", [["_c]])
mapkey({ "n", "v" }, "<leader>C", "Fully change line", [["_C]])
mapkey({ "v" }, "<leader>p", "Fully put", [[P]])

-- Paste on newline
mapkey("n", "<leader>p", "Paste on newline", ":pu<cr>")

-- Visual Movement Keys
mapkey({ "n", "v" }, "j", "Go down visually", "gj")
mapkey({ "n", "v" }, "k", "Go up visually", "gk")
mapkey({ "n", "v" }, "<down>", "Go down visually", "g<down>")
mapkey({ "n", "v" }, "<up>", "Go up visually", "g<up>")

-- Falling key
mapkey("n", "<leader>u", "Make it rain", ":CellularAutomaton make_it_rain<cr>", "cellular-automaton.nvim")

-- QOL Keys
mapkey("t", "<Esc><Esc>", "Exit terminal insert mode", "<C-\\><C-n>")
vim.keymap.set("c", "<cr>", function()
  if vim.fn.pumvisible() == 1 then return '<c-y>' end
  return '<cr>'
end, { expr = true })                                -- Make enter complete command.
mapkey("n", "<esc>", "Clear highlights", ":noh<cr>") -- Make esc clear highlights