From 59dd568c8639f3ae48e69fdaf89a22f21d2ee0a1 Mon Sep 17 00:00:00 2001 From: Martin PAUCOT Date: Mon, 29 Jul 2024 11:21:50 +0200 Subject: [PATCH] update --- .gitignore | 8 + .neoconf.json | 15 ++ LICENSE | 201 ++++++++++++++++++++++++++ README.md | 4 + after/queries/markdown/injections.scm | 7 + init.lua | 2 + lazy-lock.json | 55 +++++++ lazyvim.json | 9 ++ lua/config/autocmds.lua | 3 + lua/config/keymaps.lua | 20 +++ lua/config/lazy.lua | 53 +++++++ lua/config/options.lua | 8 + lua/plugins/coding.lua | 50 +++++++ lua/plugins/editor.lua | 81 +++++++++++ lua/plugins/lang/elixir.lua | 3 + lua/plugins/lang/go.lua | 21 +++ lua/plugins/lang/markdown.lua | 24 +++ lua/plugins/lang/php.lua | 61 ++++++++ lua/plugins/lang/rust.lua | 3 + lua/plugins/lang/terraform.lua | 3 + lua/plugins/lang/web.lua | 21 +++ lua/plugins/lsp.lua | 24 +++ lua/plugins/ui.lua | 121 ++++++++++++++++ stylua.toml | 3 + 24 files changed, 800 insertions(+) create mode 100644 .gitignore create mode 100644 .neoconf.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 after/queries/markdown/injections.scm create mode 100644 init.lua create mode 100644 lazy-lock.json create mode 100644 lazyvim.json create mode 100644 lua/config/autocmds.lua create mode 100644 lua/config/keymaps.lua create mode 100644 lua/config/lazy.lua create mode 100644 lua/config/options.lua create mode 100644 lua/plugins/coding.lua create mode 100644 lua/plugins/editor.lua create mode 100644 lua/plugins/lang/elixir.lua create mode 100644 lua/plugins/lang/go.lua create mode 100644 lua/plugins/lang/markdown.lua create mode 100644 lua/plugins/lang/php.lua create mode 100644 lua/plugins/lang/rust.lua create mode 100644 lua/plugins/lang/terraform.lua create mode 100644 lua/plugins/lang/web.lua create mode 100644 lua/plugins/lsp.lua create mode 100644 lua/plugins/ui.lua create mode 100644 stylua.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cc5457a --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +tt.* +.tests +doc/tags +debug +.repro +foo.* +*.log +data diff --git a/.neoconf.json b/.neoconf.json new file mode 100644 index 0000000..7c48087 --- /dev/null +++ b/.neoconf.json @@ -0,0 +1,15 @@ +{ + "neodev": { + "library": { + "enabled": true, + "plugins": true + } + }, + "neoconf": { + "plugins": { + "lua_ls": { + "enabled": true + } + } + } +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..185280b --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# 💤 LazyVim + +A starter template for [LazyVim](https://github.com/LazyVim/LazyVim). +Refer to the [documentation](https://lazyvim.github.io/installation) to get started. diff --git a/after/queries/markdown/injections.scm b/after/queries/markdown/injections.scm new file mode 100644 index 0000000..7a40399 --- /dev/null +++ b/after/queries/markdown/injections.scm @@ -0,0 +1,7 @@ +; extends +((inline) @injection.content + (#lua-match? @injection.content "^%s*import") + (#set! injection.language "typescript")) +((inline) @injection.content + (#lua-match? @injection.content "^%s*export") + (#set! injection.language "typescript")) diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..2514f9e --- /dev/null +++ b/init.lua @@ -0,0 +1,2 @@ +-- bootstrap lazy.nvim, LazyVim and your plugins +require("config.lazy") diff --git a/lazy-lock.json b/lazy-lock.json new file mode 100644 index 0000000..cb4ae84 --- /dev/null +++ b/lazy-lock.json @@ -0,0 +1,55 @@ +{ + "LazyVim": { "branch": "main", "commit": "12818a6cb499456f4903c5d8e68af43753ebc869" }, + "SchemaStore.nvim": { "branch": "main", "commit": "6eb8cee613518fb065d23a81d01eeb42365d59c1" }, + "aura-theme": { "branch": "feat/neovim-port", "commit": "6c0b2244c57b9b8588c1f9ea9f56ef1d41d82e87" }, + "bufferline.nvim": { "branch": "main", "commit": "0b2fd861eee7595015b6561dade52fb060be10c4" }, + "catppuccin": { "branch": "main", "commit": "10eda02ea4faa7d1f94e77a3410a4ae91c25c5f5" }, + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, + "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, + "conform.nvim": { "branch": "master", "commit": "25d48271e3d4404ba017cb92a37d3a681c1ad149" }, + "crates.nvim": { "branch": "main", "commit": "29435f7b99706984b8325cbc6eaff22426a80bbb" }, + "dashboard-nvim": { "branch": "master", "commit": "fabf5feec96185817c732d47d363f34034212685" }, + "dressing.nvim": { "branch": "master", "commit": "6741f1062d3dc6e4755367a7e9b347b553623f04" }, + "flash.nvim": { "branch": "main", "commit": "34c7be146a91fec3555c33fe89c7d643f6ef5cf1" }, + "friendly-snippets": { "branch": "main", "commit": "00ebcaa159e817150bd83bfe2d51fa3b3377d5c4" }, + "gitsigns.nvim": { "branch": "main", "commit": "f074844b60f9e151970fbcdbeb8a2cd52b6ef25a" }, + "grug-far.nvim": { "branch": "main", "commit": "16091184639ca7f2c76734e3a8641d388aebc4e7" }, + "indent-blankline.nvim": { "branch": "master", "commit": "65e20ab94a26d0e14acac5049b8641336819dfc7" }, + "lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" }, + "lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" }, + "lualine.nvim": { "branch": "master", "commit": "544dd1583f9bb27b393f598475c89809c4d5e86b" }, + "luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" }, + "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, + "markdown.nvim": { "branch": "main", "commit": "35f8bd24809e21219c66e2a58f1b9f5d547cc2c3" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "ba9c2f0b93deb48d0a99ae0e8d8dd36f7cc286d6" }, + "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, + "mini.ai": { "branch": "main", "commit": "45587078f323eaf41b9f701bbc04f8d1ab008979" }, + "mini.bufremove": { "branch": "main", "commit": "1ee294a97e091d3cf967974df622c0d887890dc2" }, + "mini.comment": { "branch": "main", "commit": "03c13e37318bdb18481311c0ac1adc9ed731caf1" }, + "mini.icons": { "branch": "main", "commit": "842e51b660c6843662e07506c06812b4ae0e2adb" }, + "mini.pairs": { "branch": "main", "commit": "927d19cbdd0e752ab1c7eed87072e71d2cd6ff51" }, + "neo-tree.nvim": { "branch": "main", "commit": "206241e451c12f78969ff5ae53af45616ffc9b72" }, + "noice.nvim": { "branch": "main", "commit": "448bb9c524a7601035449210838e374a30153172" }, + "nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" }, + "nvim-cmp": { "branch": "main", "commit": "d818fd0624205b34e14888358037fb6f5dc51234" }, + "nvim-lint": { "branch": "master", "commit": "efc6fc83f0772283e064c53a8f9fb5645bde0bc0" }, + "nvim-lspconfig": { "branch": "master", "commit": "0b8165cf95806bc4bb8f745bb0c92021b2ed4b98" }, + "nvim-notify": { "branch": "master", "commit": "d333b6f167900f6d9d42a59005d82919830626bf" }, + "nvim-snippets": { "branch": "main", "commit": "56b4052f71220144689caaa2e5b66222ba5661eb" }, + "nvim-treesitter": { "branch": "master", "commit": "2d5133f67429f82547ea5fad33a0b1e7d4f78a1c" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "34867c69838078df7d6919b130c0541c0b400c47" }, + "nvim-ts-autotag": { "branch": "main", "commit": "dc5e1687ab76ee02e0f11c5ce137f530b36e98b3" }, + "persistence.nvim": { "branch": "main", "commit": "f6aad7dde7fcf54148ccfc5f622c6d5badd0cc3d" }, + "plenary.nvim": { "branch": "master", "commit": "a3e3bc82a3f95c5ed0d7201546d5d2c19b20d683" }, + "rustaceanvim": { "branch": "master", "commit": "047f9c9d8cd2861745eb9de6c1570ee0875aa795" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" }, + "telescope-terraform-doc.nvim": { "branch": "main", "commit": "7ac642765615e6ff164ecfc82eb278aa68d06840" }, + "telescope-terraform.nvim": { "branch": "main", "commit": "072c97023797ca1a874668aaa6ae0b74425335df" }, + "telescope.nvim": { "branch": "master", "commit": "10b8a82b042caf50b78e619d92caf0910211973d" }, + "todo-comments.nvim": { "branch": "main", "commit": "8f45f353dc3649cb9b44cecda96827ea88128584" }, + "tokyonight.nvim": { "branch": "main", "commit": "b0e7c7382a7e8f6456f2a95655983993ffda745e" }, + "trouble.nvim": { "branch": "main", "commit": "6efc446226679fda0547c0fd6a7892fd5f5b15d8" }, + "ts-comments.nvim": { "branch": "main", "commit": "98d7d4dec0af1312d38e288f800bbf6ff562b6ab" }, + "which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" } +} diff --git a/lazyvim.json b/lazyvim.json new file mode 100644 index 0000000..8e6b0ec --- /dev/null +++ b/lazyvim.json @@ -0,0 +1,9 @@ +{ + "extras": [ + + ], + "news": { + "NEWS.md": "6520" + }, + "version": 6 +} \ No newline at end of file diff --git a/lua/config/autocmds.lua b/lua/config/autocmds.lua new file mode 100644 index 0000000..27e9e06 --- /dev/null +++ b/lua/config/autocmds.lua @@ -0,0 +1,3 @@ +-- Autocmds are automatically loaded on the VeryLazy event +-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua +-- Add any additional autocmds here diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua new file mode 100644 index 0000000..1335a4a --- /dev/null +++ b/lua/config/keymaps.lua @@ -0,0 +1,20 @@ +--- Unamp x for bufremove +-- TODO: Remap thoses +vim.keymap.del("n", "xl") +vim.keymap.del("n", "xq") +vim.keymap.del("n", "l") + +-- Indent +vim.keymap.set("v", "", "", ">gv") + +-- Navigate diagnostics +local diagnostic_goto = function(next, severity) + local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev + severity = severity and vim.diagnostic.severity[severity] or nil + return function() + go({ severity = severity }) + end +end +vim.keymap.set("n", "d", diagnostic_goto(true), { desc = "Next Diagnostic" }) +vim.keymap.set("n", "d", diagnostic_goto(false), { desc = "Previous Diagnostic" }) diff --git a/lua/config/lazy.lua b/lua/config/lazy.lua new file mode 100644 index 0000000..6bc4416 --- /dev/null +++ b/lua/config/lazy.lua @@ -0,0 +1,53 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + +if not (vim.uv or vim.loop).fs_stat(lazypath) then + -- bootstrap lazy.nvim + -- stylua: ignore + vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath }) +end +vim.opt.rtp:prepend(vim.env.LAZY or lazypath) + +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.lang.go" }, + { import = "lazyvim.plugins.extras.lang.typescript" }, + { import = "lazyvim.plugins.extras.lang.typescript" }, + -- { import = "lazyvim.plugins.extras.formatting.prettier" }, + -- { import = "lazyvim.plugins.extras.linting.eslint" }, + { import = "lazyvim.plugins.extras.lang.json" }, + { import = "lazyvim.plugins.extras.lang.docker" }, + { import = "lazyvim.plugins.extras.lang.yaml" }, + -- { import = "lazyvim.plugins.extras.ui.mini-animate" }, + -- import/override with your plugins + { import = "plugins" }, + { import = "plugins.lang" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + }, + install = { colorscheme = { "tokyonight", "habamax" } }, + checker = { enabled = true }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, +}) diff --git a/lua/config/options.lua b/lua/config/options.lua new file mode 100644 index 0000000..6a8cfd1 --- /dev/null +++ b/lua/config/options.lua @@ -0,0 +1,8 @@ +vim.o.guifont = "GeistMono Nerd Font:h18" + +vim.filetype.add({ extension = { templ = "templ" } }) +vim.filetype.add({ + extension = { + mdx = "mdx", + }, +}) diff --git a/lua/plugins/coding.lua b/lua/plugins/coding.lua new file mode 100644 index 0000000..b3d520e --- /dev/null +++ b/lua/plugins/coding.lua @@ -0,0 +1,50 @@ +return { + { + "hrsh7th/nvim-cmp", + opts = function(_, opts) + local has_words_before = function() + unpack = unpack or table.unpack + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil + end + + local cmp = require("cmp") + + opts.mapping = vim.tbl_extend("force", opts.mapping, { + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif vim.snippet.active({ direction = 1 }) then + vim.schedule(function() + vim.snippet.jump(1) + end) + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif vim.snippet.active({ direction = -1 }) then + vim.schedule(function() + vim.snippet.jump(-1) + end) + else + fallback() + end + end, { "i", "s" }), + }) + end, + }, + { + "echasnovski/mini.comment", + opts = { + mappings = { + comment_line = "/", + comment_visual = "/", + }, + }, + }, +} diff --git a/lua/plugins/editor.lua b/lua/plugins/editor.lua new file mode 100644 index 0000000..776ef33 --- /dev/null +++ b/lua/plugins/editor.lua @@ -0,0 +1,81 @@ +return { + { + "nvim-neo-tree/neo-tree.nvim", + opts = function(_, opts) + opts.filesystem.bind_to_cwd = true + end, + keys = { + { + "e", + function() + if vim.bo.filetype == "neo-tree" then + vim.cmd.wincmd("p") + else + vim.cmd.Neotree("focus") + end + end, + desc = "Focus explorer", + }, + { + "o", + "Neotree toggle", + desc = "Toggle explorer", + }, + }, + }, + { + "echasnovski/mini.bufremove", + keys = { + { + "x", + function() + local bd = require("mini.bufremove").delete + if vim.bo.modified then + local choice = vim.fn.confirm(("Save changes to %q?"):format(vim.fn.bufname()), "&Yes\n&No\n&Cancel") + if choice == 1 then -- Yes + vim.cmd.write() + bd(0) + elseif choice == 2 then -- No + bd(0, true) + end + else + bd(0) + end + end, + desc = "Delete Buffer", + }, + }, + }, + { + "nvim-telescope/telescope.nvim", + dependencies = { + "nvim-telescope/telescope-fzf-native.nvim", + build = "make", + config = function() + require("telescope").load_extension("fzf") + end, + }, + keys = { + { "fw", "Telescope live_grep", desc = "Live grep" }, + { "ff", "Telescope find_files", desc = "Find files" }, + { "/", false }, + }, + }, + { + "folke/todo-comments.nvim", + keys = { + { "xt", false }, + { "xT", false }, + }, + }, + -- TODO: Remap those + { + "folke/trouble.nvim", + keys = { + { "xx", false }, + { "xX", false }, + { "xL", false }, + { "xQ", false }, + }, + }, +} diff --git a/lua/plugins/lang/elixir.lua b/lua/plugins/lang/elixir.lua new file mode 100644 index 0000000..ce249aa --- /dev/null +++ b/lua/plugins/lang/elixir.lua @@ -0,0 +1,3 @@ +return { + { import = "lazyvim.plugins.extras.lang.elixir" }, +} diff --git a/lua/plugins/lang/go.lua b/lua/plugins/lang/go.lua new file mode 100644 index 0000000..1587c4c --- /dev/null +++ b/lua/plugins/lang/go.lua @@ -0,0 +1,21 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + if type(opts.ensure_installed) == "table" then + vim.list_extend(opts.ensure_installed, { "css", "scss", "html" }) + end + end, + }, + { + + "neovim/nvim-lspconfig", + opts = { + servers = { + ccls = {}, + cmake = {}, + templ = {}, + }, + }, + }, +} diff --git a/lua/plugins/lang/markdown.lua b/lua/plugins/lang/markdown.lua new file mode 100644 index 0000000..6d876c7 --- /dev/null +++ b/lua/plugins/lang/markdown.lua @@ -0,0 +1,24 @@ +return { + { import = "lazyvim.plugins.extras.lang.markdown" }, + { + "williamboman/mason.nvim", + opts = function(_, opts) + vim.list_extend(opts.ensure_installed, {}) + end, + }, + { + "nvim-treesitter/nvim-treesitter", + config = function(_, opts) + require("nvim-treesitter.configs").setup(opts) + vim.treesitter.language.register("markdown", "mdx") + end, + }, + { + "neovim/nvim-lspconfig", + opts = { + servers = { + mdx_analyzer = {}, + }, + }, + }, +} diff --git a/lua/plugins/lang/php.lua b/lua/plugins/lang/php.lua new file mode 100644 index 0000000..67e9fa4 --- /dev/null +++ b/lua/plugins/lang/php.lua @@ -0,0 +1,61 @@ +return { + { + "williamboman/mason.nvim", + opts = function(_, opts) + vim.list_extend(opts.ensure_installed, { + "phpmd", + "phpstan", + "php-debug-adapter", + }) + end, + }, + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + if type(opts.ensure_installed) == "table" then + vim.list_extend(opts.ensure_installed, { "php", "phpdoc", "twig" }) + end + end, + }, + { + "neovim/nvim-lspconfig", + opts = { + servers = { + intelephense = {}, + }, + }, + }, + { + "stevearc/conform.nvim", + opts = { + log_level = vim.log.levels.DEBUG, + php_cs_fixer = { + command = "vendor/bin/php-cs-fixer", + args = { "--no-interaction", "fix", "$FILENAME" }, + env = { + PHP_CS_FIXER_IGNORE_ENV = "1", + }, + }, + formatters_by_ft = { + php = { "php_cs_fixer", "pint" }, + -- javascript = { "biome-check" }, + -- javascriptreact = { "biome-check" }, + -- typescript = { "biome-check" }, + -- typescriptreact = { "biome-check" }, + -- json = { "biome-check" }, + -- jsonc = { "biome-check" }, + }, + }, + }, + { + "mfussenegger/nvim-lint", + opts = { + phpmd = { + args = { "-", "json", "phpmd.xml" }, + }, + linters_by_ft = { + -- php = { "phpmd", "phpstan" }, + }, + }, + }, +} diff --git a/lua/plugins/lang/rust.lua b/lua/plugins/lang/rust.lua new file mode 100644 index 0000000..696f66d --- /dev/null +++ b/lua/plugins/lang/rust.lua @@ -0,0 +1,3 @@ +return { + { import = "lazyvim.plugins.extras.lang.rust" }, +} diff --git a/lua/plugins/lang/terraform.lua b/lua/plugins/lang/terraform.lua new file mode 100644 index 0000000..d208032 --- /dev/null +++ b/lua/plugins/lang/terraform.lua @@ -0,0 +1,3 @@ +return { + { import = "lazyvim.plugins.extras.lang.terraform" }, +} diff --git a/lua/plugins/lang/web.lua b/lua/plugins/lang/web.lua new file mode 100644 index 0000000..cd9ec97 --- /dev/null +++ b/lua/plugins/lang/web.lua @@ -0,0 +1,21 @@ +return { + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + if type(opts.ensure_installed) == "table" then + vim.list_extend(opts.ensure_installed, { "css", "scss", "html" }) + end + end, + }, + { + + "neovim/nvim-lspconfig", + opts = { + servers = { + cssls = {}, + html = {}, + tailwindcss = {}, + }, + }, + }, +} diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua new file mode 100644 index 0000000..7ae7095 --- /dev/null +++ b/lua/plugins/lsp.lua @@ -0,0 +1,24 @@ +return { + { + "neovim/nvim-lspconfig", + version = "*", + init = function() + local keys = require("lazyvim.plugins.lsp.keymaps").get() + keys[#keys + 1] = { "la", vim.lsp.buf.code_action, desc = "Code Action" } + keys[#keys + 1] = { "lr", vim.lsp.buf.rename, desc = "Rename", has = "rename" } + end, + opts = { + servers = { + biome = {}, + }, + inlay_hints = { + enabled = false, + }, + setup = { + rust_analyzer = function() + return true + end, + }, + }, + }, +} diff --git a/lua/plugins/ui.lua b/lua/plugins/ui.lua new file mode 100644 index 0000000..6c9673d --- /dev/null +++ b/lua/plugins/ui.lua @@ -0,0 +1,121 @@ +return { + { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, + opts = { + color_overrides = { + -- Carburetor + mocha = { + rosewater = "#ffd7d9", + flamingo = "#ffb3b8", + pink = "#ff7eb6", + mauve = "#d4bbff", + red = "#fa4d56", + maroon = "#ff8389", + peach = "#ff832b", + yellow = "#fddc69", + green = "#42be65", + teal = "#3ddbd9", + sky = "#82cfff", + sapphire = "#78a9ff", + blue = "#4589ff", + lavender = "#be95ff", + text = "#f4f4f4", + subtext1 = "#e0e0e0", + subtext0 = "#c6c6c6", + overlay2 = "#a8a8a8", + overlay1 = "#8d8d8d", + overlay0 = "#6f6f6f", + surface2 = "#525252", + surface1 = "#393939", + surface0 = "#262626", + base = "#161616", + mantle = "#0b0b0b", + crust = "#000000", + }, + -- Carburetor Cool + macchiato = { + rosewater = "#ffd7d9", + flamingo = "#ffb3b8", + pink = "#ff7eb6", + red = "#fa4d56", + maroon = "#ff8389", + peach = "#ff832b", + yellow = "#fddc69", + green = "#42be65", + teal = "#3ddbd9", + sky = "#82cfff", + sapphire = "#78a9ff", + blue = "#4589ff", + lavender = "#be95ff", + mauve = "#d4bbff", + text = "#f2f4f8", + subtext1 = "#dde1E6", + subtext0 = "#c1c7cd", + overlay2 = "#a2a9b0", + overlay1 = "#878d96", + overlay0 = "#697077", + surface2 = "#4d5358", + surface1 = "#343a3f", + surface0 = "#21272a", + base = "#121619", + mantle = "#090b0c", + crust = "#000000", + }, + -- Carburetor Warm + frappe = { + rosewater = "#ffd7d9", + flamingo = "#ffb3b8", + pink = "#ff7eb6", + mauve = "#d4bbff", + red = "#fa4d56", + maroon = "#ff8389", + peach = "#ff832b", + yellow = "#fddc69", + green = "#42be65", + teal = "#3ddbd9", + sky = "#82cfff", + sapphire = "#78a9ff", + blue = "#4589ff", + lavender = "#be95ff", + text = "#f7f3f2", + subtext1 = "#e5e0df", + subtext0 = "#cac5c4", + overlay2 = "#ada8a8", + overlay1 = "#8f8b8b", + overlay0 = "#726e6e", + surface2 = "#565151", + surface1 = "#3c3838", + surface0 = "#272525", + base = "#171414", + mantle = "#0b0a0a", + crust = "#000000", + }, + }, + }, + }, + { "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" }, + { + "baliestri/aura-theme", + lazy = false, + priority = 1000, + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/packages/neovim") + vim.cmd([[colorscheme aura-dark]]) + end, + }, + -- { + -- "LazyVim/LazyVim", + -- opts = { + -- colorscheme = "aura-dark", + -- }, + -- }, + { + "akinsho/bufferline.nvim", + keys = { + { "", "BufferLineCyclePrev", desc = "Previous buffer" }, + { "", "BufferLineCycleNext", desc = "Next buffer" }, + }, + }, +} diff --git a/stylua.toml b/stylua.toml new file mode 100644 index 0000000..5d6c50d --- /dev/null +++ b/stylua.toml @@ -0,0 +1,3 @@ +indent_type = "Spaces" +indent_width = 2 +column_width = 120 \ No newline at end of file