summary refs log tree commit diff
path: root/.vim/init.lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.vim/init.lua191
1 files changed, 118 insertions, 73 deletions
diff --git a/.vim/init.lua b/.vim/init.lua
index f6118c0..d46dbfc 100644
--- a/.vim/init.lua
+++ b/.vim/init.lua
@@ -1,4 +1,15 @@
 -- vim: fdm=marker fdl=0
+
+vim.cmd [[
+  function! LessInitFunc()
+    set nolist
+    set nocursorcolumn nocursorline
+    set laststatus=0
+    set readonly
+    set nonumber
+  endfunction
+]]
+
 local g = vim.g
 g.mapleader = ' ' -- <leader> key to <space>
 g.maplocalleader = '\\'
@@ -24,7 +35,8 @@ opt.fillchars:append({
 })
 opt.foldenable = true
 opt.foldmethod = 'expr'
-opt.foldexpr = 'nvim_treesitter#foldexpr()'
+opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
+opt.foldtext = 'v:lua.vim.treesitter.foldtext()'
 -- opt.foldlevel = 0
 opt.foldlevelstart = 999
 opt.hidden = true
@@ -44,7 +56,7 @@ opt.listchars:append({
 opt.mouse = 'a'
 opt.number = true
 opt.relativenumber = false
-opt.pumheight = 0 -- use available screenspace
+opt.pumheight = 12 -- 0 use available screenspace
 opt.redrawtime = 1500
 opt.ruler = true
 opt.scrolloff = 3
@@ -99,18 +111,16 @@ g.undodir = undodir
 opt.undofile = true
 -- }}}
 
-g.do_filetype_lua = true
--- g.do_legacy_filetype = false
--- g.did_load_filetypes = 0
-
-vim.g.night_and_day = 'night'
+opt.background = 'dark'
+require('internal.syncbg').setup()
 
 require('_globals')
 require('plugins')
 
-require('internal.align').setup({ bindings = true })
 require('internal.hardmode')
 
+-- TODO: load internal.* like normal plugins using lazy
+
 -- DIAGNOSITIC {{{
 vim.diagnostic.config({
   signs = true,
@@ -119,33 +129,23 @@ vim.diagnostic.config({
   },
   float = {
     severity = { min = vim.diagnostic.severity.INFO },
-    focusable = false,
-    source = 'always',
-    prefix = '',
-    scope = 'cursor',
   },
   virtual_text = {
-    severity = { max = vim.diagnostic.severity.HINT },
-    source = true,
-    prefix = '',
+    severity = { min = vim.diagnostic.severity.ERROR },
   },
-  -- virtual_lines    = { prefix = '⬐  ' },
-
-  update_in_insert = false,
   severity_sort = true,
 })
 vim.fn.sign_define({
-  { name = 'DiagnosticSignError', text = '✗', texthl = 'DiagnosticSignError' },
-  -- {name='DiagnosticSignWarn',  text='⚡', texthl='DiagnosticSignWarn'},
-  { name = 'DiagnosticSignWarn', text = '⚐', texthl = 'DiagnosticSignWarn' },
+  { name = 'DiagnosticSignError', text = '✗', texthl = 'DiagnosticSignError', linehl = 'Search' },
+  { name = 'DiagnosticSignWarn', text = '▷', texthl = 'DiagnosticSignWarn' },
   { name = 'DiagnosticSignInfo', text = 'ℹ', texthl = 'DiagnosticSignInfo' },
   { name = 'DiagnosticSignHint', text = '🞶', texthl = 'DiagnosticSignHint' },
 })
-vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'next diagnostic' })
-vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'prev diagnostic' })
+vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Next diagnostic' })
+vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Prev diagnostic' })
 vim.keymap.set(
   'n',
-  '<localleader>d',
+  'DD',
   vim.diagnostic.open_float,
   { desc = 'show line diagnositics' }
 )
