summary refs log tree commit diff
path: root/.vim
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-04-15 15:20:00 +0200
committerRobert Günzler <r@gnzler.io>2022-04-15 15:20:00 +0200
commite85449522dd08476ed158406f2abfc703ff95c72 (patch)
tree46d40566dbb4f57aee72063c9eded8109ce304af /.vim
parent90c0c328c5bd12c3e6b7c3f9a08a3a9ccd28bdb2 (diff)
vim: update plugins.lua
Diffstat (limited to '.vim')
-rw-r--r--.vim/lua/plugins.lua623
1 files changed, 342 insertions, 281 deletions
diff --git a/.vim/lua/plugins.lua b/.vim/lua/plugins.lua
index 237a64c..f5bf50c 100644
--- a/.vim/lua/plugins.lua
+++ b/.vim/lua/plugins.lua
@@ -70,7 +70,14 @@ return require('packer').startup({function()
   -- improve startup time by optimizing lua `require`
   use {'lewis6991/impatient.nvim'}
 
-  -- git status in the sign column
+  -- neat helper for when you don't remember your keymap
+  use {'folke/which-key.nvim', module = {'which-key'}, -- {{{
+    config = function()
+      require('which-key').setup {
+        icons = { separator = ':' }
+      }
+    end} -- }}}
+
   use {'lewis6991/gitsigns.nvim', --- {{{
     requires = {'nvim-lua/plenary.nvim'},
     config = function()
@@ -90,6 +97,28 @@ return require('packer').startup({function()
       }
     end} -- }}}
 
+  use {'lukas-reineke/indent-blankline.nvim', -- {{{
+    config = function()
+      require('indent_blankline').setup {
+        char = '▏',
+        char_highlight_list = {'Whitespace'},
+        -- space_char = ' ',
+        -- space_char_highlight_list = {},
+        show_first_indent_level = true,
+        show_trailing_blankline_indent = false,
+        show_end_of_line = true,
+        use_treesitter = true,
+        disable_with_nolist = true,
+        buftype_exclude = {'terminal'},
+        bufname_exclude = {'README.md'},
+        strict_tabs = true,
+        show_current_context = true,
+        context_patterns = {'class', 'function', 'method', 'block'},
+        -- context_highlight_list = {'Folded'},
+        context_highlight_list = {'deEmph'},
+      }
+    end} -- }}}
+
   -- gcc to comment out text
   use {'numToStr/Comment.nvim', -- {{{
     config = function()
@@ -100,14 +129,21 @@ return require('packer').startup({function()
       }
     end} -- }}}
 
+  use {'editorconfig/editorconfig-vim', -- {{{
+    config = function()
+      local group = vim.api.nvim_create_augroup('EditorConfigDisable', { clear = true })
+      vim.api.nvim_create_autocmd('FileType', {
+        pattern = {'gitcommit'},
+        command = [[let b:EditorConfig_disable = 1]],
+        group = group,
+      })
+    end} -- }}}
+
   use {'windwp/nvim-autopairs', -- {{{
     config = function()
       require('nvim-autopairs').setup()
     end} -- }}}
 
-  -- edit surroundings in pairs
-  use {'tpope/vim-surround'}
-
   use {'elihunter173/dirbuf.nvim', -- {{{
     config = function()
       require('dirbuf').setup {
@@ -115,154 +151,62 @@ return require('packer').startup({function()
       }
     end} -- }}}
 
-  use {'ggandor/lightspeed.nvim', disable = true, -- {{{
-    config = function()
-      -- vim.cmd [[ vunmap x ]]
-    end} -- }}}
-
-  use {'jose-elias-alvarez/null-ls.nvim', -- {{{
-    requires = {'nvim-lua/plenary.nvim'},
-    config = function()
-      local nls = require('null-ls')
-      -- local h = require('null-ls.helpers')
-      nls.setup {
-        -- debug = true,
-        sources = {
-          nls.builtins.diagnostics.shellcheck, -- *sh
-          -- nls.builtins.formatting.clang_format, -- c*
-          -- nls.builtins.formatting.gofumpt, -- go
-          -- nls.builtins.formatting.json_tool, -- json
-          -- nls.builtins.formatting.rustfmt, -- rust
-          nls.builtins.formatting.shfmt, -- *sh
-          nls.builtins.formatting.yapf, -- python
-          -- h.make_builtin({
-          --   method = nls.methods.DIAGNOSTICS,
-          --   filetypes = { 'go' },
-          --   generator_opts = {
-          --     command = 'sh',
-          --     args = {
-          --       '-c',
-          --       'golangci-lint run --fix=false --out-format=tab -E gocritic | grep ^$RELNAME',
-          --     },
-          --     to_stdin = false,
-          --     check_exit_code = {0, 1},
-          --     format = 'line',
-          --     on_output = h.diagnostics.from_patterns({
-          --       {
-          --         pattern = [[(.+):(%d+):(%d+)%s+([%w%_%-]+)%s+(.*)]],
-          --         groups = { 'data', 'row', 'col', 'source', 'message' },
-          --       }
-          --     })
-          --   },
-          --   factory = h.generator_factory,
-          -- })
-        },
-        on_attach = require('lsp').my_attach,
-      }
-    end} -- }}}
-
-  use {'neovim/nvim-lspconfig', -- {{{
-    requires = {'~/devel/projects/spinner.nvim'},
-    config = function()
-      require('lsp').setup()
-    end} -- }}}
-
-  use {'nvim-lua/lsp-status.nvim', -- {{{
-    config = function()
-      local lspstatus = require('lsp-status')
-      lspstatus.config {
-        diagnostics = false,
-        current_function = false,
-        status_symbol = '',
-      }
-      lspstatus.register_progress()
-    end} -- }}}
-
-  use {'kosayoda/nvim-lightbulb', -- {{{
-    -- branch = 'virtual-text-column',
+  use {'ggandor/leap.nvim', -- {{{
     config = function()
-      _G.lightbulb_config = {
-        sign = {
-          enabled = false,
-          priority = 10,
-        },
-        float = {
-          enabled = false,
-          text = '󰌵',
-          win_opts = {},
-        },
-        virtual_text = {
-          enabled = false,
-          text = '← 󰌵',
-          text_pos = 'eol',
-          column = -1,
-        },
-        -- status text only works on master
-        status_text = {
-          enabled = true,
-          text = '󰌵',
-          test_unavailable = '',
-        }
-      }
-
-      -- vim.fn.sign_define({{name='LightBulbSign', text='󰌵', texthl='LightBulbVirtualText'}})
-      augroup {
-        lightbulb = {
-          {'CursorHold', '*', [[lua require('nvim-lightbulb').update_lightbulb(_G.lightbulb_config)]]}
-        }
-      }
+      require('leap').set_default_keymaps()
     end} -- }}}
 
-  use {'weilbith/nvim-code-action-menu'}
+  _G.treesitter_enabled = {
+    'bash',
+    'bibtex',
+    'c',
+    'c_sharp',
+    'cpp',
+    'cmake',
+    'comment',
+    'css',
+    'dockerfile',
+    -- 'elixir',
+    'go',
+    'gomod',
+    'gowork',
+    'hcl',
+    'help',
+    'html',
+    'java',
+    'javascript',
+    'json',
+    'jsonc',
+    'latex',
+    'ledger',
+    'lua',
+    'make',
+    'markdown',
+    'ninja',
+    'norg',
+    'regex',
+    'rust',
+    'scss',
+    'toml',
+    'typescript',
+    'vim',
+    'yaml',
+    'zig',
 
+    'org',
+    'norg_meta',
+    'norg_table',
+    'hare',
+  }
   use {'nvim-treesitter/nvim-treesitter', -- {{{
     run = ':TSUpdate',
     requires = {
-      'nvim-treesitter/completion-treesitter',
       'nvim-treesitter/nvim-treesitter-refactor',
       'nvim-treesitter/nvim-treesitter-textobjects',
       'nvim-treesitter/playground',
     },
     config = function()
-      local enabled = {
-        'bash',
-        'c',
-        'c_sharp',
-        'comment',
-        'css',
-        'dockerfile',
-        'go',
-        'gomod',
-        'html',
-        'javascript',
-        'json',
-        'jsonc',
-        'ledger',
-        'lua',
-        'norg',
-        'regex',
-        'rust',
-        'scss',
-        'toml',
-        'typescript',
-        'vim',
-        'yaml',
-        'zig',
-
-        'org',
-        'markdown',
-        'norg_meta',
-        'norg_table',
-      }
-
       local tsconf = require('nvim-treesitter.parsers').get_parser_configs()
-      tsconf.markdown = {
-        install_info = {
-          url = 'https://github.com/MDeiml/tree-sitter-markdown',
-          files = {'src/parser.c', 'src/scanner.cc'},
-          revision = 'main',
-        }
-      }
       tsconf.org = {
         install_info = {
           url = 'https://github.com/milisims/tree-sitter-org',
@@ -284,14 +228,19 @@ return require('packer').startup({function()
           branch = 'main'
         }
       }
+      tsconf.hare = {
+        install_info = {
+          url = 'https://git.sr.ht/~ecmma/tree-sitter-hare',
+          files = {'src/parser.c'},
+        }
+      }
 
       require('nvim-treesitter.configs').setup {
-        ensure_installed = enabled,
+        ensure_installed = _G.treesitter_enabled,
+        disable = {'jsonc'},
         highlight = {
           enable = true,
-          disable = {'markdown'},
-
-          additional_vim_regex_highlighting = {'org'},
+          additional_vim_regex_highlighting = {'markdown'},
         },
         indent = {
           enable = true,
@@ -336,43 +285,111 @@ return require('packer').startup({function()
           },
         },
       }
+    end} -- }}}
+
+  use {'neovim/nvim-lspconfig', -- {{{
+    requires = {'~/devel/projects/spinner.nvim'},
+    config = function()
+      require('lsp').setup()
+    end} -- }}}
 
-      augroup {
-        treesitter = {{ 'FileType', table.concat(enabled, ','), [[ set foldmethod=expr foldexpr=nvim_treesitter#foldexpr() ]] }}
+  use {'nvim-lua/lsp-status.nvim', -- {{{
+    config = function()
+      local lspstatus = require('lsp-status')
+      lspstatus.config {
+        diagnostics = false,
+        current_function = false,
+        status_symbol = '',
       }
+      lspstatus.register_progress()
     end} -- }}}
 
-  use {'onsails/lspkind-nvim', -- {{{
+  use {'kosayoda/nvim-lightbulb', -- {{{
+    -- branch = 'virtual-text-column',
     config = function()
-      require('lspkind').init {
-        symbol_map = {
-          Text = '',
-          Method = '',
-          Function = '',
-          Constructor = '',
-          Field = '',
-          Variable = '',
-          Class = '󰄶',
-          Interface = '',
-          Module = '',
-          Property = '󱊈',
-          Unit = '󰒠',
-          Value = '',
-          Enum = '',
-          Keyword = '',
-          Snippet = '',
-          Color = '',
-          File = '',
-          Reference = '',
-          Folder = '',
-          EnumMember = '',
-          Constant = '',
-          Struct = 'פּ',
-          Event = '',
-          Operator = '',
-          TypeParameter = '',
+      _G.lightbulb_config = {
+        sign = {
+          enabled = false,
+          priority = 10,
+        },
+        float = {
+          enabled = false,
+          text = '󰌵',
+          win_opts = {},
+        },
+        virtual_text = {
+          enabled = false,
+          text = '← 󰌵',
+          text_pos = 'eol',
+          column = -1,
+        },
+        -- status text only works on master
+        status_text = {
+          enabled = true,
+          text = '󰌵',
+          test_unavailable = '',
         }
       }
+
+      -- vim.fn.sign_define({{name='LightBulbSign', text='󰌵', texthl='LightBulbVirtualText'}})
+
+      local group = vim.api.nvim_create_augroup('LightBulbUpdate', { clear = true })
+      vim.api.nvim_create_autocmd('CursorHold', {
+        pattern = '*',
+        callback = function()
+          require('nvim-lightbulb').update_lightbulb(_G.lightbulb_config)
+        end,
+        group = group,
+      })
+    end} -- }}}
+
+  use {'weilbith/nvim-code-action-menu'}
+
+  use {'jose-elias-alvarez/null-ls.nvim', -- {{{
+    requires = {'nvim-lua/plenary.nvim'},
+    config = function()
+      local nls = require('null-ls')
+      -- local h = require('null-ls.helpers')
+      nls.setup {
+        -- debug = true,
+        sources = {
+          nls.builtins.diagnostics.shellcheck, -- *sh
+          -- nls.builtins.formatting.clang_format, -- c*
+          -- nls.builtins.formatting.gofumpt, -- go
+          -- nls.builtins.formatting.json_tool, -- json
+          -- nls.builtins.formatting.rustfmt, -- rust
+          nls.builtins.formatting.shfmt, -- *sh
+          nls.builtins.formatting.yapf, -- python
+          -- h.make_builtin({
+          --   method = nls.methods.DIAGNOSTICS,
+          --   filetypes = { 'go' },
+          --   generator_opts = {
+          --     command = 'sh',
+          --     args = {
+          --       '-c',
+          --       'golangci-lint run --fix=false --out-format=tab -E gocritic | grep ^$RELNAME',
+          --     },
+          --     to_stdin = false,
+          --     check_exit_code = {0, 1},
+          --     format = 'line',
+          --     on_output = h.diagnostics.from_patterns({
+          --       {
+          --         pattern = [[(.+):(%d+):(%d+)%s+([%w%_%-]+)%s+(.*)]],
+          --         groups = { 'data', 'row', 'col', 'source', 'message' },
+          --       }
+          --     })
+          --   },
+          --   factory = h.generator_factory,
+          -- })
+        },
+        on_attach = require('lsp').my_attach,
+      }
+    end} -- }}}
+
+  use {'mfussenegger/nvim-dap', module = {'dap'}, -- {{{
+    requires = {'nvim-telescope/telescope-dap.nvim'},
+    config = function()
+      require('debugger')
     end} -- }}}
 
   use {'hrsh7th/nvim-cmp', -- {{{
@@ -387,6 +404,7 @@ return require('packer').startup({function()
       'saadparwaiz1/cmp_luasnip',
       'f3fora/cmp-spell',
       'onsails/lspkind-nvim',
+      'windwp/nvim-autopairs',
     },
     config = function()
       local cmp = require('cmp')
@@ -496,13 +514,13 @@ return require('packer').startup({function()
           format = require('lspkind').cmp_format {
             with_text = false,
             menu = {
-              nvim_lsp = '[LSP]',
-              luasnip  = '[SNIP]',
-              nvim_lua = '[NVIM]',
-              orgmode  = '[ORG]',
-              spell    = '[SPELL]',
-              path     = '[PATH]',
-              buffer   = '[BUF]',
+              nvim_lsp = '[lsp]',
+              luasnip  = '[snip]',
+              nvim_lua = '[nvim]',
+              orgmode  = '[org]',
+              spell    = '[spell]',
+              path     = '[path]',
+              buffer   = '[buf]',
             }
           }
         },
@@ -551,6 +569,11 @@ return require('packer').startup({function()
           TypeParameter = '',
         }
       }
+
+      -- insert `(` after selecting function/method items
+      cmp.event:on('confirm_done', require('nvim-autopairs.completion.cmp').on_confirm_done {
+        map_char = { tex = '' }
+      })
     end} -- }}}
 
   use {'L3MON4D3/LuaSnip', -- {{{
@@ -644,25 +667,41 @@ return require('packer').startup({function()
       vim.keymap.set('n', ';s', require('telescope.builtin').lsp_workspace_symbols)
       vim.keymap.set('n', ';a', require('telescope.builtin').lsp_code_actions)
       vim.keymap.set('n', ';r', require('telescope.builtin').lsp_references)
-    end} -- }}}
-
-  -- TODO(robert): look into this more
-  use {'tjdevries/sg.nvim', disable = true, --  {{{
-    requires = {'nvim-lua/plenary.nvim'},
-    config = function()
-    end} -- }}}
 
-  -- snippets
-  use {'dcampos/nvim-snippy', -- {{{
-    requires = {
-      'honza/vim-snippets'
-    },
-    config = function()
-      local S = require('snippy')
-      vim.keymap.set('i', '<C-j>', function() if S.can_jump(1) then S.next() else return '<C-j>' end end)
-      vim.keymap.set('i', '<C-k>', function() if S.can_jump(-1) then S.previous() else return '<C-k>' end end)
-      vim.keymap.set('s', '<C-j>', function() if S.can_jump(1) then S.next() else return '<C-j>' end end)
-      vim.keymap.set('s', '<C-k>', function() if S.can_jump(-1) then S.previous() else return '<C-k>' end 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'},
+          }
+        }
+      end
     end} -- }}}
 
   use {'junegunn/vim-easy-align', cmd = {'EasyAligh', 'LiveEasyAlign'}, -- {{{
@@ -670,35 +709,9 @@ return require('packer').startup({function()
       vim.keymap.set('v', '<enter>', ':LiveEasyAlign<cr>')
     end} -- }}}
 
-  use {'editorconfig/editorconfig-vim', -- {{{
-    config = function()
-      augroup {
-        editorconfig = {
-          { 'FileType', 'gitcommit', 'let b:EditorConfig_disable = 1' },
-        }
-      }
-    end} -- }}}
-
-  use {'lukas-reineke/indent-blankline.nvim', -- {{{
+  use {'ur4ltz/surround.nvim', -- {{{
     config = function()
-      require('indent_blankline').setup {
-        char = '▏',
-        char_highlight_list = {'Whitespace'},
-        -- space_char = ' ',
-        -- space_char_highlight_list = {},
-        show_first_indent_level = true,
-        show_trailing_blankline_indent = false,
-        show_end_of_line = true,
-        use_treesitter = true,
-        disable_with_nolist = true,
-        buftype_exclude = {'terminal'},
-        bufname_exclude = {'README.md'},
-        strict_tabs = true,
-        show_current_context = true,
-        context_patterns = {'class', 'function', 'method', 'block'},
-        -- context_highlight_list = {'Folded'},
-        context_highlight_list = {'deEmph'},
-      }
+      require('surround').setup { mappings_style = 'surround' }
     end} -- }}}
 
   use {'tpope/vim-repeat'} -- extend '.' to plugins
@@ -716,26 +729,18 @@ return require('packer').startup({function()
       })
     end} -- }}}
 
-  use {'rhysd/git-messenger.vim', -- {{{
-    config = function()
-      -- vim.g.git_messenger_include_diff = false
-      vim.g.git_messenger_always_into_popup = true
-      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)
-    end} -- }}}
-
   use {'liuchengxu/vista.vim'}
   use {'rhysd/conflict-marker.vim', disable = true}
   use {'kassio/neoterm', disable = true}
 
   use {'kristijanhusak/orgmode.nvim', ft = {'org'}, module = {'orgmode'}, -- {{{
     config = function()
+      require('orgmode').setup_ts_grammar()
       require('orgmode').setup {
         org_agenda_files = {vim.env.HOME..'/Documents/org/*.org'},
         org_default_notes_file = vim.env.HOME..'/Documents/org/todo.org',
         org_todo_keywords = {'TODO', 'DONE'},
-        org_indent_mode = 'noindent',
+        -- org_indent_mode = 'noindent',
         org_agenda_templates = {
           t = {
             description = 'Todo',
@@ -764,12 +769,47 @@ return require('packer').startup({function()
           }):find()
         end)
 
-      -- vim.cmd [[ command! Orgmode lua require('orgmode').action('agenda.prompt') ]]
-      -- vim.cmd [[ command! OrgmodeCapture lua require('orgmode').action('capture.refile') ]]
-      -- vim.cmd [[ command! OrgmodeInsert lua require('orgmode').action('org_mappings.insert_heading_respect_content') ]]
-      -- vim.cmd [[ command! OrgmodeTodoCycle('orgmode').action('org_mappings.todo_next_state') ]]
-      -- vim.cmd [[ command! OrgmodeTag lua require('orgmode').action('org_mappings.set_tags') ]]
-      -- vim.cmd [[ command! OrgmodeArchive lua require('orgmode').action('org_mappings.toggle_archive_tag') ]]
+      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'},
+            }
+          },
+        }
+      end
     end} -- }}}
 
   use {'nvim-neorg/neorg', ft = {'norg'}, module = {'neorg'}, cmd = {'Neorg'}, -- {{{
@@ -877,43 +917,36 @@ return require('packer').startup({function()
     end} -- }}}
 
   -- use {'masukomi/vim-markdown-folding', ft = {'markdown'}}
-  use {'jjo/vim-cue', ft = {'cue'}}
   use {'gentoo/gentoo-syntax'}
 
   -- polyglot: multi-language support with lazy loading {{{
   -- NOTE: put language specific plugs before this to avoid conflicsts
-  --       should be kept in sync with tree-sitter, I guess...
-  g.polyglot_disabled = {
-    'bash',
-    'c',
-    'c_sharp',
-    'comment',
-    'css',
-    'dockerfile',
-    'go',
-    'gomod',
-    'html',
-    'javascript',
-    'json',
-    'jsonc',
-    'ledger',
-    'lua',
-    'norg',
-    'regex',
-    'rust',
-    'scss',
-    'toml',
-    'typescript',
-    'vim',
-    'yaml',
-    'zig',
+  use {'sheerun/vim-polyglot', disable = true,
+    setup = function()
+      vim.g.polyglot_disabled = vim.tbl_extend('force', _G.treesitter_enabled, {
+        'autoindent',
+        'sensible',
+        'ftdetect',
+      })
+      vim.notify(vim.inspect(vim.g.polyglot_disabled))
+    end} -- }}}
 
-    'org',
-    -- 'markdown',
-    'norg_meta',
-    'norg_table',
-  }
-  use {'sheerun/vim-polyglot'} -- }}}
+  use {'NMAC427/guess-indent.nvim', disable = false,
+    config = function()
+      require('guess-indent').setup {
+        auto_cmd = false,
+        -- filetype_exclude = {'netrw', 'tutor'},
+        buftype_exclude = {'help', 'nofile', 'terminal', 'prompt'},
+      }
+      local group = vim.api.nvim_create_augroup('GuessIndent', { clear = true })
+      vim.api.nvim_create_autocmd('BufWinEnter', {
+        pattern = '*',
+        callback = function()
+          require("guess-indent").set_from_buffer(true)
+        end,
+        group = group
+      })
+    end}
 
   use {'folke/zen-mode.nvim', cmd = {'ZenMode'}, -- {{{
     module = {'zen-mode'},
@@ -992,10 +1025,10 @@ return require('packer').startup({function()
             them.button('r', '󰈸  live grep',      [[<cmd>lua require('misc').live_grep()<cr>]]),
             them.button('f', '󰝰  find files',     [[<cmd>lua require('misc').find_files()<cr>]]),
             them.button('m', '󰥔  mru',            [[<cmd>lua require('telescope.builtin').oldfiles()<cr>]]),
-            them.button('t', '󰗇  tasks',          [[<cmd>lua require('packer').loader('orgmode.nvim'); require('orgmode').action('agenda.todos')<cr>]]),
-            them.button('a', '󰃶  agenda',         [[<cmd>lua require('packer').loader('orgmode.nvim'); require('orgmode').action('agenda.agenda')<cr>]]),
+            them.button('o', '󰃶  orgmode',        [[<cmd>lua require('packer').loader('orgmode.nvim'); require('orgmode').action('agenda.prompt')<cr>]]),
             them.button('u', '󰚰  update plugins', [[<cmd>lua require('packer').sync()<cr>]]),
             them.button('c', '󰂓  edit config',    [[<cmd>lua require('telescope.builtin').find_files({search_dirs={vim.env.HOME..'/.vim/'}})<cr>]]),
+            them.button('M', '󰇮  mail',           [[<cmd>Himalaya<cr>]]),
           }
         },
         {type = 'padding', val = 1},
@@ -1032,11 +1065,14 @@ return require('packer').startup({function()
       }
       alpha.setup(them.opts)
 
-      augroup {
-        alpha_indent = {
-          { 'FileType', 'alpha', [[ IndentBlanklineDisable ]] },
-        }
-      }
+      do
+        local group = vim.api.nvim_create_augroup('AlphaIndent', { clear = true })
+        vim.api.nvim_create_autocmd('FileType', {
+          pattern = 'alpha',
+          command = [[IndentBlanklineDisable]],
+          group = group,
+        })
+      end
     end} -- }}}
 
   use {'ruifm/gitlinker.nvim', -- {{{
@@ -1049,9 +1085,23 @@ return require('packer').startup({function()
       }
     end} -- }}}
 
+  use {'rhysd/git-messenger.vim', -- {{{
+    config = function()
+      -- vim.g.git_messenger_include_diff = false
+      vim.g.git_messenger_always_into_popup = true
+      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)
+    end} -- }}}
+
   -- restore last curosr position (and handle many edge cases)
   use {'farmergreg/vim-lastplace'}
 
+  use {'folke/todo-comments.nvim', -- {{{
+    config = function()
+      require('todo-comments').setup {}
+    end} -- }}}
+
   use {'lewis6991/spellsitter.nvim', disable = true, -- {{{
     config = function()
       require('spellsitter').setup {
@@ -1062,6 +1112,17 @@ return require('packer').startup({function()
 
   use {'rktjmp/lush.nvim'}
 
+  -- TODO(robert): look into this more
+  use {'tjdevries/sg.nvim', disable = true, --  {{{
+    requires = {'nvim-lua/plenary.nvim'},
+    config = function()
+    end} -- }}}
+
+  use {'soywod/himalaya', rtp = 'vim', cmd = {'Himalaya'},
+    config = function()
+      vim.g.himalaya_mailbox_picker = 'telescope'
+      vim.g.himalaya_telescope_preview_enabled = true
+    end}
 end,
 config = {
   package_root = require('packer.util').join_paths(datadir, 'site/pack'),