summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Segundo2024-02-18 08:19:51 +0100
committerChristian Segundo2024-02-18 08:19:51 +0100
commit85d7d7c082bd84d3c701ceec3d477ee37db5c827 (patch)
treeb78f09285c5120783f94cf9c2465a46439af2b71
parent7869bf2c310fbed680abd01d45a17057f857bf30 (diff)
downloadconfig-85d7d7c082bd84d3c701ceec3d477ee37db5c827.tar.gz
bootstrap
-rw-r--r--.gitignore1
-rw-r--r--ftdetect/hcl.vim7
-rw-r--r--ftdetect/jq.vim3
-rw-r--r--ftdetect/term.lua6
-rw-r--r--ftplugin/groovy.lua6
-rw-r--r--ftplugin/markdown.lua5
-rw-r--r--ftplugin/norg.lua3
-rw-r--r--ftplugin/sh.lua6
-rw-r--r--ftplugin/term.lua5
-rw-r--r--ftplugin/zig.vim1
-rw-r--r--indent/groovy.vim164
-rw-r--r--init.lua48
-rw-r--r--lazy-lock.json52
-rw-r--r--lua/core/disable_builtin.lua16
-rw-r--r--lua/core/init.lua64
-rw-r--r--lua/plugins/core/auto-session.lua6
-rw-r--r--lua/plugins/core/gitsigns.lua8
-rw-r--r--lua/plugins/core/luasnip.lua50
-rw-r--r--lua/plugins/core/nerdcommenter.lua18
-rw-r--r--lua/plugins/core/nvim-tree.lua36
-rw-r--r--lua/plugins/core/tabline.lua3
-rw-r--r--lua/plugins/core/telescope.lua27
-rw-r--r--lua/plugins/core/tmux.lua13
-rw-r--r--lua/plugins/core/treesitter.lua54
-rw-r--r--lua/plugins/core/which-key.lua45
-rw-r--r--lua/plugins/extra/copilot.lua33
-rw-r--r--lua/plugins/extra/feline.lua84
-rw-r--r--lua/plugins/extra/vim-fugitive.lua14
-rw-r--r--lua/plugins/eyecandy/indent-blankline.lua22
-rw-r--r--lua/plugins/eyecandy/themes.lua25
-rw-r--r--lua/plugins/eyecandy/vim-illuminate.lua4
-rw-r--r--lua/plugins/eyecandy/virt-column.lua7
-rw-r--r--lua/plugins/lang/ansible.lua26
-rw-r--r--lua/plugins/lang/bash.lua42
-rw-r--r--lua/plugins/lang/c.lua20
-rw-r--r--lua/plugins/lang/dockerfile.lua24
-rw-r--r--lua/plugins/lang/go.lua65
-rw-r--r--lua/plugins/lang/groovy.lua38
-rw-r--r--lua/plugins/lang/helm.lua6
-rw-r--r--lua/plugins/lang/jq.lua21
-rw-r--r--lua/plugins/lang/json.lua21
-rw-r--r--lua/plugins/lang/jsonnet.lua26
-rw-r--r--lua/plugins/lang/ledger.lua25
-rw-r--r--lua/plugins/lang/lua.lua46
-rw-r--r--lua/plugins/lang/markdown.lua76
-rw-r--r--lua/plugins/lang/nix.lua36
-rw-r--r--lua/plugins/lang/perl.lua36
-rw-r--r--lua/plugins/lang/promql.lua19
-rw-r--r--lua/plugins/lang/swift.lua35
-rw-r--r--lua/plugins/lang/terraform.lua40
-rw-r--r--lua/plugins/lang/typescript.lua34
-rw-r--r--lua/plugins/lang/yaml.lua59
-rw-r--r--lua/plugins/lang/zig.lua40
-rw-r--r--lua/plugins/lsp/cmp.lua97
-rw-r--r--lua/plugins/lsp/config.lua45
-rw-r--r--lua/plugins/lsp/null-ls.lua5
-rw-r--r--lua/plugins/lsp/trouble.lua9
-rw-r--r--lua/snippets/lua.lua3
-rw-r--r--lua/snippets/sh/bash-find.lua32
-rw-r--r--lua/snippets/sh/bash-misc.lua16
-rw-r--r--neovim.yaml24
-rw-r--r--plugin/qf-dd.vim30
-rw-r--r--queries/markdown/highlights.scm94
-rw-r--r--selene.toml1
-rw-r--r--spell/en.utf-8.add11
-rw-r--r--spell/en.utf-8.add.splbin0 -> 165 bytes
-rw-r--r--stylua.toml5
67 files changed, 1943 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9bbbeea
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.luarc.json
diff --git a/ftdetect/hcl.vim b/ftdetect/hcl.vim
new file mode 100644
index 0000000..1cb3a05
--- /dev/null
+++ b/ftdetect/hcl.vim
@@ -0,0 +1,7 @@
+" Stolen from https://github.com/hashivim/vim-terraform/blob/master/ftdetect/hcl.vim
+" By default Vim doesn't recognize .tf files as Terraform
+silent! autocmd! filetypedetect BufRead,BufNewFile *.tf
+autocmd BufRead,BufNewFile *.hcl set filetype=hcl
+autocmd BufRead,BufNewFile .terraformrc,terraform.rc set filetype=hcl
+autocmd BufRead,BufNewFile *.tf,*.tfvars set filetype=terraform
+autocmd BufRead,BufNewFile *.tfstate,*.tfstate.backup set filetype=json
diff --git a/ftdetect/jq.vim b/ftdetect/jq.vim
new file mode 100644
index 0000000..bd364c8
--- /dev/null
+++ b/ftdetect/jq.vim
@@ -0,0 +1,3 @@
+" https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jqls
+autocmd BufRead,BufNewFile *.jq set filetype=jq
+autocmd BufRead,BufNewFile *.yq set filetype=jq
diff --git a/ftdetect/term.lua b/ftdetect/term.lua
new file mode 100644
index 0000000..5124399
--- /dev/null
+++ b/ftdetect/term.lua
@@ -0,0 +1,6 @@
+vim.api.nvim_create_autocmd({ "TermOpen" }, {
+ pattern = { "*" },
+ callback = function(_)
+ vim.o.ft = "term"
+ end,
+})
diff --git a/ftplugin/groovy.lua b/ftplugin/groovy.lua
new file mode 100644
index 0000000..ae8636a
--- /dev/null
+++ b/ftplugin/groovy.lua
@@ -0,0 +1,6 @@
+local l = vim.opt_local
+
+l.expandtab = true
+l.smartindent = false
+l.tabstop = 4
+l.shiftwidth = 4
diff --git a/ftplugin/markdown.lua b/ftplugin/markdown.lua
new file mode 100644
index 0000000..84da7b9
--- /dev/null
+++ b/ftplugin/markdown.lua
@@ -0,0 +1,5 @@
+local l = vim.opt_local
+
+l.conceallevel = 2
+l.wrap = true
+l.spell = true
diff --git a/ftplugin/norg.lua b/ftplugin/norg.lua
new file mode 100644
index 0000000..ae6a7ea
--- /dev/null
+++ b/ftplugin/norg.lua
@@ -0,0 +1,3 @@
+local l = vim.opt_local
+
+l.conceallevel = 3
diff --git a/ftplugin/sh.lua b/ftplugin/sh.lua
new file mode 100644
index 0000000..51e5fc1
--- /dev/null
+++ b/ftplugin/sh.lua
@@ -0,0 +1,6 @@
+local l = vim.opt_local
+
+l.expandtab = false
+l.smartindent = true
+l.tabstop = 8
+l.shiftwidth = 8
diff --git a/ftplugin/term.lua b/ftplugin/term.lua
new file mode 100644
index 0000000..84faba2
--- /dev/null
+++ b/ftplugin/term.lua
@@ -0,0 +1,5 @@
+local l = vim.opt_local
+
+l.number = false
+l.relativenumber = false
+l.colorcolumn = nil
diff --git a/ftplugin/zig.vim b/ftplugin/zig.vim
new file mode 100644
index 0000000..d20fab2
--- /dev/null
+++ b/ftplugin/zig.vim
@@ -0,0 +1 @@
+setlocal foldmethod=expr foldexpr=nvim_treesitter#foldexpr()
diff --git a/indent/groovy.vim b/indent/groovy.vim
new file mode 100644
index 0000000..9a06798
--- /dev/null
+++ b/indent/groovy.vim
@@ -0,0 +1,164 @@
+" https://github.com/modille/groovy.vim/blob/master/indent/groovy.vim
+" Vim indent file
+" Language: Groovy
+" Maintainer: Toby Allsopp <toby.allsopp@peace.com> (resigned)
+" Last Change: 2005 Mar 28
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" Indent Groovy anonymous classes correctly.
+setlocal cindent cinoptions& cinoptions+=j1
+
+" The "extends" and "implements" lines start off with the wrong indent.
+setlocal indentkeys& indentkeys+=0=extends indentkeys+=0=implements
+
+" Set the function to do the work.
+setlocal indentexpr=GetGroovyIndent()
+
+let b:undo_indent = "set cin< cino< indentkeys< indentexpr<"
+
+" Only define the function once.
+if exists("*GetGroovyIndent")
+ finish
+endif
+
+function! SkipGroovyBlanksAndComments(startline)
+ let lnum = a:startline
+ while lnum > 1
+ let lnum = prevnonblank(lnum)
+ if getline(lnum) =~ '\*/\s*$'
+ while getline(lnum) !~ '/\*' && lnum > 1
+ let lnum = lnum - 1
+ endwhile
+ if getline(lnum) =~ '^\s*/\*'
+ let lnum = lnum - 1
+ else
+ break
+ endif
+ elseif getline(lnum) =~ '^\s*//'
+ let lnum = lnum - 1
+ else
+ break
+ endif
+ endwhile
+ return lnum
+endfunction
+
+function GetGroovyIndent()
+
+ " Groovy is just like C; use the built-in C indenting and then correct a few
+ " specific cases.
+ let theIndent = cindent(v:lnum)
+
+ " If we're in the middle of a comment then just trust cindent
+ if getline(v:lnum) =~ '^\s*\*'
+ return theIndent
+ endif
+
+
+ " find start of previous line, in case it was a continuation line
+ let lnum = SkipGroovyBlanksAndComments(v:lnum - 1)
+ let prev = lnum
+ while prev > 1
+ let next_prev = SkipGroovyBlanksAndComments(prev - 1)
+ if getline(next_prev) !~ ',\s*$'
+ break
+ endif
+ let prev = next_prev
+ endwhile
+
+
+ " Try to align "throws" lines for methods and "extends" and "implements" for
+ " classes.
+ if getline(v:lnum) =~ '^\s*\(extends\|implements\)\>'
+ \ && getline(lnum) !~ '^\s*\(extends\|implements\)\>'
+ let theIndent = theIndent + &sw
+ endif
+
+ " correct for continuation lines of "throws", "implements" and "extends"
+ let cont_kw = matchstr(getline(prev),
+ \ '^\s*\zs\(throws\|implements\|extends\)\>\ze.*,\s*$')
+ if strlen(cont_kw) > 0
+ let amount = strlen(cont_kw) + 1
+ if getline(lnum) !~ ',\s*$'
+ let theIndent = theIndent - (amount + &sw)
+ if theIndent < 0
+ let theIndent = 0
+ endif
+ elseif prev == lnum
+ let theIndent = theIndent + amount
+ if cont_kw ==# 'throws'
+ let theIndent = theIndent + &sw
+ endif
+ endif
+ elseif getline(prev) =~ '^\s*\(throws\|implements\|extends\)\>'
+ \ && (getline(prev) =~ '{\s*$'
+ \ || getline(v:lnum) =~ '^\s*{\s*$')
+ let theIndent = theIndent - &sw
+ endif
+
+ " When the line starts with a }, try aligning it with the matching {,
+ " skipping over "throws", "extends" and "implements" clauses.
+ if getline(v:lnum) =~ '^\s*}\s*\(//.*\|/\*.*\)\=$'
+ call cursor(v:lnum, 1)
+ silent normal %
+ let lnum = line('.')
+ if lnum < v:lnum
+ while lnum > 1
+ let next_lnum = SkipGroovyBlanksAndComments(lnum - 1)
+ if getline(lnum) !~ '^\s*\(throws\|extends\|implements\)\>'
+ \ && getline(next_lnum) !~ ',\s*$'
+ break
+ endif
+ let lnum = prevnonblank(next_lnum)
+ endwhile
+ return indent(lnum)
+ endif
+ endif
+
+ " Below a line starting with "}" never indent more. Needed for a method
+ " below a method with an indented "throws" clause.
+ let lnum = SkipGroovyBlanksAndComments(v:lnum - 1)
+ if getline(lnum) =~ '^\s*}\s*\(//.*\|/\*.*\)\=$' && indent(lnum) < theIndent
+ let theIndent = indent(lnum)
+ endif
+
+ " Fixed several indent problem
+ if theIndent > indent(lnum)
+ " if no '{ -> ( if else' , then same indent as previous line
+ if getline(lnum) !~ '[\{>\(]\s*$' && getline(lnum) !~ '\s*\(if\|else\)\s*'
+ let theIndent = indent(lnum)
+ endif
+
+ " if last line end with (
+ if getline(lnum) =~ '[\(]\s*$'
+ let theIndent = indent(lnum) + &sw
+ endif
+ endif
+
+ " indent the ')' line with ( line
+ if getline(v:lnum) =~ '^\s*)'
+ call cursor(v:lnum, 1)
+ silent normal %
+ let lnum = line('.')
+ if lnum < v:lnum
+ while lnum > 1
+ let next_lnum = SkipGroovyBlanksAndComments(lnum - 1)
+ if getline(lnum) !~ '^\s*\(throws\|extends\|implements\)\>'
+ \ && getline(next_lnum) !~ ',\s*$'
+ break
+ endif
+ let lnum = prevnonblank(next_lnum)
+ endwhile
+ return indent(lnum)
+ endif
+ endif
+
+ return theIndent
+endfunction
+
+" vi: sw=2 et
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..b0648b1
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,48 @@
+require("core")
+--require("plugins")
+
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not vim.loop.fs_stat(lazypath) then
+ vim.fn.system({
+ "git",
+ "clone",
+ "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable", -- latest stable release
+ lazypath,
+ })
+end
+vim.opt.rtp:prepend(lazypath)
+
+require("lazy").setup({
+ spec = {
+ { import = "plugins.core" },
+ { import = "plugins.eyecandy" },
+ { import = "plugins.lsp" },
+ { import = "plugins.lang" },
+ { import = "plugins.extra.copilot" },
+ { import = "plugins.extra.vim-fugitive" },
+ --{ import = "plugins.extra.feline" },
+ },
+ change_detection = {
+ enabled = true,
+ notify = false,
+ },
+})
+
+--vim.api.nvim_create_autocmd({ "BufEnter", "BufRead" }, {
+--pattern = { "*" },
+--callback = function(args)
+--local file_size = vim.fn.getfsize(args.file)
+----vim.api.nvim_buf_get_lines(buf, firstline, new_lastline, false)
+----nvim_buf_get_lines({buffer}, {start}, {end}, {strict_indexing})
+--if file_size > 1024 * 1024 then
+--pcall(vim.cmd, "TSBufDisable highlight")
+--pcall(vim.cmd, "syntax off")
+--pcall(vim.cmd, "syntax clear")
+--pcall(vim.cmd, "IlluminatePauseBuf")
+--pcall(vim.cmd, "IndentBlanklineDisable")
+--pcall(vim.cmd, "NoMatchParen")
+--end
+--end,
+--})
diff --git a/lazy-lock.json b/lazy-lock.json
new file mode 100644
index 0000000..11ac60a
--- /dev/null
+++ b/lazy-lock.json
@@ -0,0 +1,52 @@
+{
+ "LuaSnip": { "branch": "master", "commit": "6a001360cea89df50f7c5cc8c7a75e6a21f1ef5c" },
+ "auto-session": { "branch": "main", "commit": "51196ca66b38fc1660fdf50031cb0b31a199b7c9" },
+ "catppuccin": { "branch": "main", "commit": "079500a625f3ae5aa6efb758f1a17fe4c7a57e52" },
+ "cmp-emoji": { "branch": "main", "commit": "19075c36d5820253d32e2478b6aaf3734aeaafa0" },
+ "cmp-ledger": { "branch": "main", "commit": "48adfa1ab74cc731d98e1dc6056734742bf87053" },
+ "cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" },
+ "cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "3d8912ebeb56e5ae08ef0906e3a54de1c66b92f1" },
+ "cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" },
+ "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
+ "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" },
+ "copilot-cmp": { "branch": "master", "commit": "72fbaa03695779f8349be3ac54fa8bd77eed3ee3" },
+ "copilot.lua": { "branch": "master", "commit": "dcaaed5b58e6c2d395bca18d25d34e6384856722" },
+ "friendly-snippets": { "branch": "main", "commit": "53d3df271d031c405255e99410628c26a8f0d2b0" },
+ "fugitive-gitlab.vim": { "branch": "master", "commit": "55fed481c0309b3405dd3d72921d687bf36873a8" },
+ "gitsigns.nvim": { "branch": "main", "commit": "d195f0c35ced5174d3ecce1c4c8ebb3b5bc23fa9" },
+ "indent-blankline.nvim": { "branch": "master", "commit": "d4c718467d35bc93714425a7102d82e7e5065280" },
+ "lazy.nvim": { "branch": "main", "commit": "96584866b9c5e998cbae300594d0ccfd0c464627" },
+ "lspkind.nvim": { "branch": "master", "commit": "57610d5ab560c073c465d6faf0c19f200cb67e6e" },
+ "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
+ "neodev.nvim": { "branch": "main", "commit": "40b608b31f3da728e298051c4bf579d8e8a84294" },
+ "nerdcommenter": { "branch": "master", "commit": "da948e160d9f54c2967c7927b9c74c5a68c8dc49" },
+ "null-ls.nvim": { "branch": "main", "commit": "0010ea927ab7c09ef0ce9bf28c2b573fc302f5a7" },
+ "nvim-cmp": { "branch": "main", "commit": "538e37ba87284942c1d76ed38dd497e54e65b891" },
+ "nvim-lspconfig": { "branch": "master", "commit": "84f2dd42efffa20d505ac44c78568d778ca7e0a1" },
+ "nvim-navic": { "branch": "master", "commit": "8649f694d3e76ee10c19255dece6411c29206a54" },
+ "nvim-tree.lua": { "branch": "master", "commit": "141c0f97c35f274031294267808ada59bb5fb08e" },
+ "nvim-treesitter": { "branch": "master", "commit": "5a713474e38a3999b85c6cb3f5cac3248a16c7d0" },
+ "nvim-web-devicons": { "branch": "master", "commit": "a1425903ab52a0a0460622519e827f224e5b4fee" },
+ "playground": { "branch": "master", "commit": "ba48c6a62a280eefb7c85725b0915e021a1a0749" },
+ "plenary.nvim": { "branch": "master", "commit": "55d9fe89e33efd26f532ef20223e5f9430c8b0c0" },
+ "promqlfmt.nvim": { "branch": "master", "commit": "bc2ce7bec385ccca278cace3979ec43d2ce2a94d" },
+ "tabline.vim": { "branch": "master", "commit": "69c9698a3240860adaba93615f44778a9ab724b4" },
+ "tabular": { "branch": "master", "commit": "339091ac4dd1f17e225fe7d57b48aff55f99b23a" },
+ "telescope-file-browser.nvim": { "branch": "master", "commit": "8e0543365fe5781c9babea7db89ef06bcff3716d" },
+ "telescope.nvim": { "branch": "master", "commit": "6213322ab56eb27356fdc09a5078e41e3ea7f3bc" },
+ "trouble.nvim": { "branch": "main", "commit": "f1168feada93c0154ede4d1fe9183bf69bac54ea" },
+ "vim-ansible-vault": { "branch": "master", "commit": "a1555221bcd361daf385a8d2ae9024f48c3fd8db" },
+ "vim-fugitive": { "branch": "master", "commit": "59659093581aad2afacedc81f009ed6a4bfad275" },
+ "vim-go": { "branch": "master", "commit": "e8c18054cc44973ee4f59ee463dda4bf6439713c" },
+ "vim-helm": { "branch": "master", "commit": "fc2259e1f8836304a0526853ddc3fe27045be39a" },
+ "vim-illuminate": { "branch": "master", "commit": "3bd2ab64b5d63b29e05691e624927e5ebbf0fb86" },
+ "vim-jsonnet": { "branch": "master", "commit": "4ebc6619ddce5d032a985b42a9864154c3d20e4a" },
+ "vim-ledger": { "branch": "master", "commit": "281346a221434574dd7f8767a352b2bf0b218b74" },
+ "vim-markdown": { "branch": "master", "commit": "46add6c3017d3e4035dc10ffa9cb54221d8dfe1a" },
+ "vim-markdown-runner": { "branch": "master", "commit": "8afc2b63e6b5856779647962b4de7093d3ae1c52" },
+ "vim-markdown-toc": { "branch": "master", "commit": "0e2c7cdc3ac1d067eb309a10220d001bb7be39cd" },
+ "vim-rhubarb": { "branch": "master", "commit": "ee69335de176d9325267b0fd2597a22901d927b1" },
+ "vim-tmux-navigator": { "branch": "master", "commit": "7db70e08ea03b3e4d91f63713d76134512e28d7e" },
+ "virt-column.nvim": { "branch": "master", "commit": "b62b4ef0774d19452d4ed18e473e824c7a756f2f" },
+ "which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" }
+} \ No newline at end of file
diff --git a/lua/core/disable_builtin.lua b/lua/core/disable_builtin.lua
new file mode 100644
index 0000000..ea546ba
--- /dev/null
+++ b/lua/core/disable_builtin.lua
@@ -0,0 +1,16 @@
+vim.g.loaded_gzip = 1
+vim.g.loaded_zip = 1
+vim.g.loaded_zipPlugin = 1
+vim.g.loaded_tar = 1
+vim.g.loaded_tarPlugin = 1
+
+vim.g.loaded_getscript = 1
+vim.g.loaded_getscriptPlugin = 1
+vim.g.loaded_vimball = 1
+vim.g.loaded_vimballPlugin = 1
+vim.g.loaded_2html_plugin = 1
+
+vim.g.loaded_matchit = 1
+vim.g.loaded_matchparen = 1
+vim.g.loaded_logiPat = 1
+vim.g.loaded_rrhelper = 1
diff --git a/lua/core/init.lua b/lua/core/init.lua
new file mode 100644
index 0000000..1b4542a
--- /dev/null
+++ b/lua/core/init.lua
@@ -0,0 +1,64 @@
+-----------------------------------------------------------
+-- General
+-----------------------------------------------------------
+vim.opt.mouse = "a" -- Enable mouse support
+vim.opt.clipboard = "unnamedplus" -- Copy/paste to system clipboard
+vim.opt.termguicolors = true -- Enable 24-bit RGB colors
+vim.o.background = "light"
+vim.opt.hidden = true
+vim.opt.number = true
+vim.o.cursorlineopt = "both"
+vim.opt.conceallevel = 0
+vim.opt.relativenumber = true
+vim.opt.showcmd = true
+vim.opt.showmode = true
+vim.opt.colorcolumn = "80"
+vim.opt.cursorline = true
+vim.opt.foldlevelstart = 99
+vim.opt.showtabline = 1
+vim.opt.laststatus = 3 -- Single status line across all buffers
+vim.opt.undofile = true
+vim.opt.list = true -- Show some invisible characters like tabs
+vim.opt.undodir = vim.fn.stdpath("data") .. "/undo"
+vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal"
+-- TODO make it pretty with the highlights
+--vim.opt.winbar = '%!luaeval("_winbar()")' -- The winbar text, I don't know if it is possible to embed it directly here :(
+--vim.opt.winbar = "%=%m %t%="
+-----------------------------------------------------------
+-- Tabs, indent
+-----------------------------------------------------------
+vim.opt.expandtab = true -- Use spaces instead of tabs
+vim.opt.shiftwidth = 2 -- Shift 4 spaces when tab
+vim.opt.tabstop = 2 -- 1 tab == 4 spaces
+vim.opt.smartindent = true -- Autoindent new lines
+
+-----------------------------------------------------------
+-- Custom keymaps
+-----------------------------------------------------------
+vim.api.nvim_set_keymap("i", "jk", "<Esc>", {}) -- Use jk to exit insert mode
+vim.api.nvim_set_keymap("i", "kj", "<Esc>", {}) -- Use kj to exit insert mode
+vim.api.nvim_set_keymap("t", "jk", "<Esc>", {}) -- Use jk to exit terminal mode
+vim.api.nvim_set_keymap("t", "kj", "<Esc>", {}) -- Use kj to exit terminal mode
+vim.api.nvim_set_keymap("t", "<Esc>", "<C-\\><C-n>", { noremap = true }) -- Use Esc to exit terminal mode
+
+vim.api.nvim_set_keymap("i", "<C-t>", "<Esc>:tabnew<CR>", {}) -- New tab
+vim.api.nvim_set_keymap("n", "<C-t>", ":tabnew<CR>", {}) -- New tab
+
+-- No arrow keys for movement
+--nnoremap <up> <nop>
+--nnoremap <down> <nop>
+--inoremap <up> <nop>
+--inoremap <down> <nop>
+--inoremap <left> <nop>
+--inoremap <right> <nop>
+
+--Left and right to switch buffers
+--nnoremap <left> :bp<CR>
+--nnoremap <right> :bn<CR>
+
+--_winbar = function() -- My custom winbar text
+--local filename = vim.fn.expand('%')
+--return string.gsub(filename, 'term://.*:', '')
+--end
+
+require("core.disable_builtin")
diff --git a/lua/plugins/core/auto-session.lua b/lua/plugins/core/auto-session.lua
new file mode 100644
index 0000000..9bfcac0
--- /dev/null
+++ b/lua/plugins/core/auto-session.lua
@@ -0,0 +1,6 @@
+return {
+ "rmagatti/auto-session",
+ config = function()
+ require("auto-session").setup({ log_level = "info" })
+ end,
+}
diff --git a/lua/plugins/core/gitsigns.lua b/lua/plugins/core/gitsigns.lua
new file mode 100644
index 0000000..e856855
--- /dev/null
+++ b/lua/plugins/core/gitsigns.lua
@@ -0,0 +1,8 @@
+return {
+ "lewis6991/gitsigns.nvim",
+ event = { "BufRead" },
+ config = function()
+ require("gitsigns").setup()
+ end,
+ dependencies = { "nvim-lua/plenary.nvim" },
+}
diff --git a/lua/plugins/core/luasnip.lua b/lua/plugins/core/luasnip.lua
new file mode 100644
index 0000000..622af58
--- /dev/null
+++ b/lua/plugins/core/luasnip.lua
@@ -0,0 +1,50 @@
+return {
+ {
+ "L3MON4D3/LuaSnip",
+ dependencies = { "rafamadriz/friendly-snippets" },
+ build = "make install_jsregexp",
+ config = function()
+ local ls = require("luasnip")
+ local types = require("luasnip.util.types")
+
+ ls.config.set_config({
+ history = true,
+ updateevents = "TextChanged,TextChangedI",
+ enable_autosnippets = true,
+ ext_opts = {
+ [types.choiceNode] = {
+ active = {
+ virt_text = { { "<-", "Error" } },
+ },
+ },
+ },
+ })
+
+ -- luasnip keymaps are defined as cmp keymaps
+
+ vim.keymap.set(
+ "n",
+ "<leader><leader>s",
+ '<cmd>lua require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/lua/snippets" })<CR>'
+ )
+
+ require("luasnip.loaders.from_lua").lazy_load({ paths = "~/.config/nvim/lua/snippets" })
+ end,
+ },
+
+ -- VSCode like (JSON) snippets
+ -- For the full list of supported languages see:
+ -- https://github.com/rafamadriz/friendly-snippets/blob/main/package.json
+ {
+ "rafamadriz/friendly-snippets",
+ opts = { include = {} },
+ config = function(_, opts)
+ if #opts.include == 0 then
+ return
+ end
+
+ opts.path = "~/.local/share/nvim/lazy/friendly-snippets"
+ require("luasnip.loaders.from_vscode").lazy_load(opts)
+ end,
+ },
+}
diff --git a/lua/plugins/core/nerdcommenter.lua b/lua/plugins/core/nerdcommenter.lua
new file mode 100644
index 0000000..720b3d2
--- /dev/null
+++ b/lua/plugins/core/nerdcommenter.lua
@@ -0,0 +1,18 @@
+return {
+ "preservim/nerdcommenter",
+ init = function()
+ vim.g.NERDCreateDefaultMappings = 0
+ end,
+ config = function()
+ vim.api.nvim_set_keymap("v", "<leader>cc", "<plug>NERDCommenterComment", { silent = true })
+ vim.api.nvim_set_keymap("v", "<leader>cu", "<plug>NERDCommenterUncomment", { silent = true })
+ vim.api.nvim_set_keymap("n", "<leader>cc", "<plug>NERDCommenterComment", { noremap = false, silent = true })
+ vim.api.nvim_set_keymap("n", "<leader>cu", "<plug>NERDCommenterUncomment", { noremap = false, silent = true })
+ end,
+ keys = {
+ { "<leader>cc", mode = "v" },
+ { "<leader>cc", mode = "n" },
+ { "<leader>cu", mode = "v" },
+ { "<leader>cu", mode = "n" },
+ },
+}
diff --git a/lua/plugins/core/nvim-tree.lua b/lua/plugins/core/nvim-tree.lua
new file mode 100644
index 0000000..e8ca82f
--- /dev/null
+++ b/lua/plugins/core/nvim-tree.lua
@@ -0,0 +1,36 @@
+return {
+ {
+ "nvim-tree/nvim-tree.lua",
+ config = function()
+ require("nvim-tree").setup({
+ sync_root_with_cwd = false,
+ update_focused_file = {
+ enable = true,
+ update_root = false,
+ },
+ renderer = {
+ indent_markers = { enable = true },
+ highlight_git = true,
+ highlight_opened_files = "all",
+ },
+ })
+ end,
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ },
+
+ -- Add nvim-tree which-key shortcuts
+ {
+ "folke/which-key.nvim",
+ opts = function(_, opts)
+ if type(opts) ~= "table" then
+ opts = {}
+ end
+
+ if type(opts.f) ~= "table" then
+ opts["f"] = {}
+ end
+
+ opts.f["e"] = { "<cmd>NvimTreeToggle<cr>", "Explorer" }
+ end,
+ },
+}
diff --git a/lua/plugins/core/tabline.lua b/lua/plugins/core/tabline.lua
new file mode 100644
index 0000000..0a8305d
--- /dev/null
+++ b/lua/plugins/core/tabline.lua
@@ -0,0 +1,3 @@
+return {
+ "mkitt/tabline.vim",
+}
diff --git a/lua/plugins/core/telescope.lua b/lua/plugins/core/telescope.lua
new file mode 100644
index 0000000..367e20c
--- /dev/null
+++ b/lua/plugins/core/telescope.lua
@@ -0,0 +1,27 @@
+return {
+ {
+ "nvim-telescope/telescope.nvim",
+ config = function()
+ require("telescope").load_extension("file_browser")
+ end,
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ "nvim-telescope/telescope-file-browser.nvim",
+ },
+ },
+
+ {
+ "folke/which-key.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.b = opts.b or {}
+ opts.f = opts.f or {}
+
+ opts.b["b"] = { "<cmd>Telescope buffers<cr>", "All" }
+ opts.f["f"] = { "<cmd>Telescope find_files<cr>", "Find" }
+ opts.f["g"] = { "<cmd>Telescope live_grep<cr>", "Grep" }
+ opts.f["b"] = { "<cmd>Telescope file_browser<cr>", "Browse" }
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/core/tmux.lua b/lua/plugins/core/tmux.lua
new file mode 100644
index 0000000..0d63aa4
--- /dev/null
+++ b/lua/plugins/core/tmux.lua
@@ -0,0 +1,13 @@
+return {
+ "christoomey/vim-tmux-navigator",
+ config = function()
+ local nvim_set_keymap = vim.api.nvim_set_keymap
+ vim.g.tmux_navigator_no_mappings = 1
+ for _, mode in pairs({ "n", "v", "i", "t" }) do
+ nvim_set_keymap(mode, "<C-j>", "<cmd>:TmuxNavigateDown<CR>", { noremap = true })
+ nvim_set_keymap(mode, "<C-k>", "<cmd>:TmuxNavigateUp<CR>", { noremap = true })
+ nvim_set_keymap(mode, "<C-h>", "<cmd>:TmuxNavigateLeft<CR>", { noremap = true })
+ nvim_set_keymap(mode, "<C-l>", "<cmd>:TmuxNavigateRight<CR>", { noremap = true })
+ end
+ end,
+}
diff --git a/lua/plugins/core/treesitter.lua b/lua/plugins/core/treesitter.lua
new file mode 100644
index 0000000..3818555
--- /dev/null
+++ b/lua/plugins/core/treesitter.lua
@@ -0,0 +1,54 @@
+---@param tbl table
+---@return table
+local tbl_uniq = function(tbl)
+ ---@type table<string, boolean>
+ local added = {}
+ local res = {}
+ res = vim.tbl_filter(function(k)
+ if added[k] then
+ return false
+ end
+ added[k] = true
+ return true
+ end, tbl)
+
+ return res
+end
+
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ build = ":TSUpdate",
+ cmd = { "TSUpdateSync" },
+ event = { "BufReadPost", "BufNewFile" },
+ init = function()
+ vim.o.foldmethod = "expr"
+ vim.o.foldexpr = "nvim_treesitter#foldexpr()"
+ end,
+ opts = {
+ ensure_installed = { "query" },
+ ignore_install = {},
+ highlight = {
+ enable = true,
+ },
+ query_linter = {
+ enable = true,
+ use_virtual_text = true,
+ lint_events = { "BufWrite", "CursorHold" },
+ },
+ },
+ config = function(_, opts)
+ if type(opts.ensure_installed) == "table" then
+ opts.ensure_installed = tbl_uniq(opts.ensure_installed)
+ end
+ require("nvim-treesitter.configs").setup(opts)
+ end,
+ },
+
+ {
+ "nvim-treesitter/playground",
+ build = ":TSInstall query",
+ dependencies = { "nvim-treesitter" },
+ cmd = { "TSPlaygroundToggle" },
+ },
+}
diff --git a/lua/plugins/core/which-key.lua b/lua/plugins/core/which-key.lua
new file mode 100644
index 0000000..6e046a3
--- /dev/null
+++ b/lua/plugins/core/which-key.lua
@@ -0,0 +1,45 @@
+return {
+ "folke/which-key.nvim",
+ event = "VeryLazy",
+ init = function()
+ vim.o.timeout = true
+ vim.o.timeoutlen = 300
+ end,
+
+ opts = {
+ f = { name = "File" },
+ b = {
+ name = "Buffer",
+ n = { "<cmd>BufferNext<cr>", "Next" },
+ p = { "<cmd>BufferPrevious<cr>", "Previous" },
+ c = { "<cmd>BufferClose<cr>", "Close" },
+ ["1"] = { "<cmd>BufferGoto 1<cr>", "1" },
+ ["2"] = { "<cmd>BufferGoto 2<cr>", "2" },
+ ["3"] = { "<cmd>BufferGoto 3<cr>", "3" },
+ ["4"] = { "<cmd>BufferGoto 4<cr>", "4" },
+ ["5"] = { "<cmd>BufferGoto 5<cr>", "5" },
+ ["6"] = { "<cmd>BufferGoto 6<cr>", "6" },
+ ["7"] = { "<cmd>BufferGoto 7<cr>", "7" },
+ ["8"] = { "<cmd>BufferGoto 8<cr>", "8" },
+ ["9"] = { "<cmd>BufferGoto 9<cr>", "9" },
+ },
+ l = {
+ name = "LSP",
+ a = { "<cmd>lua vim.lsp.buf.code_action()<cr>", "Action" },
+ f = { "<cmd>lua vim.lsp.buf.format({ async = false, timeout_ms = 5000 })<cr>", "Format" },
+ d = { "<cmd>lua vim.diagnostic.open_float()<cr>", "Diagnostic" },
+ h = { "<cmd>lua vim.lsp.buf.hover()<cr>", "Help" },
+ g = {
+ name = "Go to",
+ D = { "<cmd>lua vim.lsp.buf.declaration()<cr>", "Go to declaration" },
+ d = { "<cmd>lua vim.lsp.buf.definition()<cr>", "Go to definition" },
+ i = { "<cmd>lua vim.lsp.buf.definition()<cr>", "Go to implementation" },
+ },
+ },
+ },
+
+ config = function(_, opts)
+ local wk = require("which-key")
+ wk.register(opts, { prefix = "<leader>" })
+ end,
+}
diff --git a/lua/plugins/extra/copilot.lua b/lua/plugins/extra/copilot.lua
new file mode 100644
index 0000000..15d0c73
--- /dev/null
+++ b/lua/plugins/extra/copilot.lua
@@ -0,0 +1,33 @@
+return {
+ {
+ "zbirenbaum/copilot.lua",
+ event = { "InsertEnter" },
+ build = ":Copilot auth",
+ config = function()
+ vim.schedule(function()
+ require("copilot").setup({
+ filetypes = { yaml = true },
+ suggestion = { enabled = false },
+ panel = { enabled = false },
+ })
+ end)
+ end,
+ },
+
+ {
+ "zbirenbaum/copilot-cmp",
+ dependencies = { "copilot.lua" },
+ opts = {},
+ },
+
+ {
+ "hrsh7th/nvim-cmp",
+ dependencies = { "zbirenbaum/copilot-cmp" },
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ table.insert(opts.sources, 1, { name = "copilot" })
+ opts.formatting.format.menu["copilot"] = ""
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/extra/feline.lua b/lua/plugins/extra/feline.lua
new file mode 100644
index 0000000..037db34
--- /dev/null
+++ b/lua/plugins/extra/feline.lua
@@ -0,0 +1,84 @@
+return {
+ {
+ "feline-nvim/feline.nvim",
+ dependencies = { "nvim-navic", "catppuccin", "nvim-tree/nvim-web-devicons" },
+ config = function()
+ local ctp_feline = require("catppuccin.groups.integrations.feline")
+ ctp_feline.setup({
+ assets = {
+ left_separator = "",
+ right_separator = "",
+ },
+ })
+
+ local catpuccin_components = ctp_feline.get()
+ require("feline").setup({ components = catpuccin_components })
+
+ local catpuccin_winbar_components = { active = { {}, {}, {} }, inactive = {} }
+ --catpuccin_winbar_components.inactive = catpuccin_components.inactive
+
+ -- Removes the mode_icon and its left padding
+ --table.remove(catpuccin_components.active[1], 2)
+ --table.remove(catpuccin_components.active[1], 1)
+ --local catpuccin_winbar_components = catpuccin_components
+
+ --local yaml_schema_component = {
+ --provider = function()
+ --local schema = require("yaml-companion").get_buf_schema(0)
+ --return schema.result[1].name
+ --end,
+ --enabled = function()
+ --local enabled = catpuccin_components.active[3][1].enabled
+ --if vim.bo.filetype == "yaml" and enabled then
+ --return true
+ --end
+ --end,
+ --hl = catpuccin_components.active[3][1].hl,
+ --left_sep = catpuccin_components.active[3][1].left_sep,
+ --right_sep = catpuccin_components.active[3][1].right_sep,
+ --}
+
+ local navic_component = {
+ provider = function()
+ local location = require("nvim-navic").get_location()
+ if location == "" then
+ return location
+ end
+ return "> " .. require("nvim-navic").get_location()
+ end,
+ enabled = function()
+ local ok, navic = pcall(require, "nvim-navic")
+ if ok then
+ return navic.is_available()
+ end
+ end,
+ hl = {
+ bg = require("catppuccin.palettes").get_palette().base,
+ fg = catpuccin_components.active[3][1].hl.fg,
+ },
+ }
+
+ --table.insert(catpuccin_components.active[3], 1, yaml_schema_component)
+ -- Overwrite the useless LSP component
+ --catpuccin_components.active[3][2] = yaml_schema_component
+
+ -- this is a hack to properly align the next component
+ catpuccin_winbar_components.active[1][1] = {
+ provider = function()
+ return " "
+ end,
+ hl = {
+ bg = require("catppuccin.palettes").get_palette().base,
+ fg = require("catppuccin.palettes").get_palette().base,
+ },
+ }
+
+ catpuccin_winbar_components.active[1][2] = navic_component
+ catpuccin_winbar_components.inactive = catpuccin_winbar_components.active
+
+ require("feline").winbar.setup({
+ components = catpuccin_winbar_components,
+ })
+ end,
+ },
+}
diff --git a/lua/plugins/extra/vim-fugitive.lua b/lua/plugins/extra/vim-fugitive.lua
new file mode 100644
index 0000000..d1f8a5a
--- /dev/null
+++ b/lua/plugins/extra/vim-fugitive.lua
@@ -0,0 +1,14 @@
+return {
+ {
+ "shumphrey/fugitive-gitlab.vim",
+ cmd = "GBrowse",
+ config = function()
+ vim.g.fugitive_gitlab_domains = { "https://gitlab.otters.xyz" }
+ end,
+ },
+
+ {
+ "tpope/vim-fugitive",
+ dependencies = { "tpope/vim-rhubarb", "fugitive-gitlab.vim" },
+ },
+}
diff --git a/lua/plugins/eyecandy/indent-blankline.lua b/lua/plugins/eyecandy/indent-blankline.lua
new file mode 100644
index 0000000..8756757
--- /dev/null
+++ b/lua/plugins/eyecandy/indent-blankline.lua
@@ -0,0 +1,22 @@
+return {
+ "lukas-reineke/indent-blankline.nvim",
+ event = { "BufRead" },
+ main = "ibl",
+ opts = {
+ indent = {
+ char = "▏",
+ tab_char = "▏",
+ },
+ scope = {
+ enabled = true,
+ show_start = true,
+ show_end = true,
+ exclude = {
+ language = {
+ "help",
+ },
+ },
+ },
+ },
+ dependencies = { "nvim-treesitter" },
+}
diff --git a/lua/plugins/eyecandy/themes.lua b/lua/plugins/eyecandy/themes.lua
new file mode 100644
index 0000000..42e5d6c
--- /dev/null
+++ b/lua/plugins/eyecandy/themes.lua
@@ -0,0 +1,25 @@
+return {
+ {
+ "catppuccin/nvim",
+ lazy = false,
+ priority = 1000,
+ name = "catppuccin",
+ config = function()
+ local catp = require("catppuccin")
+ catp.setup({
+ flavour = "frappe",
+ integrations = {
+ indent_blankline = true,
+ which_key = true,
+ illuminate = true,
+ lsp_trouble = true,
+ navic = {
+ enabled = true,
+ custom_bg = "NONE",
+ },
+ },
+ })
+ vim.api.nvim_command("colorscheme catppuccin")
+ end,
+ },
+}
diff --git a/lua/plugins/eyecandy/vim-illuminate.lua b/lua/plugins/eyecandy/vim-illuminate.lua
new file mode 100644
index 0000000..20b9bb2
--- /dev/null
+++ b/lua/plugins/eyecandy/vim-illuminate.lua
@@ -0,0 +1,4 @@
+return {
+ "RRethy/vim-illuminate",
+ event = { "BufRead" },
+}
diff --git a/lua/plugins/eyecandy/virt-column.lua b/lua/plugins/eyecandy/virt-column.lua
new file mode 100644
index 0000000..5259d7a
--- /dev/null
+++ b/lua/plugins/eyecandy/virt-column.lua
@@ -0,0 +1,7 @@
+return {
+ "lukas-reineke/virt-column.nvim",
+ event = { "BufRead" },
+ config = function()
+ require("virt-column").setup()
+ end,
+}
diff --git a/lua/plugins/lang/ansible.lua b/lua/plugins/lang/ansible.lua
new file mode 100644
index 0000000..6a65027
--- /dev/null
+++ b/lua/plugins/lang/ansible.lua
@@ -0,0 +1,26 @@
+return {
+ {
+ "arouene/vim-ansible-vault",
+ ft = { "ansible", "yaml.ansible", "yaml" },
+ },
+
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "yaml" })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.ansiblels = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/bash.lua b/lua/plugins/lang/bash.lua
new file mode 100644
index 0000000..6c6c98c
--- /dev/null
+++ b/lua/plugins/lang/bash.lua
@@ -0,0 +1,42 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "bash" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.code_actions.shellcheck, -- Diagnostics handled by Bash LS
+ null_ls.builtins.formatting.shfmt,
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ -- Just here because it doesn't work with the default node
+ -- https://github.com/bash-lsp/bash-language-server/issues/418
+ --local brew_prefix = vim.fn.systemlist("brew --prefix")[1]
+ --local bashls_script_name = "bash-language-server"
+ --local bashls_script_path = vim.fn.systemlist("which " .. bashls_script_name)[1]
+ --local bashls_cmd = { brew_prefix .. "/opt/node@16/bin/node", bashls_script_path, "start" }
+ --opts.servers.bashls = { cmd = bashls_cmd }
+ opts.servers.bashls = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/c.lua b/lua/plugins/lang/c.lua
new file mode 100644
index 0000000..5b54a9d
--- /dev/null
+++ b/lua/plugins/lang/c.lua
@@ -0,0 +1,20 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "c" })
+ end
+ end,
+ },
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.clangd = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/dockerfile.lua b/lua/plugins/lang/dockerfile.lua
new file mode 100644
index 0000000..ca3ccc2
--- /dev/null
+++ b/lua/plugins/lang/dockerfile.lua
@@ -0,0 +1,24 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "dockerfile" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.diagnostics.hadolint,
+ })
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/go.lua b/lua/plugins/lang/go.lua
new file mode 100644
index 0000000..7e7fa03
--- /dev/null
+++ b/lua/plugins/lang/go.lua
@@ -0,0 +1,65 @@
+return {
+ {
+ "fatih/vim-go",
+ init = function()
+ vim.g.go_fmt_command = "gofumpt"
+ end,
+ ft = { "go" },
+ },
+
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, {
+ "go",
+ "gomod",
+ "gosum",
+ })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.diagnostics.golangci_lint,
+ null_ls.builtins.formatting.gofumpt, -- Just here because gopls integrated gofumpt doesn't work
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.gopls = {
+ -- Because integrated gofumpt doesn't work
+ -- I disable formatting for gopls
+ -- Formatting is handled with gofumpt by:
+ -- - null-ls on format request
+ -- - vim-go on save
+ on_attach = function(client, _)
+ client.server_capabilities.documentFormattingProvider = false
+ client.server_capabilities.documentRangeFormattingProvider = false
+ end,
+ cmd = { "gopls", "-remote=auto", "serve" }, -- Shared with vim-go's gopls instance
+ settings = {
+ gopls = {
+ buildFlags = { "-tags=integration,unit" }, -- To make packages with those build flags actually work with the LSP
+ semanticTokens = false,
+ gofumpt = true, -- gofumpt formatting, doesn't work
+ },
+ },
+ }
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/groovy.lua b/lua/plugins/lang/groovy.lua
new file mode 100644
index 0000000..1ab404d
--- /dev/null
+++ b/lua/plugins/lang/groovy.lua
@@ -0,0 +1,38 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "groovy" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.diagnostics.npm_groovy_lint,
+ null_ls.builtins.formatting.npm_groovy_lint,
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ local groovyls_path = "/Users/christian.segundo/git/groovy-language-server"
+ local groovyls_app_path = "build/libs/app-all.jar"
+ local groovyls_cmd = { "java", "-jar", groovyls_path .. "/" .. groovyls_app_path }
+ opts.servers.groovyls = { cmd = groovyls_cmd }
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/helm.lua b/lua/plugins/lang/helm.lua
new file mode 100644
index 0000000..6b303ec
--- /dev/null
+++ b/lua/plugins/lang/helm.lua
@@ -0,0 +1,6 @@
+return {
+ {
+ "towolf/vim-helm",
+ ft = { "yaml" },
+ },
+}
diff --git a/lua/plugins/lang/jq.lua b/lua/plugins/lang/jq.lua
new file mode 100644
index 0000000..a9a41c6
--- /dev/null
+++ b/lua/plugins/lang/jq.lua
@@ -0,0 +1,21 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "jq" })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.jqls = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/json.lua b/lua/plugins/lang/json.lua
new file mode 100644
index 0000000..1d2d073
--- /dev/null
+++ b/lua/plugins/lang/json.lua
@@ -0,0 +1,21 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "json" })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.jsonls = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/jsonnet.lua b/lua/plugins/lang/jsonnet.lua
new file mode 100644
index 0000000..dff2e4b
--- /dev/null
+++ b/lua/plugins/lang/jsonnet.lua
@@ -0,0 +1,26 @@
+return {
+ {
+ "google/vim-jsonnet",
+ ft = { "jsonnet" },
+ },
+
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "jsonnet" })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.jsonnet_ls = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/ledger.lua b/lua/plugins/lang/ledger.lua
new file mode 100644
index 0000000..bc265e1
--- /dev/null
+++ b/lua/plugins/lang/ledger.lua
@@ -0,0 +1,25 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "ledger" })
+ end
+ end,
+ },
+ {
+ "ledger/vim-ledger",
+ ft = { "ldg", "ledger", "journal" },
+ },
+ -- TODO
+ --{
+ --"hrsh7th/nvim-cmp",
+ --opts = function(_, opts)
+ --if type(opts) == "table" then
+ --opts.sources = opts.sources or {}
+ --vim.list_extend(opts.sources, { name = "ledger" })
+ --end
+ --end,
+ --},
+}
diff --git a/lua/plugins/lang/lua.lua b/lua/plugins/lang/lua.lua
new file mode 100644
index 0000000..5e08867
--- /dev/null
+++ b/lua/plugins/lang/lua.lua
@@ -0,0 +1,46 @@
+return {
+ { "folke/neodev.nvim", lazy = true, opts = {} },
+
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "lua" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.diagnostics.selene,
+ null_ls.builtins.formatting.stylua,
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.on_attach = opts.on_attach or {}
+ opts.servers.lua_ls = {
+ on_attach = function(client, _)
+ client.server_capabilities.documentFormattingProvider = false
+ client.server_capabilities.documentRangeFormattingProvider = false
+ end,
+ }
+ end
+ end,
+ dependencies = {
+ "folke/neodev.nvim",
+ },
+ },
+}
diff --git a/lua/plugins/lang/markdown.lua b/lua/plugins/lang/markdown.lua
new file mode 100644
index 0000000..cfa6fd2
--- /dev/null
+++ b/lua/plugins/lang/markdown.lua
@@ -0,0 +1,76 @@
+return {
+ {
+ "iamcco/markdown-preview.nvim",
+ build = "cd app && npm install",
+ init = function()
+ vim.g.mkdp_filetypes = { "markdown" }
+ end,
+ ft = { "markdown" },
+ },
+
+ {
+ "mzlogin/vim-markdown-toc",
+ init = function()
+ vim.g.vmt_auto_update_on_save = 0
+ vim.g.vmt_dont_insert_fence = 1
+ end,
+ ft = { "markdown" },
+ },
+
+ {
+ "dbridges/vim-markdown-runner",
+ cmd = { "MarkdownRunner", "MarkdownRunnerInsert" },
+ config = function()
+ vim.api.nvim_set_keymap("n", "<leader>r", "<cmd>MarkdownRunner<CR>", { noremap = false, silent = true })
+ vim.api.nvim_set_keymap("n", "<leader>R", "<cmd>MarkdownRunnerInsert<CR>", { noremap = false, silent = true })
+ end,
+ ft = { "markdown" },
+ },
+
+ {
+ "preservim/vim-markdown",
+ dependencies = { "godlygeek/tabular" },
+ init = function()
+ -- All concealing is handled by Treesitter
+ vim.g.vim_markdown_conceal = 0
+ vim.g.vim_markdown_conceal_code_blocks = 0
+ vim.g.vim_markdown_frontmatter = 0
+ vim.g.vim_markdown_strikethrough = 0
+
+ vim.g.vim_markdown_auto_insert_bullets = 0
+ vim.g.vim_markdown_new_list_item_indent = 0
+ vim.g.vim_markdown_folding_disabled = 1
+ end,
+ ft = { "markdown" },
+ },
+
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, {
+ "markdown_inline",
+ "markdown",
+ })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.diagnostics.markdownlint_cli2,
+ null_ls.builtins.diagnostics.vale,
+ null_ls.builtins.formatting.prettierd.with({
+ filetypes = { "markdown" },
+ }),
+ })
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/nix.lua b/lua/plugins/lang/nix.lua
new file mode 100644
index 0000000..8fed2ce
--- /dev/null
+++ b/lua/plugins/lang/nix.lua
@@ -0,0 +1,36 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "nix" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.code_actions.statix,
+ null_ls.builtins.diagnostics.deadnix,
+ null_ls.builtins.formatting.nixpkgs_fmt,
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.rnix = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/perl.lua b/lua/plugins/lang/perl.lua
new file mode 100644
index 0000000..6ec7220
--- /dev/null
+++ b/lua/plugins/lang/perl.lua
@@ -0,0 +1,36 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "perl" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ -- perlls is supposed to use perltidy for formatting, but it doesn't
+ -- work not sure why.
+ null_ls.builtins.formatting.perltidy,
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.perlls = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/promql.lua b/lua/plugins/lang/promql.lua
new file mode 100644
index 0000000..5589b89
--- /dev/null
+++ b/lua/plugins/lang/promql.lua
@@ -0,0 +1,19 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "promql" })
+ end
+ end,
+ },
+
+ {
+ name = "promqlfmt.nvim",
+ url = "https://git.segundo.io/nvim/promqlfmt.nvim",
+ --dir = "/Users/christian.segundo/git/promql.nvim",
+ --dev = true,
+ cmd = { "Promqlfmt" },
+ },
+}
diff --git a/lua/plugins/lang/swift.lua b/lua/plugins/lang/swift.lua
new file mode 100644
index 0000000..d7f6d33
--- /dev/null
+++ b/lua/plugins/lang/swift.lua
@@ -0,0 +1,35 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "swift" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.diagnostics.swiftlint,
+ null_ls.builtins.formatting.swiftformat,
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.sourcekit = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/terraform.lua b/lua/plugins/lang/terraform.lua
new file mode 100644
index 0000000..e7ccff4
--- /dev/null
+++ b/lua/plugins/lang/terraform.lua
@@ -0,0 +1,40 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, {
+ "hcl",
+ "terraform",
+ })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.diagnostics.tfsec,
+ null_ls.builtins.formatting.terraform_fmt.with({
+ extra_filetypes = { "hcl" },
+ }),
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.terraformls = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/typescript.lua b/lua/plugins/lang/typescript.lua
new file mode 100644
index 0000000..f21c876
--- /dev/null
+++ b/lua/plugins/lang/typescript.lua
@@ -0,0 +1,34 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "typescript", "javascript" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.code_actions.eslint_d,
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.servers.tsserver = {}
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/yaml.lua b/lua/plugins/lang/yaml.lua
new file mode 100644
index 0000000..f4b34aa
--- /dev/null
+++ b/lua/plugins/lang/yaml.lua
@@ -0,0 +1,59 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "yaml" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.diagnostics.yamllint,
+ })
+ end
+ end,
+ },
+
+ --{
+ ----"someone-stole-my-name/yaml-companion.nvim",
+ --dev = true,
+ --dir = "/Users/christian.segundo/git/nvim_plugins/yaml-companion.nvim",
+ --dependencies = {
+ --"nvim-lua/plenary.nvim",
+ --"nvim-telescope/telescope.nvim",
+ --},
+ --init = function()
+ --require("telescope").load_extension("yaml_schema")
+ --end,
+ --ft = { "yaml" },
+ --},
+
+ {
+ "neovim/nvim-lspconfig",
+ --dependencies = { "someone-stole-my-name/yaml-companion.nvim" },
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ --opts.servers.yamlls = require("yaml-companion").setup()
+ end
+ end,
+ },
+
+ {
+ "rafamadriz/friendly-snippets",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.include = opts.include or {}
+ vim.list_extend(opts.include, { "yaml" })
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lang/zig.lua b/lua/plugins/lang/zig.lua
new file mode 100644
index 0000000..1970797
--- /dev/null
+++ b/lua/plugins/lang/zig.lua
@@ -0,0 +1,40 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.ensure_installed = opts.ensure_installed or {}
+ vim.list_extend(opts.ensure_installed, { "zig" })
+ end
+ end,
+ },
+
+ {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.sources = opts.sources or {}
+ local null_ls = require("null-ls")
+ vim.list_extend(opts.sources, {
+ null_ls.builtins.formatting.zigfmt,
+ })
+ end
+ end,
+ },
+
+ {
+ "neovim/nvim-lspconfig",
+ opts = function(_, opts)
+ if type(opts) == "table" then
+ opts.servers = opts.servers or {}
+ opts.on_attach = opts.on_attach or {}
+ opts.servers.zls = {
+ on_attach = function(client, _)
+ client.server_capabilities.documentFormattingProvider = false
+ client.server_capabilities.documentRangeFormattingProvider = false
+ end,
+ }
+ end
+ end,
+ },
+}
diff --git a/lua/plugins/lsp/cmp.lua b/lua/plugins/lsp/cmp.lua
new file mode 100644
index 0000000..004c265
--- /dev/null
+++ b/lua/plugins/lsp/cmp.lua
@@ -0,0 +1,97 @@
+return {
+ "hrsh7th/nvim-cmp",
+ opts = {
+ sources = {
+ { name = "ledger" },
+ {
+ name = "luasnip",
+ option = {
+ show_autosnippets = true,
+ use_show_condition = true,
+ },
+ },
+ { name = "nvim_lsp", priority = 1 },
+ { name = "nvim_lsp_signature_help" },
+ { name = "nvim_lua" },
+ { name = "path" },
+ { name = "emoji" },
+ },
+ formatting = {
+ format = {
+ mode = "symbol_text",
+ maxwidth = 50,
+ before = function(entry, vim_item)
+ return vim_item
+ end,
+ menu = {
+ buffer = "[Buffer]",
+ nvim_lsp = "[LSP]",
+ luasnip = "[LuaSnip]",
+ nvim_lua = "[Lua]",
+ latex_symbols = "[Latex]",
+ },
+ },
+ },
+ },
+ config = function(_, opts)
+ local cmp = require("cmp")
+ local luasnip = require("luasnip")
+ local lspkind = require("lspkind")
+ cmp.setup({
+ sources = opts.sources,
+ --experimental = { ghost_text = { hl_group = "Comment" } },
+ snippet = {
+ expand = function(args)
+ require("luasnip").lsp_expand(args.body)
+ end,
+ },
+ formatting = { format = lspkind.cmp_format(opts.formatting.format) },
+ mapping = {
+ ["<C-p>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item()
+ elseif luasnip.jumpable(-1) then
+ luasnip.jump(-1)
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ ["<C-n>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ ["<C-l>"] = cmp.mapping(function(fallback)
+ if luasnip.choice_active() then
+ luasnip.change_choice(1)
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ ["<C-d>"] = cmp.mapping.scroll_docs(-4),
+ ["<C-f>"] = cmp.mapping.scroll_docs(4),
+ ["<C-Space>"] = cmp.mapping.complete(),
+ ["<C-e>"] = cmp.mapping.close(),
+ ["<CR>"] = cmp.mapping.confirm({
+ behavior = cmp.ConfirmBehavior.Insert,
+ select = true, -- Automatically select first item on CR
+ }),
+ },
+ })
+ end,
+ dependencies = {
+ { "L3MON4D3/LuaSnip" },
+ { "hrsh7th/cmp-emoji" },
+ { "hrsh7th/cmp-nvim-lsp" },
+ { "hrsh7th/cmp-nvim-lsp-signature-help" },
+ { "hrsh7th/cmp-nvim-lua" },
+ { "hrsh7th/cmp-path" },
+ { "onsails/lspkind.nvim" },
+ { "saadparwaiz1/cmp_luasnip" },
+ { "someone-stole-my-name/cmp-ledger" },
+ },
+}
diff --git a/lua/plugins/lsp/config.lua b/lua/plugins/lsp/config.lua
new file mode 100644
index 0000000..579cfec
--- /dev/null
+++ b/lua/plugins/lsp/config.lua
@@ -0,0 +1,45 @@
+return {
+ {
+ "neovim/nvim-lspconfig",
+ event = { "BufReadPre", "BufNewFile" },
+ opts = { servers = {} },
+ config = function(_, opts)
+ local add_hook_after = require("lspconfig.util").add_hook_after
+ local on_attach = function(client, bufnr)
+ require("nvim-navic").attach(client, bufnr)
+ end
+
+ for lsp, lsp_opts in pairs(opts.servers) do
+ lsp_opts = lsp_opts or {}
+ if lsp_opts.on_attach ~= nil then
+ lsp_opts["on_attach"] = add_hook_after(on_attach, lsp_opts.on_attach)
+ end
+ lsp_opts["capabilities"] = require("cmp_nvim_lsp").default_capabilities(
+ lsp_opts.capabilities or {}
+ )
+ require("lspconfig")[lsp].setup(lsp_opts)
+ end
+ end,
+ init = function()
+ vim.diagnostic.config({
+ float = {
+ source = "always",
+ format = function(diagnostic)
+ -- should work for any LSP, see: https://github.com/neovim/neovim/pull/17510
+ if diagnostic.code then
+ return string.format(
+ "(%s) %s",
+ diagnostic.code,
+ diagnostic.message
+ )
+ end
+ return diagnostic.message
+ end,
+ },
+ })
+ end,
+ dependencies = {
+ { "SmiteshP/nvim-navic", opts = { highlight = true } },
+ },
+ },
+}
diff --git a/lua/plugins/lsp/null-ls.lua b/lua/plugins/lsp/null-ls.lua
new file mode 100644
index 0000000..5f71af7
--- /dev/null
+++ b/lua/plugins/lsp/null-ls.lua
@@ -0,0 +1,5 @@
+return {
+ "jose-elias-alvarez/null-ls.nvim",
+ opts = { sources = {}, debug = false },
+ dependencies = { "nvim-lua/plenary.nvim" },
+}
diff --git a/lua/plugins/lsp/trouble.lua b/lua/plugins/lsp/trouble.lua
new file mode 100644
index 0000000..207edb5
--- /dev/null
+++ b/lua/plugins/lsp/trouble.lua
@@ -0,0 +1,9 @@
+return {
+ {
+ "folke/trouble.nvim",
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ config = function()
+ require("trouble").setup({})
+ end,
+ },
+}
diff --git a/lua/snippets/lua.lua b/lua/snippets/lua.lua
new file mode 100644
index 0000000..dbec22a
--- /dev/null
+++ b/lua/snippets/lua.lua
@@ -0,0 +1,3 @@
+return {
+ s("ignore", t("-- foo $0")),
+}
diff --git a/lua/snippets/sh/bash-find.lua b/lua/snippets/sh/bash-find.lua
new file mode 100644
index 0000000..be56beb
--- /dev/null
+++ b/lua/snippets/sh/bash-find.lua
@@ -0,0 +1,32 @@
+local is_bash = function()
+ local shebang = vim.api.nvim_buf_get_lines(0, 0, 1, true) or {}
+ if shebang[1] and string.find(shebang[1], "bash") then
+ return true
+ end
+ return false
+end
+
+return {
+ s(
+ { trig = "find-xargs", dscr = "" },
+ fmt( -- The snippet code actually looks like the equation environment it produces.
+ [[
+ find <> \
+ -type <> \
+ -name '*.<>' \
+ -print0 | xargs -0 -r -P 0 <>
+ ]],
+ {
+ i(1, "."), -- search directory
+ c(2, { t("f"), t("d") }), -- file or directory
+ i(3, "ext"), -- file extension
+ i(4, "echo"), -- xaargs command
+ },
+ { delimiters = "<>" }
+ ),
+ {
+ show_condition = is_bash,
+ condition = is_bash,
+ }
+ ),
+}
diff --git a/lua/snippets/sh/bash-misc.lua b/lua/snippets/sh/bash-misc.lua
new file mode 100644
index 0000000..f3a11eb
--- /dev/null
+++ b/lua/snippets/sh/bash-misc.lua
@@ -0,0 +1,16 @@
+return {
+ s({
+ trig = "no-source",
+ dscr = "Exit with an error if script is being sourced",
+ }, {
+ t({
+ 'if [[ "${0}" != "${BASH_SOURCE[0]}" ]]; then',
+ '\techo "Error: script ${BASH_SOURCE[0]} is not supported to be sourced!"',
+ "\treturn 1",
+ "fi",
+ }),
+ }),
+}
+
+
+
diff --git a/neovim.yaml b/neovim.yaml
new file mode 100644
index 0000000..76f9b9e
--- /dev/null
+++ b/neovim.yaml
@@ -0,0 +1,24 @@
+---
+base: lua51
+globals:
+ vim:
+ any: true
+ assert:
+ args:
+ - type: bool
+ - type: string
+ required: false
+ after_each:
+ args:
+ - type: function
+ before_each:
+ args:
+ - type: function
+ describe:
+ args:
+ - type: string
+ - type: function
+ it:
+ args:
+ - type: string
+ - type: function
diff --git a/plugin/qf-dd.vim b/plugin/qf-dd.vim
new file mode 100644
index 0000000..385c0c7
--- /dev/null
+++ b/plugin/qf-dd.vim
@@ -0,0 +1,30 @@
+" https://stackoverflow.com/questions/42905008/quickfix-list-how-to-add-and-remove-entries
+" When using `dd` in the quickfix list, remove the item from the quickfix list.
+function! RemoveQFItem(mode) range abort
+ let l:qf_list = getqflist()
+
+ " distinguish mode for getting delete index and delete count
+ if a:mode == 'v'
+ let l:del_qf_idx = getpos("'<")[1] - 1
+ let l:del_ct = getpos("'>")[1] - l:del_qf_idx
+ else
+ let l:del_qf_idx = line('.') - 1
+ let l:del_ct = v:count > 1 ? v:count : 1
+ endif
+
+ " delete lines and update quickfix
+ for item in range(l:del_ct)
+ call remove(l:qf_list, l:del_qf_idx)
+ endfor
+ call setqflist(l:qf_list, 'r')
+
+ if len(l:qf_list) > 0
+ execute l:del_qf_idx + 1 . 'cfirst'
+ copen
+ else
+ cclose
+ endif
+endfunction
+
+autocmd FileType qf nmap <buffer> dd :call RemoveQFItem('n')<cr>
+autocmd FileType qf vmap <buffer> dd :call RemoveQFItem('v')<cr>
diff --git a/queries/markdown/highlights.scm b/queries/markdown/highlights.scm
new file mode 100644
index 0000000..5563428
--- /dev/null
+++ b/queries/markdown/highlights.scm
@@ -0,0 +1,94 @@
+;From MDeiml/tree-sitter-markdown & Helix
+;;same as the one shipped in nvim-treesitter without concealing codeblocks
+(setext_heading (paragraph) @text.title.1 (setext_h1_underline) @text.title.1.marker)
+(setext_heading (paragraph) @text.title.2 (setext_h2_underline) @text.title.2.marker)
+
+(atx_heading (atx_h1_marker) @text.title.1.marker (inline) @text.title.1)
+(atx_heading (atx_h2_marker) @text.title.2.marker (inline) @text.title.2)
+(atx_heading (atx_h3_marker) @text.title.3.marker (inline) @text.title.3)
+(atx_heading (atx_h4_marker) @text.title.4.marker (inline) @text.title.4)
+(atx_heading (atx_h5_marker) @text.title.5.marker (inline) @text.title.5)
+(atx_heading (atx_h6_marker) @text.title.6.marker (inline) @text.title.6)
+
+(link_title) @text.literal
+(indented_code_block) @text.literal.block
+((fenced_code_block) @text.literal.block (#set! "priority" 90))
+
+(info_string) @label
+
+(pipe_table_header (pipe_table_cell) @text.title)
+
+(pipe_table_header "|" @punctuation.special)
+(pipe_table_row "|" @punctuation.special)
+(pipe_table_delimiter_row "|" @punctuation.special)
+(pipe_table_delimiter_cell) @punctuation.special
+
+[
+ (fenced_code_block_delimiter)
+] @punctuation.delimiter
+
+;; Conceal backticks
+;(fenced_code_block
+ ;(fenced_code_block_delimiter) @conceal
+ ;(#set! conceal ""))
+;(fenced_code_block
+ ;(info_string (language) @conceal
+ ;(#set! conceal "")))
+
+; NOTE: The following has been commented out due to issues with spaces in the
+; list marker nodes generated by the parser. If those spaces ever get captured
+; by a different node (e.g. block_continuation) we can safely readd these
+; conceals.
+; ;; Conceal bullet points
+; ([(list_marker_plus) (list_marker_star)]
+; @punctuation.special
+; (#offset! @punctuation.special 0 0 0 -1)
+; (#set! conceal "•"))
+; ([(list_marker_plus) (list_marker_star)]
+; @punctuation.special
+; (#any-of? @punctuation.special "+" "*")
+; (#set! conceal "•"))
+; ((list_marker_minus)
+; @punctuation.special
+; (#offset! @punctuation.special 0 0 0 -1)
+; (#set! conceal "—"))
+; ((list_marker_minus)
+; @punctuation.special
+; (#eq? @punctuation.special "-")
+; (#set! conceal "—"))
+
+(code_fence_content) @none
+
+[
+ (link_destination)
+] @text.uri
+
+[
+ (link_label)
+] @text.reference
+
+[
+ (list_marker_plus)
+ (list_marker_minus)
+ (list_marker_star)
+ (list_marker_dot)
+ (list_marker_parenthesis)
+ (thematic_break)
+] @punctuation.special
+
+
+(task_list_marker_unchecked) @text.todo.unchecked
+(task_list_marker_checked) @text.todo.checked
+
+((block_quote) @text.quote (#set! "priority" 90))
+
+[
+ (block_continuation)
+ (block_quote_marker)
+] @punctuation.special
+
+[
+ (backslash_escape)
+] @string.escape
+
+(inline) @spell
diff --git a/selene.toml b/selene.toml
new file mode 100644
index 0000000..032dba6
--- /dev/null
+++ b/selene.toml
@@ -0,0 +1 @@
+std = "neovim"
diff --git a/spell/en.utf-8.add b/spell/en.utf-8.add
new file mode 100644
index 0000000..274c5fc
--- /dev/null
+++ b/spell/en.utf-8.add
@@ -0,0 +1,11 @@
+Linkerd
+CRD
+linkerd
+GKMS
+Grafana
+GCP
+KTE
+Prometheus
+KTEs
+multicluster
+LBs
diff --git a/spell/en.utf-8.add.spl b/spell/en.utf-8.add.spl
new file mode 100644
index 0000000..a77b56c
--- /dev/null
+++ b/spell/en.utf-8.add.spl
Binary files differ
diff --git a/stylua.toml b/stylua.toml
new file mode 100644
index 0000000..87ca309
--- /dev/null
+++ b/stylua.toml
@@ -0,0 +1,5 @@
+column_width = 80
+line_endings = "Unix"
+indent_type = "Tabs"
+indent_width = 2
+quote_style = "AutoPreferDouble"