@@ -168,7 +168,8 @@ vim.keymap.set('n', '<tab>', [[ :normal za<cr> ]], { silent = true })
 
 vim.keymap.set({ 'n', 'v' }, 'gf', function()
   local Path = require('plenary.path')
-  local cfile = vim.fn.expand('<cfile>')
+  -- call twice to expand env vars
+  local cfile = vim.fn.expand(vim.fn.expand('<cfile>'))
   if string.sub(cfile, 0, 7) == 'file://' then
     cfile = string.sub(cfile, 8)
   end
@@ -191,33 +192,11 @@ vim.keymap.set('v', 'T', function()
   vim.api.nvim_input('<esc>')
 end)
 
-local misc = require('internal.misc')
-vim.keymap.set('n', 'gd', function()
-  misc.open_under_cursor(nil, true)
-end, { desc = 'open under cursor' })
-vim.keymap.set('n', 'gx', function()
-  misc.open_under_cursor('url-launcher')
-end, { desc = 'url-launcher' })
-vim.keymap.set('n', 'gu', function()
-  misc.open_under_cursor('url-launcher')
-end, { desc = 'url-launcher' })
--- 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)
-
-vim.keymap.set('n', '<leader>r', misc.live_grep, { desc = 'live grep (rg)' })
-vim.keymap.set('n', '<leader>f', misc.find_files, { desc = 'find files (fd)' })
-
 vim.keymap.set('n', '<localleader>dgl', 'diffget LOCAL', { desc = 'diff get local' })
 vim.keymap.set('n', '<localleader>dgr', 'diffget REMOTE', { desc = 'diff get remote' })
 vim.keymap.set('n', '<localleader>dpl', 'diffpush LOCAL', { desc = 'diff push local' })
 vim.keymap.set('n', '<localleader>dpr', 'diffpush REMOTE', { desc = 'diff push remote' })
 
