diff options
Diffstat (limited to 'lua')
47 files changed, 1471 insertions, 0 deletions
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", + }), + }), +} + + + |