summary refs log tree commit diff
path: root/.vim
diff options
context:
space:
mode:
Diffstat (limited to '.vim')
-rw-r--r--.vim/after/ftplugin/markdown.lua12
-rw-r--r--.vim/init.lua48
-rw-r--r--.vim/lua/colors.lua7
-rw-r--r--.vim/lua/debugger.lua16
-rw-r--r--.vim/lua/globals.lua8
-rw-r--r--.vim/lua/lsp.lua30
-rw-r--r--.vim/lua/plugins.lua140
-rw-r--r--.vim/lua/statusline.lua16
8 files changed, 175 insertions, 102 deletions
diff --git a/.vim/after/ftplugin/markdown.lua b/.vim/after/ftplugin/markdown.lua
index 373b79e..22c19cb 100644
--- a/.vim/after/ftplugin/markdown.lua
+++ b/.vim/after/ftplugin/markdown.lua
@@ -6,16 +6,20 @@ vim.opt.foldlevel = 1
 -- vim.fn.matchadd('Conceal', '\\[-\\]', 0, -1, { conceal = '☒' })
 -- vim.fn.matchadd('Conceal', '\\[\\]', 0, -1, { conceal = '🞕' })
 
-vim.keymap.set('n',
-  '<Plug>Markdown_OpenUrlUnderCursor',
+vim.keymap.set('n', '<Plug>Markdown_OpenUrlUnderCursor',
   function() require('misc').open_under_cursor('url-launcher') end
 )
 
-vim.keymap.set('n',
-  '<leader>l',
+vim.keymap.set('n', '<localleader>l',
   function() require('misc').link_preview() end
 )
+wk_register { ['<localleader>l'] = {'link preview'} }
 
 -- vim.keymap.set('n', '<leader>zn', function() require('zk').new() end)
 -- vim.keymap.set('n', '<leader>zi', function() require('zk').index() end)
 -- vim.cmd [[ command! -nargs=* ZettelkastenNew lua require('zk').new(nil, <f-args>) ]]
+
+vim.keymap.set('n', 'gt', function()
+  require('telescope._extensions.todo-comments').exports.todo {cwd=vim.env.ZK_NOTEBOOK_DIR}
+end)
+wk_register { ['gt'] = {[[zk todo]]} }
diff --git a/.vim/init.lua b/.vim/init.lua
index 73a9a4b..c6c1d4f 100644
--- a/.vim/init.lua
+++ b/.vim/init.lua
@@ -145,6 +145,10 @@ vim.keymap.set('n', '<leader>D', function()
     end
     _G.diagnostic_hidden = not _G.diagnostic_hidden
   end)
+wk_register {
+  ['<localleader>d'] = {'show diagnositics'},
+  ['<leader>D'] = {'toggle diagnositics'},
+}
 -- }}}
 
 -- KEY BINDS -- {{{
@@ -177,22 +181,48 @@ vim.keymap.set('n',  'gd', function() misc.open_under_cursor(nil, true) end)
 -- vim.keymap.set('n',  'gf', function() misc.file_under_cursor(function(s) vim.cmd('edit ' .. s) end) end)
 vim.keymap.set('n',  'gx', function() misc.open_under_cursor('url-launcher') end)
 vim.keymap.set('n',  'gu', function() misc.open_under_cursor('url-launcher') end)
-vim.keymap.set('n', 'gGw', function() misc.word_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end)
-vim.keymap.set('n', 'gGe', function() misc.expr_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end)
-vim.keymap.set('n', 'gGf', function() misc.file_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end)
-vim.keymap.set('n',  'gss', function() misc.word_under_cursor(function(s) vim.fn.feedkeys(':%s/' .. s .. '//g'); cmd [[ call feedkeys("\<left>\<left>") ]] end) end)
+
+vim.keymap.set('n', '<localleader>gw', function() misc.word_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end)
+vim.keymap.set('n', '<localleader>ge', function() misc.expr_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end)
+vim.keymap.set('n', '<localleader>gf', function() misc.file_under_cursor(function(s) require('telescope.builtin.files').grep_string({ search = s }) end) end)
+vim.keymap.set('n',  '<localleader>gs', function() misc.word_under_cursor(function(s) vim.fn.feedkeys(':%s/' .. s .. '//g'); cmd [[ call feedkeys("\<left>\<left>") ]] end) end)
+wk_register {
+  ['<localleader>g'] = {
+    name = '+Grep',
+    w = {'word_under_cursor'},
+    e = {'expr_under_cursor'},
+    f = {'file_under_cursor'},
+    s = {'substitute'},
+  }
+}
 
 vim.keymap.set('n', '<leader>r', misc.live_grep)
 vim.keymap.set('n', '<leader>f', misc.find_files)
+wk_register {
+  ['<leader>r'] = {'rg'},
+  ['<leader>f'] = {'fd'},
+}
 
-vim.keymap.set('n', 'dgl', 'diffget LOCAL')
-vim.keymap.set('n', 'dgr', 'diffget REMOTE')
-vim.keymap.set('n', 'dpl', 'diffpush LOCAL')
-vim.keymap.set('n', 'dpr', 'diffpush REMOTE')
+vim.keymap.set('n', '<localleader>dgl', 'diffget LOCAL')
+vim.keymap.set('n', '<localleader>dgr', 'diffget REMOTE')
+vim.keymap.set('n', '<localleader>dpl', 'diffpush LOCAL')
+vim.keymap.set('n', '<localleader>dpr', 'diffpush REMOTE')
+wk_register {
+  ['<localleader>d'] = {
+    name = '+Diff',
+    gl = {'get local'},
+    gr = {'get remote'},
+    pl = {'push local'},
+    pr = {'push remote'},
+  }
+}
 
-vim.keymap.set('x', '<leader>bf',
+vim.keymap.set('x', '<localleader>f',
   [[<ESC><CMD>lua require("misc").fold_block()<CR>]],
   { noremap = true, silent = true })
+wk_register { ['<localleader>f'] = {'fold block'} }
+
+-- vim.keymap.set('v', '<c-r>', [[y:%s/<c-r>h//gc<left><left><left>]], { noremap = true, silent = true })
 -- }}}
 
 -- AUTO GROUPS -- {{{
diff --git a/.vim/lua/colors.lua b/.vim/lua/colors.lua
index 142d2fc..0b76ffb 100644
--- a/.vim/lua/colors.lua
+++ b/.vim/lua/colors.lua
@@ -289,6 +289,13 @@ return lush(function()
     CmpItemKindProperty { TSField },
     CmpItemKindUnit { Special },
 
+    WhichKey { CursorLineNr },
+    WhichKeyGroup { Keyword },
+    WhichKeySeparator { fg = Comment.fg },
+    WhichKeyDesc { Identifier },
+    WhichKeyFloat { NormalFloat },
+    WhichKeyValue { Comment },
+
     -- Plugin configs END }}}
 
     -- Config specific
diff --git a/.vim/lua/debugger.lua b/.vim/lua/debugger.lua
index d22c666..67fcf16 100644
--- a/.vim/lua/debugger.lua
+++ b/.vim/lua/debugger.lua
@@ -22,6 +22,22 @@ local widgets = require('dap.ui.widgets')
 vim.keymap.set('n', '<leader>dh', widgets.hover)
 vim.keymap.set('n', '<leader>dB', require('telescope').extensions.dap.list_breakpoints)
 
+wk_register {
+  ['<leader>d'] = {
+    name = '+Dap',
+    d = {'toggle_breakpoint'},
+    b = {'toggle_breakpoint'},
+    c = {'continue'},
+    o = {'step_over'},
+    i = {'step_into'},
+    O = {'step_out'},
+    R = {'repl'},
+    L = {'run_last'},
+    t = {'terminate'},
+    h = {'hover'},
+    B = {'list_breakpoints'}
+  }
+}
 -- ADAPTERS
 
 dap.adapters.go_dlv_local = function(callback, config) -- {{{
diff --git a/.vim/lua/globals.lua b/.vim/lua/globals.lua
index 6b2f004..5492b73 100644
--- a/.vim/lua/globals.lua
+++ b/.vim/lua/globals.lua
@@ -12,3 +12,11 @@ _G.augroup = function(tbl)
     end
   end
 end
+
+_G.wk_register = function(mappings, opts)
+  local wk = package.loaded['which-key']
+  -- local _, wk = pcall(require, 'which-key')
+  if wk then return wk.register(mappings, opts) end
+  vim.notify_once('which-key missing')
+end
+
diff --git a/.vim/lua/lsp.lua b/.vim/lua/lsp.lua
index 64a6895..98e9e58 100644
--- a/.vim/lua/lsp.lua
+++ b/.vim/lua/lsp.lua
@@ -16,12 +16,19 @@ local my_attach = function(client, bufnr)
     vim.keymap.set('n', '<C-]>'     , vim.lsp.buf.definition)
     vim.keymap.set('n', 'gd'        , vim.lsp.buf.definition)
     vim.keymap.set('n', 'gR'        , vim.lsp.buf.references)
+    wk_register({
+      ['gd'] = {'goto definition'},
+      ['gR'] = {'goto references'},
+    }, { buffer = bufnr })
   end
   if client.resolved_capabilities.hover then
     vim.keymap.set('n', 'K'         , vim.lsp.buf.hover)
   end
   if client.resolved_capabilities.rename then
     vim.keymap.set('n', 'grr'       , vim.lsp.buf.rename)
+    wk_register({
+      ['grr'] = {'rename'},
+    }, { buffer = bufnr })
   end
   if client.resolved_capabilities.signature_help then
     vim.keymap.set('n', '<c-h>'     , vim.lsp.buf.signature_help)
@@ -32,26 +39,35 @@ local my_attach = function(client, bufnr)
   end
   if client.resolved_capabilities.type_definition then
     vim.keymap.set('n', 'gT'        , vim.lsp.buf.type_definition)
+    wk_register({
+      ['gT'] = {'goto typedef'},
+    }, { buffer = bufnr })
   end
   if client.resolved_capabilities.declaration then
     vim.keymap.set('n', 'gD'        , vim.lsp.buf.declaration)
+    wk_register({
+      ['gD'] = {'goto declaration'},
+    }, { buffer = bufnr })
   end
   if client.resolved_capabilities.implementation then
     vim.keymap.set('n', 'gI'        , vim.lsp.buf.implementation)
+    wk_register({
+      ['gI'] = {'goto implementation'},
+    }, { buffer = bufnr })
   end
   if client.resolved_capabilities.workspace_symbol then
     vim.keymap.set('n', 'gW'        , vim.lsp.buf.workspace_symbol)
+    wk_register({
+      ['gW'] = {'goto symbol'},
+    }, { buffer = bufnr })
   end
   -- if client.resolved_capabilities.document_symbol then
   --   vim.keymap.set('n', 'g0', 'vim.lsp.buf.document_symbol')
   -- end
-
-  augroup {
-    lsp_user = {
-      {'BufWritePre' , '*'    ,  'lua require("lsp").format(vim.fn.expand("<afile>:p"))'},
-      {'BufWritePre' , '*.go' ,  'lua vim.lsp.buf.code_action({ only = {"source.organizeImports"} })'},
-    }
-  }
+  if client.supports_method('textDocument/codeAction') then
+    vim.keymap.set('n', 'ga', vim.lsp.buf.code_action)
+    wk_register({['ga'] = {'code action'}}, {buffer = bufnr})
+  end
 end
 
 local my_exit = function(code, signal, client_id)
diff --git a/.vim/lua/plugins.lua b/.vim/lua/plugins.lua
index 17fd879..07d2b45 100644
--- a/.vim/lua/plugins.lua
+++ b/.vim/lua/plugins.lua
@@ -71,10 +71,11 @@ return require('packer').startup({function()
   use {'lewis6991/impatient.nvim'}
 
   -- neat helper for when you don't remember your keymap
-  use {'folke/which-key.nvim', module = {'which-key'}, -- {{{
+  use {'folke/which-key.nvim', -- {{{
     config = function()
       require('which-key').setup {
-        icons = { separator = ':' }
+        icons = { separator = '→ ', group = '🞱 ' },
+        triggers = {'<leader>', '<localleader>', ';', 'g', '[', ']'},
       }
     end} -- }}}
 
@@ -666,40 +667,25 @@ return require('packer').startup({function()
           })
         end)
 
-      -- do
-      --   local group = vim.api.nvim_create_augroup('Telescope', { clear = true })
-      --   vim.api.nvim_create_autocmd('QuickFixCmdPost', {
-      --     callback = require('telescope.builtin').quickfix,
-      --     group = group,
-      --   })
-      -- end
-
-      do
-        local installed, wk = pcall(require, 'which-key')
-        if not installed then return end
-        wk.register {
-          [';'] = {
-            name = '+telescope',
-            Q = {'quickfix'},
-            C = {'loclist'},
-            H = {'help'},
-            b = {'buffers'},
-            c = {'commands'},
-            f = {'fd'},
-            g = {'grep'},
-            h = {'command history'},
-            l = {'fuzzy find buffer'},
-            o = {'oldfiles (mcu)'},
-            t = {'tags'},
-            v = {'vimrc'},
-            d = {'diagnostics'},
-            s = {'workspace symbols'},
-            a = {'code actions'},
-            r = {'references'},
-            z = {'zk'},
-          }
+      wk_register {
+        [';'] = {
+          name = '+Telescope',
+          Q = {'quickfix'},
+          C = {'loclist'},
+          H = {'help'},
+          b = {'buffers'},
+          c = {'commands'},
+          f = {'fd'},
+          g = {'grep'},
+          h = {'command history'},
+          l = {'fuzzy find buffer'},
+          o = {'oldfiles (mcu)'},
+          v = {'vimrc'},
+          d = {'diagnostics'},
+          -- s = {'workspace symbols'},
+          -- r = {'references'},
         }
-      end
+      }
     end} -- }}}
 
   use {'junegunn/vim-easy-align', cmd = {'EasyAlign', 'LiveEasyAlign'}, -- {{{
@@ -763,47 +749,43 @@ return require('packer').startup({function()
           }):find()
         end)
 
-      do
-        local installed, wk = pcall(require, 'which-key')
-        if not installed then return end
-        wk.register {
-          ['<leader>o'] = {
-            name = '+orgmode',
-            a = {'agenda prompt'},
-            c = {'capture prompt'},
-            r = {'refile'},
-            [','] = {'set priority'},
-            ['*'] = {'toggle headline'},
-            ['o'] = {'follow link/date'},
-            ['\''] = {'create source block'},
-            ['$'] = {'archive current headline'},
-            ['<cr>'] = {'insert heading/item/row'},
-            t = {'set tags'},
-            A = {'toggle ARCHIVE tag'},
-            K = {'subtree up'},
-            J = {'subtree down'},
-            e = {'export'},
-            ['i'] = {
-              name = '+timestamp',
-              d = {'set deadline'},
-              s = {'set scheduled'},
-              h = {'insert heading (respect content)'},
-              T = {'insert todo'},
-              t = {'insert todo (respect content)'},
-              ['.'] = {'set date'},
-              ['!'] = {'set inactive'},
-            },
-            ['x'] = {
-              name = '+clock',
-              i = {'clock in'},
-              o = {'clock out'},
-              q = {'cancel active clock'},
-              j = {'jump to active clock'},
-              e = {'set effort estimate property'},
-            }
+      wk_register {
+        ['<leader>o'] = {
+          name = '+Orgmode',
+          a = {'agenda prompt'},
+          c = {'capture prompt'},
+          r = {'refile'},
+          [','] = {'set priority'},
+          ['*'] = {'toggle headline'},
+          ['o'] = {'follow link/date'},
+          ['\''] = {'create source block'},
+          ['$'] = {'archive current headline'},
+          ['<cr>'] = {'insert heading/item/row'},
+          t = {'set tags'},
+          A = {'toggle ARCHIVE tag'},
+          K = {'subtree up'},
+          J = {'subtree down'},
+          e = {'export'},
+          ['i'] = {
+            name = '+Timestamp',
+            d = {'set deadline'},
+            s = {'set scheduled'},
+            h = {'insert heading (respect content)'},
+            T = {'insert todo'},
+            t = {'insert todo (respect content)'},
+            ['.'] = {'set date'},
+            ['!'] = {'set inactive'},
           },
-        }
-      end
+          ['x'] = {
+            name = '+Clock',
+            i = {'clock in'},
+            o = {'clock out'},
+            q = {'cancel active clock'},
+            j = {'jump to active clock'},
+            e = {'set effort estimate property'},
+          }
+        },
+      }
     end} -- }}}
 
   use {'nvim-neorg/neorg', ft = {'norg'}, module = {'neorg'}, cmd = {'Neorg'}, -- {{{
@@ -874,6 +856,7 @@ return require('packer').startup({function()
         },
       }
       vim.keymap.set('n', ';z', function() require('zk').edit(nil, { multi_select = false }) end)
+      wk_register { [';'] = { name = '+Telescope', z = {'zk'} } }
     end} -- }}}
 
   -- languages
@@ -1067,6 +1050,9 @@ return require('packer').startup({function()
           group = group,
         })
       end
+
+      vim.keymap.set('n', '<leader>a', function() vim.cmd [[Alpha]] end)
+      wk_register { ['<leader>a'] = {'alpha'} }
     end} -- }}}
 
   use {'ruifm/gitlinker.nvim', -- {{{
@@ -1077,6 +1063,7 @@ return require('packer').startup({function()
           action_callback = require('gitlinker.actions').copy_to_clipboard,
         },
       }
+      wk_register { ['<leader>g'] = { name = '+Git', y = {'gitlinker'} } }
     end} -- }}}
 
   use {'rhysd/git-messenger.vim', -- {{{
@@ -1086,6 +1073,7 @@ return require('packer').startup({function()
       vim.g.git_messenger_close_on_cursor_moved = true
       vim.g.git_messenger_no_default_mappings = true
       vim.keymap.set('n', '<leader>gm', function() vim.cmd [[GitMessenger]] end)
+      wk_register { ['<leader>g'] = { name = '+Git', m = {'git-messenger'} } }
     end} -- }}}
 
   -- restore last curosr position (and handle many edge cases)
@@ -1094,6 +1082,8 @@ return require('packer').startup({function()
   use {'folke/todo-comments.nvim', -- {{{
     config = function()
       require('todo-comments').setup {}
+      -- vim.keymap.set('n', ';t', function() vim.cmd [[TodoTelescope]] end)
+      -- wk_register { [';'] = { name = '+Telescope', t = {'todo-comments'} } }
     end} -- }}}
 
   use {'lewis6991/spellsitter.nvim', disable = true, -- {{{
diff --git a/.vim/lua/statusline.lua b/.vim/lua/statusline.lua
index 48a134d..796342e 100644
--- a/.vim/lua/statusline.lua
+++ b/.vim/lua/statusline.lua
@@ -140,6 +140,7 @@ local notify = function(m, l, o)
     elseif l == vim.log.levels.ERROR then
       hi = 'DiagnosticError'
     end
+    -- get level string
     lvl_string = vim.lsp.log_levels[l]
   end
   local display = m
@@ -180,13 +181,13 @@ vim.notify = function( m, l, o)
   end
 end
 
-vim.keymap.set('n', '<leader>N', function()
+vim.keymap.set('n', '<leader>n', function()
   local pickers = require('telescope.pickers')
   local finders = require('telescope.finders')
   local conf = require('telescope.config').values
   local actions = require('telescope.actions')
   -- local action_state = require('telescope.actions.state')
-  local previewers = require('telescope.previewers')
+  -- local previewers = require('telescope.previewers')
 
   local opts = {}
   pickers.new(opts, {
@@ -213,12 +214,13 @@ vim.keymap.set('n', '<leader>N', function()
       end)
       return true
     end,
-    previewer = previewers.new_buffer_previewer {
-      define_preview = function(self, entry)
-        vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, vim.split(vim.inspect(entry.value), '\n'))
-      end,
-    },
+    -- previewer = previewers.new_buffer_previewer {
+    --   define_preview = function(self, entry)
+    --     vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, {entry.value.display})
+    --   end,
+    -- },
   }):find()
 end)
+wk_register { ['<leader>n'] = {'notifications'} }
 
 vim.opt.statusline = '%!luaeval("statusline()")'