-vim.keymap.set(
-  'x',
-  '<localleader>f',
-  [[<ESC><CMD>lua require("internal.misc").fold_block()<CR>]],
-  { noremap = true, silent = true, desc = 'fold block' }
-)
-
 -- vim.keymap.set('v', '<c-r>', [[y:%s/<c-r>h//gc<left><left><left>]], { noremap = true, silent = true })
 vim.keymap.set('n', 'yP', function()
   local fnln = (vim.fn.expand('%:p') .. ':' .. vim.fn.line('.'))
@@ -231,6 +210,16 @@ vim.keymap.set('n', 'yT', function()
 end, { desc = 'yank file name' })
 -- }}}
 
+-- MENU -- {{{
+vim.cmd [[unmenu PopUp.-1-]]
+vim.cmd [[unmenu PopUp.How-to\ disable\ mouse]]
+
+vim.cmd [[nnoremenu PopUp.Inspect :normal K<cr>]]
+vim.cmd [[nnoremenu PopUp.Goto :normal gd<cr>]]
+vim.cmd [[nnoremenu PopUp.References :normal gR<cr>]]
+vim.cmd [[nnoremenu PopUp.Diagnostic :normal DD<cr>]]
+-- }}}
+
 -- AUTO GROUPS -- {{{
 local augroup = vim.api.nvim_create_augroup
 local autocmd = vim.api.nvim_create_autocmd
@@ -251,7 +240,7 @@ do
       if (not qf == vim.empty_dict()) and qf and qf.size > 0 then
         -- check if the quickfix buffer is already open
         for bufnr in ipairs(vim.api.nvim_list_bufs()) do
-          if vim.api.nvim_buf_get_option(bufnr, 'buftype') == 'quickfix' then
+          if vim.api.nvim_buf_get_option_value(bufnr, 'buftype') == 'quickfix' then
             return
           end
         end
@@ -334,38 +323,87 @@ autocmd({ 'BufRead', 'BufNewFile' }, {
   group = augroup('DetectBinDir', {}),
 })
 
-autocmd({ 'TermOpen' }, {
-  pattern = 'term://*',
-  callback = function()
-    local bufnr = vim.api.nvim_get_current_buf()
-    vim.opt_local.number = false
-    vim.opt_local.relativenumber = false
-    vim.opt_local.signcolumn = 'no'
-    vim.cmd.split('#0') -- split the previous window
-    vim.api.nvim_win_set_height(vim.fn.win_findbuf(bufnr)[1], 20)
-    vim.cmd.startinsert()
+-- autocmd({ 'FileType' }, {
+--   pattern = 'dirbuf',
+--   callback = function()
+--     if not vim.startswith(vim.api.nvim_buf_get_name(0), '/home/robert/zettelkasten') then return end
+--     vim.notify('hi')
+--     for i, l in ipairs(vim.api.nvim_buf_get_lines(0, 0, -1, true)) do
+--       vim.notify(vim.inspect(i, l))
+--     end
+--   end,
+--   group = augroup('DetectZkDirbuf', {}),
+-- })
+
+-- autocmd({ 'TermOpen' }, {
+--   pattern = 'term://*',
+--   callback = function()
+--     local bufnr = vim.api.nvim_get_current_buf()
+--     vim.opt_local.number = false
+--     vim.opt_local.relativenumber = false
+--     vim.opt_local.signcolumn = 'no'
+--     vim.cmd.split('#0') -- split the previous window
+--     vim.api.nvim_win_set_height(vim.fn.win_findbuf(bufnr)[1], 20)
+--     vim.cmd.startinsert()
+--   end,
+--   group = augroup('CustomizeTermBuffer', {}),
+-- })
+
+-- custom diagnostic settings for zk
+autocmd({ 'DiagnosticChanged' }, {
+  pattern = '*.md',
+  callback = function(args)
+    if not (args.data.diagnostics or args.data.diagnostics[1].source == 'zk') then
+      return
+    end
+    if vim.b.did_configure_diagnostics then
+      return
+    end
+    for key, ns in pairs(vim.api.nvim_get_namespaces()) do
+      if vim.startswith(key, 'vim.lsp.zk') then
+        vim.b.did_configure_diagnostics = true
+        vim.diagnostic.config({
+          signs = {
+            severity = vim.diagnostic.severity.INFO,
+          },
+          virtual_text = {
+            source = false,
+            prefix = '',
+          },
+        }, ns)
+      end
+    end
   end,
-  group = augroup('CustomizeTermBuffer', {}),
+  group = augroup('DiagnosticConfigZk', {}),
 })
--- }}}
 
--- USER COMMANDS -- {{{
-vim.api.nvim_create_user_command('Make', function(opts)
-  require('internal.job').make(opts.fargs)
-end, { nargs = '*', desc = 'run make target' })
-vim.api.nvim_create_user_command('Sh', function(opts)
-  require('internal.job').sh(table.concat(opts.fargs, ' '))
-end, { nargs = '*', desc = 'run shell command' })
-
-require('internal.misc').setup({
-  grep = true,
-  find = true,
-  sortline = true,
-})
+do
+  local group = augroup('VisualModeRelativeNumber', {})
+  autocmd({ 'ModeChanged' }, {
+    pattern = '*:[vV\x16]*',
+    callback = function()
+      vim.opt_local.relativenumber = true
+    end,
+    group = group,
+  })
+  autocmd({ 'ModeChanged' }, {
+    pattern = '[vV\x16]*:*',
+    callback = function()
+      -- vim.opt_local.relativenumber = (vim.api.nvim_get_mode().mode ~= '^[vV\x16]')
+      vim.opt_local.relativenumber = false
+    end,
+    group = group,
+  })
+end
 -- }}}
 
+require('internal.misc').setup()
+require('internal.find').setup()
+require('internal.sortline').setup()
+
 _G.statusline_enable_notifysend = false
 require('internal.statusline')
+
 require('internal.job').setup({})
 
 -- TODO: remove eventually
@@ -393,5 +431,12 @@ vim.filetype.add({
   },
   filename = {
     ['Caddyfile'] = 'conf',
+    ['TODO'] = 'todofile',
   },
+  pattern = {
+    ['${ZK_NOTEBOOK_DIR}/.*md$'] = 'zk.markdown',
+  }
 })
+
+-- use bash parsers for gentoo ebuilds
+vim.treesitter.language.register('bash', 'ebuild')