diff options
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 Binary files differnew file mode 100644 index 0000000..a77b56c --- /dev/null +++ b/spell/en.utf-8.add.spl 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" |