From 9fb925b38cf297f0f98903fc83664abbbece2c2f Mon Sep 17 00:00:00 2001 From: Ismo Vuorinen Date: Sun, 27 Aug 2023 15:12:22 +0300 Subject: [PATCH] Nvim restart (#9) * chore(nvim): remove astronvim and configs * feat(nvim): new, custom nvim configuration --- .gitmodules | 6 - .ignore | 7 +- .stylua.toml | 5 +- config/astronvim/lua/user/.luacheckrc | 18 - config/astronvim/lua/user/.neoconf.json | 20 - config/astronvim/lua/user/LICENSE | 674 ------------------ .../astronvim/lua/user/highlights/duskfox.lua | 3 - config/astronvim/lua/user/highlights/init.lua | 3 - config/astronvim/lua/user/init.lua | 121 ---- config/astronvim/lua/user/mappings.lua | 52 -- config/astronvim/lua/user/options.lua | 40 -- .../astronvim/lua/user/plugins/community.lua | 63 -- config/astronvim/lua/user/plugins/core.lua | 115 --- config/astronvim/lua/user/plugins/mason.lua | 44 -- config/astronvim/lua/user/plugins/null-ls.lua | 45 -- .../astronvim/lua/user/plugins/treesitter.lua | 33 - config/astronvim/lua/user/plugins/user.lua | 107 --- config/nvim | 1 - config/nvim/.gitignore | 6 + config/nvim/.stylua.toml | 10 + config/nvim/after/ftplugin/lua.lua | 1 + config/nvim/init.lua | 30 + config/nvim/lua/autocmd.lua | 31 + config/nvim/lua/filetype.lua | 77 ++ config/nvim/lua/keymappings.lua | 279 ++++++++ config/nvim/lua/lsp.lua | 146 ++++ config/nvim/lua/lsp/bash.lua | 8 + config/nvim/lua/lsp/eslint_d_prettierd.lua | 25 + config/nvim/lua/lsp/html.lua | 1 + config/nvim/lua/lsp/json.lua | 9 + config/nvim/lua/lsp/python.lua | 1 + config/nvim/lua/lsp/rome.lua | 31 + config/nvim/lua/lsp/scss.lua | 22 + config/nvim/lua/lsp/typescript.lua | 6 + config/nvim/lua/lsp_signature.lua | 59 ++ config/nvim/lua/options.lua | 153 ++++ config/nvim/lua/plugin-manager.lua | 21 + config/nvim/lua/plugins/barbecue.lua | 90 +++ config/nvim/lua/plugins/close-buffers.lua | 1 + config/nvim/lua/plugins/commentbox.lua | 4 + config/nvim/lua/plugins/fold-preview.lua | 29 + config/nvim/lua/plugins/gitsigns.lua | 87 +++ config/nvim/lua/plugins/harpoon.lua | 1 + config/nvim/lua/plugins/incline.lua | 70 ++ config/nvim/lua/plugins/lazy.lua | 25 + config/nvim/lua/plugins/legendary.lua | 9 + config/nvim/lua/plugins/marks.lua | 36 + config/nvim/lua/plugins/mini.lua | 131 ++++ config/nvim/lua/plugins/neo-tree.lua | 415 +++++++++++ config/nvim/lua/plugins/neogen.lua | 20 + config/nvim/lua/plugins/null-ls.lua | 56 ++ config/nvim/lua/plugins/nvim-cmp.lua | 257 +++++++ config/nvim/lua/plugins/nvim-dap.lua | 92 +++ config/nvim/lua/plugins/nvim-lspconfig.lua | 81 +++ config/nvim/lua/plugins/nvim-origami.lua | 9 + config/nvim/lua/plugins/nvim-regexplainer.lua | 5 + config/nvim/lua/plugins/nvim-surround.lua | 17 + .../lua/plugins/nvim-treesitter-context.lua | 9 + config/nvim/lua/plugins/nvim-treesitter.lua | 110 +++ config/nvim/lua/plugins/pretty-fold.lua | 55 ++ config/nvim/lua/plugins/project.lua | 14 + config/nvim/lua/plugins/refactoring-nvim.lua | 97 +++ config/nvim/lua/plugins/smartcolumn.lua | 7 + config/nvim/lua/plugins/stickybuf.lua | 1 + config/nvim/lua/plugins/tabnine.lua | 8 + config/nvim/lua/plugins/telescope-nvim.lua | 132 ++++ config/nvim/lua/plugins/theme.lua | 68 ++ config/nvim/lua/plugins/trouble.lua | 56 ++ config/nvim/lua/plugins/twilight.lua | 24 + config/nvim/lua/plugins/vim-hexokinase.lua | 54 ++ config/nvim/lua/plugins/vim-matchup.lua | 23 + config/nvim/lua/plugins/vim-sleuth.lua | 1 + config/nvim/lua/plugins/wakatime.lua | 5 + config/nvim/lua/plugins/which-key.lua | 15 + config/nvim/spell/en.utf-8.add | 3 + 75 files changed, 3041 insertions(+), 1349 deletions(-) delete mode 100644 config/astronvim/lua/user/.luacheckrc delete mode 100644 config/astronvim/lua/user/.neoconf.json delete mode 100644 config/astronvim/lua/user/LICENSE delete mode 100644 config/astronvim/lua/user/highlights/duskfox.lua delete mode 100644 config/astronvim/lua/user/highlights/init.lua delete mode 100644 config/astronvim/lua/user/init.lua delete mode 100644 config/astronvim/lua/user/mappings.lua delete mode 100644 config/astronvim/lua/user/options.lua delete mode 100644 config/astronvim/lua/user/plugins/community.lua delete mode 100644 config/astronvim/lua/user/plugins/core.lua delete mode 100644 config/astronvim/lua/user/plugins/mason.lua delete mode 100644 config/astronvim/lua/user/plugins/null-ls.lua delete mode 100644 config/astronvim/lua/user/plugins/treesitter.lua delete mode 100644 config/astronvim/lua/user/plugins/user.lua delete mode 160000 config/nvim create mode 100644 config/nvim/.gitignore create mode 100644 config/nvim/.stylua.toml create mode 100644 config/nvim/after/ftplugin/lua.lua create mode 100644 config/nvim/init.lua create mode 100644 config/nvim/lua/autocmd.lua create mode 100644 config/nvim/lua/filetype.lua create mode 100644 config/nvim/lua/keymappings.lua create mode 100644 config/nvim/lua/lsp.lua create mode 100644 config/nvim/lua/lsp/bash.lua create mode 100644 config/nvim/lua/lsp/eslint_d_prettierd.lua create mode 100644 config/nvim/lua/lsp/html.lua create mode 100644 config/nvim/lua/lsp/json.lua create mode 100644 config/nvim/lua/lsp/python.lua create mode 100644 config/nvim/lua/lsp/rome.lua create mode 100644 config/nvim/lua/lsp/scss.lua create mode 100644 config/nvim/lua/lsp/typescript.lua create mode 100644 config/nvim/lua/lsp_signature.lua create mode 100644 config/nvim/lua/options.lua create mode 100644 config/nvim/lua/plugin-manager.lua create mode 100644 config/nvim/lua/plugins/barbecue.lua create mode 100644 config/nvim/lua/plugins/close-buffers.lua create mode 100644 config/nvim/lua/plugins/commentbox.lua create mode 100644 config/nvim/lua/plugins/fold-preview.lua create mode 100644 config/nvim/lua/plugins/gitsigns.lua create mode 100644 config/nvim/lua/plugins/harpoon.lua create mode 100644 config/nvim/lua/plugins/incline.lua create mode 100644 config/nvim/lua/plugins/lazy.lua create mode 100644 config/nvim/lua/plugins/legendary.lua create mode 100644 config/nvim/lua/plugins/marks.lua create mode 100644 config/nvim/lua/plugins/mini.lua create mode 100644 config/nvim/lua/plugins/neo-tree.lua create mode 100644 config/nvim/lua/plugins/neogen.lua create mode 100644 config/nvim/lua/plugins/null-ls.lua create mode 100644 config/nvim/lua/plugins/nvim-cmp.lua create mode 100644 config/nvim/lua/plugins/nvim-dap.lua create mode 100644 config/nvim/lua/plugins/nvim-lspconfig.lua create mode 100644 config/nvim/lua/plugins/nvim-origami.lua create mode 100644 config/nvim/lua/plugins/nvim-regexplainer.lua create mode 100644 config/nvim/lua/plugins/nvim-surround.lua create mode 100644 config/nvim/lua/plugins/nvim-treesitter-context.lua create mode 100644 config/nvim/lua/plugins/nvim-treesitter.lua create mode 100644 config/nvim/lua/plugins/pretty-fold.lua create mode 100644 config/nvim/lua/plugins/project.lua create mode 100644 config/nvim/lua/plugins/refactoring-nvim.lua create mode 100644 config/nvim/lua/plugins/smartcolumn.lua create mode 100644 config/nvim/lua/plugins/stickybuf.lua create mode 100644 config/nvim/lua/plugins/tabnine.lua create mode 100644 config/nvim/lua/plugins/telescope-nvim.lua create mode 100644 config/nvim/lua/plugins/theme.lua create mode 100644 config/nvim/lua/plugins/trouble.lua create mode 100644 config/nvim/lua/plugins/twilight.lua create mode 100644 config/nvim/lua/plugins/vim-hexokinase.lua create mode 100644 config/nvim/lua/plugins/vim-matchup.lua create mode 100644 config/nvim/lua/plugins/vim-sleuth.lua create mode 100644 config/nvim/lua/plugins/wakatime.lua create mode 100644 config/nvim/lua/plugins/which-key.lua create mode 100644 config/nvim/spell/en.utf-8.add diff --git a/.gitmodules b/.gitmodules index b99ad29..0335ff9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,12 +14,6 @@ url = https://gitlab.com/gnfzdz/dotbot-include.git ignore = dirty -[submodule "config/nvim"] - path = config/nvim - url = https://github.com/AstroNvim/AstroNvim.git - ignore = dirty - shallow = true - [submodule "cheat-community"] path = config/cheat/cheatsheets/community url = https://github.com/cheat/cheatsheets.git diff --git a/.ignore b/.ignore index ca7ec27..8611466 100644 --- a/.ignore +++ b/.ignore @@ -1,5 +1,6 @@ +.git/** config/cheat/cheatsheets/community/** -config/tmux/** -config/nvim/** -tools/** +tools/dotbot/** +tools/dotbot-brew/** +tools/dotbot-include/** diff --git a/.stylua.toml b/.stylua.toml index bfcffff..35de157 100644 --- a/.stylua.toml +++ b/.stylua.toml @@ -3,5 +3,8 @@ line_endings = "Unix" indent_type = "Spaces" indent_width = 2 quote_style = "AutoPreferDouble" -call_parentheses = "None" +call_parentheses = "Always" collapse_simple_statement = "Always" + +[sort_requires] +enabled = true diff --git a/config/astronvim/lua/user/.luacheckrc b/config/astronvim/lua/user/.luacheckrc deleted file mode 100644 index d1113eb..0000000 --- a/config/astronvim/lua/user/.luacheckrc +++ /dev/null @@ -1,18 +0,0 @@ --- Global objects -globals = { - "astronvim", - "astronvim_installation", - "vim", - "bit", -} - --- Rerun tests only if their modification time changed -cache = true - --- Don't report unused self arguments of methods -self = false - -ignore = { - "631", -- max_line_length - "212/_.*", -- unused argument, for vars with "_" prefix -} diff --git a/config/astronvim/lua/user/.neoconf.json b/config/astronvim/lua/user/.neoconf.json deleted file mode 100644 index 2d7a81f..0000000 --- a/config/astronvim/lua/user/.neoconf.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "neodev": { - "library": { - "enabled": true, - "plugins": true - } - }, - "neoconf": { - "plugins": { - "lua_ls": { - "enabled": true - } - } - }, - "lspconfig": { - "lua_ls": { - "Lua.format.enable": false - } - } -} diff --git a/config/astronvim/lua/user/LICENSE b/config/astronvim/lua/user/LICENSE deleted file mode 100644 index f288702..0000000 --- a/config/astronvim/lua/user/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/config/astronvim/lua/user/highlights/duskfox.lua b/config/astronvim/lua/user/highlights/duskfox.lua deleted file mode 100644 index 31318ee..0000000 --- a/config/astronvim/lua/user/highlights/duskfox.lua +++ /dev/null @@ -1,3 +0,0 @@ -return { -- a table of overrides/changes to the duskfox theme - Normal = { bg = "#000000" }, -} diff --git a/config/astronvim/lua/user/highlights/init.lua b/config/astronvim/lua/user/highlights/init.lua deleted file mode 100644 index f7e055b..0000000 --- a/config/astronvim/lua/user/highlights/init.lua +++ /dev/null @@ -1,3 +0,0 @@ -return { -- this table overrides highlights in all themes - -- Normal = { bg = "#000000" }, -} diff --git a/config/astronvim/lua/user/init.lua b/config/astronvim/lua/user/init.lua deleted file mode 100644 index 829b4a2..0000000 --- a/config/astronvim/lua/user/init.lua +++ /dev/null @@ -1,121 +0,0 @@ --- luacheck: globals vim -return { - -- Configure AstroNvim updates - updater = { - remote = "origin", -- remote to use - channel = "stable", -- "stable" or "nightly" - version = "latest", -- "latest", tag name, or regex search like "v1.*" to only do updates before v2 (STABLE ONLY) - branch = "nightly", -- branch name (NIGHTLY ONLY) - commit = nil, -- commit hash (NIGHTLY ONLY) - pin_plugins = nil, -- nil, true, false (nil will pin plugins on stable only) - skip_prompts = false, -- skip prompts about breaking changes - show_changelog = true, -- show the changelog after performing an update - auto_quit = true, -- automatically quit the current session after a successful update - remotes = { -- easily add new remotes to track - -- ["remote_name"] = "https://remote_url.come/repo.git", -- full remote url - -- ["remote2"] = "github_user/repo", -- GitHub user/repo shortcut, - -- ["remote3"] = "github_user", -- GitHub user assume AstroNvim fork - }, - }, - -- Set colorscheme to use - colorscheme = "catppuccin", -- or astrondark - -- Diagnostics configuration (for vim.diagnostics.config({...})) - -- when diagnostics are on - diagnostics = { - virtual_text = false, - underline = true, - }, - lsp = { - -- customize lsp formatting options - formatting = { - -- control auto formatting on save - format_on_save = { - -- enable or disable format on save globally - enabled = true, - -- enable format on save for specified filetypes only - allow_filetypes = { - -- "go", - }, - -- disable format on save for specified filetypes - ignore_filetypes = { - -- "python", - }, - }, - -- disable formatting capabilities for the listed language servers - disabled = { - -- "sumneko_lua", - }, - -- default format timeout - timeout_ms = 1000, - -- -- fully override the default formatting function - -- filter = function(client) -- fully override the default formatting function - -- return true - -- end - }, - -- enable servers that you already have installed without mason - servers = { - -- "pyright" - }, - }, - -- Configure require("lazy").setup() options - lazy = { - defaults = { lazy = true }, - performance = { - rtp = { - -- customize default disabled vim plugins - disabled_plugins = { - "tohtml", - "gzip", - "matchit", - "zipPlugin", - "netrwPlugin", - "tarPlugin", - "matchparen", - }, - }, - }, - }, - -- This function is run last and is a good place to configuring - -- augroups/autocommands and custom filetypes also this just pure lua so - -- anything that doesn't fit in the normal config locations above can go here - polish = function() - local function yaml_ft(path, bufnr) - -- get content of buffer as string - local content = vim.filetype.getlines(bufnr) - if type(content) == "table" then content = table.concat(content, "\n") end - - -- check if file is in roles, tasks, or handlers folder - local path_regex = vim.regex "(tasks\\|roles\\|handlers)/" - if path_regex and path_regex:match_str(path) then return "yaml.ansible" end - -- check for known ansible playbook text and if found, return yaml.ansible - local regex = vim.regex "hosts:\\|tasks:" - if regex and regex:match_str(content) then return "yaml.ansible" end - - -- return yaml if nothing else - return "yaml" - end - - vim.filetype.add { - extension = { - yml = yaml_ft, - yaml = yaml_ft, - }, - } - - require("notify").setup({ - background_colour = "#000000", - }) - -- Set up custom filetypes - -- vim.filetype.add { - -- extension = { - -- foo = "fooscript", - -- }, - -- filename = { - -- ["Foofile"] = "fooscript", - -- }, - -- pattern = { - -- ["~/%.config/foo/.*"] = "fooscript", - -- }, - -- } - end, -} diff --git a/config/astronvim/lua/user/mappings.lua b/config/astronvim/lua/user/mappings.lua deleted file mode 100644 index 60f88ff..0000000 --- a/config/astronvim/lua/user/mappings.lua +++ /dev/null @@ -1,52 +0,0 @@ --- Mapping data with "desc" stored directly by vim.keymap.set(). --- --- Please use this mappings table to set keyboard mapping since this is the --- lower level configuration and more robust one. (which-key will --- automatically pick-up stored data by this setting.) -return { - -- first key is the mode - n = { - -- second key is the lefthand side of the map - -- mappings seen under group name "Buffer" - ["bn"] = { "tabnew", desc = "New tab" }, - ["bD"] = { - function() - require("astronvim.utils.status").heirline.buffer_picker( - function(bufnr) require("astronvim.utils.buffer").close(bufnr) end - ) - end, - desc = "Pick to close", - }, - -- tables with the `name` key will be registered with which-key - -- if it's installed this is useful for naming menus - ["b"] = { name = "Buffers" }, - -- quick save (change description) - [""] = { ":w!", desc = "Save File" }, - ["P"] = { - ":Telescope projects", - desc = "Update Projects listing" - }, - -- close_buffers - ['bch'] = { - "lua require('close_buffers').delete({type = 'hidden'})", - desc = "Delete hidden buffers" - }, - -- comment-box - ["bb"] = { - "lua require('comment-box').lbox()", - desc = "Left aligned fixed size box with left aligned text" - }, - ["bc"] = { - "lua require('comment-box').ccbox()", - desc = "Centered adapted box with centered text" - }, - ["bl"] = { - "lua require('comment-box').cline()", - desc = "Centered line" - }, - }, - t = { - -- setting a mapping to false will disable it - -- [""] = false, - }, -} diff --git a/config/astronvim/lua/user/options.lua b/config/astronvim/lua/user/options.lua deleted file mode 100644 index e67b2c3..0000000 --- a/config/astronvim/lua/user/options.lua +++ /dev/null @@ -1,40 +0,0 @@ --- set vim options here (vim.. = value) -return { - opt = { - -- set to true or false etc. - relativenumber = true, -- sets vim.opt.relativenumber - number = true, -- sets vim.opt.number - spell = false, -- sets vim.opt.spell - signcolumn = "auto", -- sets vim.opt.signcolumn to auto - wrap = true, -- sets vim.opt.wrap - }, - g = { - -- sets vim.g.mapleader - mapleader = " ", - -- enable or disable auto formatting at start (lsp.formatting.format_on_save must be enabled) - autoformat_enabled = true, - -- enable completion at start - cmp_enabled = true, - -- enable autopairs at start - autopairs_enabled = true, - -- set the visibility of diagnostics in the UI - -- (0=off, 1=only show in status line, 2=virtual text off, 3=all on) - diagnostics_mode = 3, - -- disable icons in the UI (disable if no nerd font is available, - -- requires :PackerSync after changing) - icons_enabled = true, - -- disable notifications when toggling UI elements - ui_notifications_enabled = true, - -- enable experimental resession.nvim session management (will be default in AstroNvim v4) - resession_enabled = false, - }, -} --- If you need more control, you can use the function()...end notation --- return function(local_vim) --- local_vim.opt.relativenumber = true --- local_vim.g.mapleader = " " --- local_vim.opt.whichwrap = vim.opt.whichwrap - { 'b', 's' } -- removing option from list --- local_vim.opt.shortmess = vim.opt.shortmess + { I = true } -- add to option list --- --- return local_vim --- end diff --git a/config/astronvim/lua/user/plugins/community.lua b/config/astronvim/lua/user/plugins/community.lua deleted file mode 100644 index 1d38f5c..0000000 --- a/config/astronvim/lua/user/plugins/community.lua +++ /dev/null @@ -1,63 +0,0 @@ -return { - -- Add the community repository of plugin specifications - "AstroNvim/astrocommunity", - -- example of imporing a plugin, comment out to use it or add your own. - -- available plugins can be found at - -- https://github.com/AstroNvim/astrocommunity - { - import = "astrocommunity.colorscheme.catppuccin", - opts = { - flavour = "mocha", - transparent_background = true, - dim_inactive = { - enabled = true, - shade = "dark", - percentage = 0.15, - }, - } - }, - -- { import = "astrocommunity.completion.copilot-lua-cmp" }, - { import = "astrocommunity.completion.tabnine-nvim" }, - { import = "astrocommunity.bars-and-lines.smartcolumn-nvim" }, - { - "m4xshen/smartcolumn.nvim", - opts = { - colorcolumn = { "80", "100", "120" }, - disabled_filetypes = { "help", "text", "markdown", "json" }, - }, - }, - { import = "astrocommunity.diagnostics.trouble-nvim" }, - { - "folke/trouble.nvim", - opts = { - auto_open = true, - position = "bottom" - } - }, - { import = "astrocommunity.debugging.telescope-dap-nvim" }, - { import = "astrocommunity.editing-support.comment-box-nvim" }, - { import = "astrocommunity.editing-support.refactoring-nvim" }, - { import = "astrocommunity.editing-support.neogen" }, - { import = "astrocommunity.editing-support.nvim-regexplainer" }, - { import = "astrocommunity.editing-support.todo-comments-nvim" }, - { import = "astrocommunity.indent.mini-indentscope" }, - { import = "astrocommunity.lsp.lsp-signature-nvim" }, - { import = "astrocommunity.motion.harpoon" }, - { import = "astrocommunity.pack.ansible" }, - { import = "astrocommunity.pack.bash" }, - { import = "astrocommunity.pack.docker" }, - { import = "astrocommunity.pack.go" }, - { import = "astrocommunity.pack.html-css" }, - { import = "astrocommunity.pack.json" }, - { import = "astrocommunity.pack.markdown" }, - { import = "astrocommunity.pack.php" }, - { import = "astrocommunity.pack.typescript" }, - { import = "astrocommunity.pack.vue" }, - { import = "astrocommunity.pack.yaml" }, - { import = "astrocommunity.project.nvim-spectre" }, - { import = "astrocommunity.project.project-nvim" }, - { import = "astrocommunity.test.neotest" }, - { import = "astrocommunity.utility.neodim" }, - { import = "astrocommunity.utility.transparent-nvim" }, -} - diff --git a/config/astronvim/lua/user/plugins/core.lua b/config/astronvim/lua/user/plugins/core.lua deleted file mode 100644 index a83667b..0000000 --- a/config/astronvim/lua/user/plugins/core.lua +++ /dev/null @@ -1,115 +0,0 @@ -return { - -- customize alpha options - { - "goolord/alpha-nvim", - opts = function(_, opts) - -- customize the dashboard header - opts.section.header.val = { - " ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ", - " ▄▀░░░░░░░░░░░░▄░░░░░░░▀▄ ", - " █░░▄░░░░▄░░░░░░░░░░░░░░█ ", - " █░░░░░░░░░░░░▄█▄▄░░▄░░░█ ▄▄▄ ", - "▄▄▄▄▄ █░░░░░░▀░░░░▀█░░▀▄░░░░░█▀▀░██ ", - "██▄▀██▄█░░░▄░░░░░░░██░░░░▀▀▀▀▀░░░░██ ", - " ▀██▄▀██░░░░░░░░▀░██▀░░░░░░░░░░░░░▀██", - " ▀████░▀░░░░▄░░░██░░░▄█░░░░▄░▄█░░██", - " ▀█░░░░▄░░░░░██░░░░▄░░░▄░░▄░░░██", - " ▄█▄░░░░░░░░░░░▀▄░░▀▀▀▀▀▀▀▀░░▄▀ ", - " █▀▀█████████▀▀▀▀████████████▀ ", - " ████▀ ███▀ ▀███ ▀██▀ ", - } - return opts - end, - }, - -- You can disable default plugins as follows: - -- { "max397574/better-escape.nvim", enabled = false }, - -- - -- You can also easily customize additional setup of plugins - -- that is outside of the plugin's setup call - { - "L3MON4D3/LuaSnip", - config = function(plugin, opts) - -- include the default astronvim config that calls the setup call - require "plugins.configs.luasnip" (plugin, opts) - -- add more custom luasnip configuration such - -- as filetype extend or custom snippets - local luasnip = require "luasnip" - luasnip.filetype_extend("javascript", { "javascriptreact" }) - end, - }, - { - "nvim-neo-tree/neo-tree.nvim", - opts = function(_, opts) - require "plugins.neo-tree" - opts.filesystem.filtered_items = { - visible = false, - show_hidden_count = true, - hide_dotfiles = false, - hide_gitignored = false, - hide_by_name = { - '.idea', - '.DS_Store' - }, - never_show = { - '.git', - '.idea', - '.mypy_cache', - '.DS_Store', - 'thumbs.db' - }, - never_show_by_pattern = { -- uses glob style patterns - ".null-ls_*", - }, - } - - return opts - end, - }, - -- { - -- "windwp/nvim-autopairs", - -- config = function(plugin, opts) - -- -- include the default astronvim config that calls the setup call - -- require "plugins.configs.nvim-autopairs"(plugin, opts) - -- -- add more custom autopairs configuration such as custom rules - -- local npairs = require "nvim-autopairs" - -- local Rule = require "nvim-autopairs.rule" - -- local cond = require "nvim-autopairs.conds" - -- npairs.add_rules( - -- { - -- Rule("$", "$", { "tex", "latex" }) - -- -- don't add a pair if the next character is % - -- :with_pair(cond.not_after_regex "%%") - -- -- don't add a pair if the previous character is xxx - -- :with_pair( - -- cond.not_before_regex("xxx", 3) - -- ) - -- -- don't move right when repeat character - -- :with_move(cond.none()) - -- -- don't delete if the next character is xx - -- :with_del(cond.not_after_regex "xx") - -- -- disable adding a newline when you press - -- :with_cr(cond.none()), - -- }, - -- -- disable for .vim files, but it work for another filetypes - -- Rule("a", "a", "-vim") - -- ) - -- end, - -- }, - -- By adding to the which-key config and using our helper - -- function you can add more which-key registered bindings - { - "folke/which-key.nvim", - config = function(plugin, opts) - -- include the default astronvim config that calls the setup call - require "plugins.configs.which-key" (plugin, opts) - -- Add bindings which show up as group name - local wk = require "which-key" - wk.register( - { - b = { name = "Buffer" }, - }, - { mode = "n", prefix = "" } - ) - end, - }, -} diff --git a/config/astronvim/lua/user/plugins/mason.lua b/config/astronvim/lua/user/plugins/mason.lua deleted file mode 100644 index 14661e5..0000000 --- a/config/astronvim/lua/user/plugins/mason.lua +++ /dev/null @@ -1,44 +0,0 @@ --- customize mason plugins -return { - -- use mason-lspconfig to configure LSP installations - { - "williamboman/mason-lspconfig.nvim", - -- overrides `require("mason-lspconfig").setup(...)` - opts = function(_, opts) - -- add more things to the ensure_installed table protecting against community packs modifying it - opts.ensure_installed = require("astronvim.utils").list_insert_unique(opts.ensure_installed, { - -- "lua_ls", - }) - end, - }, - -- use mason-null-ls to configure Formatters/Linter - -- installation for null-ls sources - { - "jay-babu/mason-null-ls.nvim", - -- overrides `require("mason-null-ls").setup(...)` - opts = function(_, opts) - -- add more things to the ensure_installed table protecting against community packs modifying it - opts.ensure_installed = require("astronvim.utils").list_insert_unique(opts.ensure_installed, { - -- "prettier", - -- "stylua", - }) - opts.automatic_setup = true - opts.automatic_installation = true - end, - }, - { - "jay-babu/mason-nvim-dap.nvim", - -- overrides `require("mason-nvim-dap").setup(...)` - opts = function(_, opts) - -- add more things to the ensure_installed table protecting against community packs modifying it - opts.ensure_installed = require("astronvim.utils").list_insert_unique(opts.ensure_installed, { - "python", - "php", - "js", - "bash" - }) - opts.automatic_installation = true - opts.automatic_setup = true - end, - }, -} diff --git a/config/astronvim/lua/user/plugins/null-ls.lua b/config/astronvim/lua/user/plugins/null-ls.lua deleted file mode 100644 index 8dd8316..0000000 --- a/config/astronvim/lua/user/plugins/null-ls.lua +++ /dev/null @@ -1,45 +0,0 @@ -return { - "jose-elias-alvarez/null-ls.nvim", - opts = function(_, config) - -- config variable is the default configuration table for the setup function call - local null_ls = require "null-ls" - - -- Check supported formatters and linters - -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting - -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics - config.sources = { - -- Set a formatter - null_ls.builtins.code_actions.eslint, - null_ls.builtins.code_actions.refactoring, - null_ls.builtins.code_actions.shellcheck, - null_ls.builtins.diagnostics.actionlint, - null_ls.builtins.diagnostics.alex, - null_ls.builtins.diagnostics.ansiblelint, - null_ls.builtins.diagnostics.dotenv_linter, - null_ls.builtins.diagnostics.editorconfig_checker, - null_ls.builtins.diagnostics.eslint, - null_ls.builtins.diagnostics.jsonlint, - null_ls.builtins.diagnostics.luacheck, - null_ls.builtins.diagnostics.php, - null_ls.builtins.diagnostics.phpcs, - null_ls.builtins.diagnostics.phpstan, - null_ls.builtins.diagnostics.psalm, - null_ls.builtins.diagnostics.semgrep, - null_ls.builtins.diagnostics.shellcheck, - null_ls.builtins.diagnostics.stylelint, - null_ls.builtins.diagnostics.tfsec, - null_ls.builtins.diagnostics.trail_space, - null_ls.builtins.diagnostics.tsc, - null_ls.builtins.diagnostics.zsh, - null_ls.builtins.formatting.clang_format, - null_ls.builtins.formatting.fixjson, - null_ls.builtins.formatting.isort, - null_ls.builtins.formatting.jq, - null_ls.builtins.formatting.phpcsfixer, - null_ls.builtins.formatting.shfmt.with { - args = { "-i", "1", "-bn", "-ci", "-sr", "-kb", "-fn" }, - }, - } - return config -- return final config table - end, -} diff --git a/config/astronvim/lua/user/plugins/treesitter.lua b/config/astronvim/lua/user/plugins/treesitter.lua deleted file mode 100644 index 4049561..0000000 --- a/config/astronvim/lua/user/plugins/treesitter.lua +++ /dev/null @@ -1,33 +0,0 @@ -return { - "nvim-treesitter/nvim-treesitter", - opts = function(_, opts) - opts.ensure_installed = require("astronvim.utils").list_insert_unique(opts.ensure_installed, { - "bash", - "c", - "cmake", - "comment", - "diff", - "dockerfile", - "gitignore", - "graphql", - "html", - "javascript", - "json", - "json5", - "latex", - "lua", - "markdown", - "php", - "phpdoc", - "python", - "scss", - "terraform", - "todotxt", - "toml", - "typescript", - "vim", - "vue", - "yaml", - }) - end, -} diff --git a/config/astronvim/lua/user/plugins/user.lua b/config/astronvim/lua/user/plugins/user.lua deleted file mode 100644 index 02c88e4..0000000 --- a/config/astronvim/lua/user/plugins/user.lua +++ /dev/null @@ -1,107 +0,0 @@ --- luacheck: globals vim -return { - -- You can also add new plugins here as well: - -- Add plugins, the lazy syntax - "andweeb/presence.nvim", - { - "ray-x/lsp_signature.nvim", - event = "BufRead", - config = function() require("lsp_signature").setup() end, - }, - { - "wakatime/vim-wakatime", - lazy = false, - enabled = true, - }, - { - "nvim-treesitter/nvim-treesitter-context", - lazy = false, - enabled = true, - opts = { - enable = true, - mode = "cursor", -- cursor, or topline - }, - }, - { "kazhala/close-buffers.nvim" }, - { - "folke/edgy.nvim", - event = "VeryLazy", - dependencies = { - { - 'nvim-neo-tree/neo-tree.nvim', - config = function() - require('neo-tree').setup({ - open_files_do_not_replace_types = { - 'terminal', 'Trouble', 'qf', 'edgy' - }, - }) - end, - }, - { - 'simrat39/symbols-outline.nvim', - config = function() - require('symbols-outline').setup() - end, - }, - }, - init = function() - vim.opt.laststatus = 3 - vim.opt.splitkeep = "screen" - end, - opts = { - bottom = { - -- toggleterm / lazyterm at the bottom with - -- a height of 40% of the screen - { - ft = "toggleterm", - size = { height = 0.4 }, - -- exclude floating windows - filter = function(_, win) - return vim.api.nvim_win_get_config(win).relative == "" - end, - }, - { - ft = "lazyterm", - title = "LazyTerm", - size = { height = 0.4 }, - filter = function(buf) - return not vim.b[buf].lazyterm_cmd - end, - }, - "Trouble", - { ft = "qf", title = "QuickFix" }, - { - ft = "help", - size = { height = 20 }, - -- only show help buffers - filter = function(buf) - return vim.bo[buf].buftype == "help" - end, - }, - { ft = "spectre_panel", size = { height = 0.4 } }, - }, - left = { - -- Neo-tree filesystem always takes half the screen height - { - title = "Neo-Tree", - ft = "neo-tree", - filter = function(buf) - return vim.b[buf].neo_tree_source == "filesystem" - end, - size = { height = 0.5 }, - }, - { - title = "Neo-Tree Buffers", - ft = "neo-tree", - filter = function(buf) - return vim.b[buf].neo_tree_source == "buffers" - end, - pinned = true, - open = "Neotree position=top buffers", - }, - -- any other neo-tree windows - "neo-tree", - }, - }, - }, -} diff --git a/config/nvim b/config/nvim deleted file mode 160000 index c32f5e2..0000000 --- a/config/nvim +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c32f5e2a3ced460cbf7dc3b9b41396a5127aa115 diff --git a/config/nvim/.gitignore b/config/nvim/.gitignore new file mode 100644 index 0000000..f4c2ac3 --- /dev/null +++ b/config/nvim/.gitignore @@ -0,0 +1,6 @@ +tags +test.sh +.luarc.json +nvim +lazy-lock.json +session.vim diff --git a/config/nvim/.stylua.toml b/config/nvim/.stylua.toml new file mode 100644 index 0000000..52f7162 --- /dev/null +++ b/config/nvim/.stylua.toml @@ -0,0 +1,10 @@ +column_width = 160 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferDouble" +call_parentheses = "Always" +collapse_simple_statement = "Always" + +[sort_requires] +enabled = true diff --git a/config/nvim/after/ftplugin/lua.lua b/config/nvim/after/ftplugin/lua.lua new file mode 100644 index 0000000..d6e3be8 --- /dev/null +++ b/config/nvim/after/ftplugin/lua.lua @@ -0,0 +1 @@ +vim.api.nvim_command("set formatoptions-=cro") diff --git a/config/nvim/init.lua b/config/nvim/init.lua new file mode 100644 index 0000000..33bd240 --- /dev/null +++ b/config/nvim/init.lua @@ -0,0 +1,30 @@ +local key = vim.api.nvim_set_keymap +local remap = { noremap = true, silent = true } + +-- Set with normal Vim opts, 'Space' as mapleader +vim.g.mapleader = " " +vim.g.maplocalleader = " " + +-- Set 'Space' as key to leadermap key +key("n", "", "", remap) + +-- Filetype specialties. +require("filetype") + +-- Global, windows options of neovim: +require("options") + +-- To adminstrate packages: +require("plugin-manager") + +-- LSP for editing. +require("lsp") + +-- Autocmd commands from Vimscript +require("autocmd") + +-- Personal Keymaps of neovim: +require("keymappings") + +-- The line beneath this is called `modeline`. See `:help modeline` +-- vim: ts=2 sts=2 sw=2 et diff --git a/config/nvim/lua/autocmd.lua b/config/nvim/lua/autocmd.lua new file mode 100644 index 0000000..8a1f3e3 --- /dev/null +++ b/config/nvim/lua/autocmd.lua @@ -0,0 +1,31 @@ +local vim = vim +local api = vim.api +local M = {} + +--- function to create a list of commands and convert them to autocommands +--- This function is taken from https://github.com/norcalli/nvim_utils +function M.nvim_create_augroups(definitions) + for group_name, definition in pairs(definitions) do + api.nvim_command("augroup " .. group_name) + api.nvim_command("autocmd!") + for _, def in ipairs(definition) do + local command = table.concat(vim.tbl_flatten({ "autocmd", def }), " ") + api.nvim_command(command) + end + api.nvim_command("augroup END") + end +end + +local autoCommands = { + -- To save the current session (may be restored later). + -- autocmd! VimLeavePre * :mks! ~/.config/nvim/session.vim + save_session = { + { "VimLeavePre", "*", ":mks! ~/.local/state/nvim/session.vim" }, + }, + -- other autocommands + open_folds = { + { "BufReadPost,FileReadPost", "*", "normal zR" }, + }, +} + +M.nvim_create_augroups(autoCommands) diff --git a/config/nvim/lua/filetype.lua b/config/nvim/lua/filetype.lua new file mode 100644 index 0000000..e91c566 --- /dev/null +++ b/config/nvim/lua/filetype.lua @@ -0,0 +1,77 @@ +-- To be used anywhere. +local function job(command) vim.api.nvim_command("call jobstart('" .. command .. "')") end + +local function format() + vim.api.nvim_create_autocmd("BufWritePost", { + pattern = "", + callback = function() vim.lsp.buf.format() end, + }) +end + +local function yaml_ft(path, bufnr) + -- get content of buffer as string + local content = vim.filetype.getlines(bufnr) + if type(content) == "table" then content = table.concat(content, "\n") end + + -- check if file is in roles, tasks, or handlers folder + local path_regex = vim.regex("(tasks\\|roles\\|handlers)/") + if path_regex and path_regex:match_str(path) then return "yaml.ansible" end + -- check for known ansible playbook text and if found, return yaml.ansible + local regex = vim.regex("hosts:\\|tasks:") + if regex and regex:match_str(content) then return "yaml.ansible" end + + -- return yaml if nothing else + return "yaml" +end + +-- In init.lua or filetype.nvim's config file +vim.filetype.add({ + extension = { + + h = function() + -- Use a lazy heuristic that #including a C++ header means it's a + -- C++ header + if vim.fn.search("\\C^#include <[^>.]\\+>$", "nw") == 1 then return "cpp" end + return "c" + end, + + -- Spelling fix. + md = function() vim.api.nvim_command("setlocal spell!") end, + + yml = yaml_ft, + yaml = yaml_ft, + + -- + csv = "csv", + cl = "opencl", + env = "env", + sh = "zsh", + -- + }, + pattern = { + + -- Go to root configuration of some projects. + -- [".*config/nvim/.*"] = function() vim.api.nvim_command "cd ~/.config/nvim/" end, + + ---- Typescript Projects + [".*/src/.*ts"] = function() format() end, + [".*/src/.*json"] = function() format() end, + [".*/src/.*scss"] = function() format() end, + [".*/src/.*html"] = function() format() end, + + --[".*Code/ivuorinen/[project]/src/.*ts"] = function() + -- vim.api.nvim_command('cd ~/Code/ivuorinen/[project]/') + -- build('ts index') + --end, + }, + + filename = { + -- For eslint_d configuration file. + [".eslintrc"] = "jsonc", + + -- For Typescript projects. + ["tsconfig.json"] = "json5", + + [".ignore"] = "gitignore", + }, +}) diff --git a/config/nvim/lua/keymappings.lua b/config/nvim/lua/keymappings.lua new file mode 100644 index 0000000..5f35700 --- /dev/null +++ b/config/nvim/lua/keymappings.lua @@ -0,0 +1,279 @@ +--[[ + Keymappings for nvim experience. + + I use combination of both nvim default vim.api.nvim_set_keymap + and WhichKey register. Slowly migrating to the WhichKey system, + and tweaking the groupings as I go. +--]] + +local key = vim.api.nvim_set_keymap +local remap = { noremap = true, silent = true } + +local wk = require("which-key") + +-- ╭──────────────────────────────────────────────────────────╮ +-- │ Register keybindings │ +-- ╰──────────────────────────────────────────────────────────╯ + +-- Register in all modes, prefix +wk.register({ + b = { + name = "Buffer", + n = { + "tabnew", + "New tab", + }, + c = { + name = "Comments", + b = { + "lua require('comment-box').lbox()", + "Left aligned fixed size box with left aligned text", + }, + c = { + "lua require('comment-box').ccbox()", + desc = "Centered adapted box with centered text", + }, + l = { + "lua require('comment-box').cline()", + desc = "Centered line", + }, + }, + d = { + name = "Delete buffers", + h = { + "lua require('close_buffers').delete({type = 'hidden'})", + "Delete hidden buffers", + }, + }, + }, + D = { + name = "[D]iagnostics (Trouble)", + t = { ":TroubleToggle", "[D]iagnostics [t]oggle" }, + -- Quick navigation between diagonostics. + f = { ":lua vim.diagnostic.open_float()", "[D]iagnostics: Open [f]loat" }, + n = { ":lua vim.diagnostic.goto_next()", "[D]iagnostics: [n]ext" }, + p = { ":lua vim.diagnostic.goto_prev()", "[D]iagnostics: [p]rev" }, + }, + f = { + name = "[f]ind", + -- Find recursively files across the root folder subfiles. + f = { ':lua require("telescope.builtin").find_files()', "[f]ind [f]iles" }, + -- Find recursively a text across the root folder subfiles. + g = { ':lua require("telescope.builtin").live_grep()', "[f]ind text with [g]rep" }, + }, + h = { + name = "[h]arpoon", + a = { "lua require('harpoon.mark').add_file()", "[h]arpoon: [A]dd file" }, + r = { "lua require('harpoon.mark').rm_file()", "[h]arpoon: [r]emove file" }, + m = { "lua require('harpoon.ui').toggle_quick_menu()", "[h]arpoon: harpoon [m]enu" }, + n = { "lua require('harpoon.ui').nav_next()", "[h]arpoon: [n]ext file" }, + p = { "lua require('harpoon.ui').nav_prev()", "[h]arpoon: [p]revious file" }, + ["1"] = { " lua require('harpoon.ui').nav_file(1)", "[h]arpoon: file 1" }, + ["2"] = { " lua require('harpoon.ui').nav_file(2)", "[h]arpoon: file 2" }, + ["3"] = { " lua require('harpoon.ui').nav_file(3)", "[h]arpoon: file 3" }, + }, + --- Remap debugging to "H" from LV default of "h" + H = { + name = "[H]elp/Conceal/Telescope", + c = { + name = "[c]onceal", + h = { ":set conceallevel=1", "hide/conceal" }, + s = { ":set conceallevel=0", "show/unconceal" }, + }, + t = { + name = "Treesitter", + t = { vim.treesitter.inspect_tree, "show tree" }, + c = { ":=vim.treesitter.get_captures_at_cursor()", "show capture" }, + n = { ":=vim.treesitter.get_node():type()", "show node" }, + }, + }, + p = { + name = "[p]lugins", + i = { function() require("lazy").install() end, "[p]lugins [i]nstall" }, + s = { function() require("lazy").home() end, "[p]lugins [s]tatus" }, + S = { function() require("lazy").sync() end, "[p]lugins [S]ync" }, + u = { function() require("lazy").check() end, "[p]lugins Check [u]pdates" }, + U = { function() require("lazy").update() end, "[p]lugins [U]pdate" }, + }, + q = { + name = "[q]uit", + q = { ":qa", "[q]uit: [q]uit all" }, + f = { ":qa!", "[q]uit: all with [f]orce" }, + }, + t = { + name = "[t]elescope", + -- Find recursively TODOs, NOTEs, FIXITs, ... across the root folder subfiles. + t = { ":TodoTelescope", "[t]elescope: [t]odo" }, + }, + x = { ":Bdelete", "[x]: Close current buffer" }, +}, { prefix = "" }) + +-- Normal mode, prefix +wk.register({ + b = { name = "Buffer" }, +}, { mode = "n", prefix = "" }) + +-- Insert mode, prefix +wk.register({ + b = { name = "Buffer" }, +}, { mode = "i", prefix = "" }) + +-- Go to the next block. +--key('n', '', 'g%', remap ) + +-- Loop through brackets blocks. +--key('n', '', 'z%', remap ) + +-- Do just End on CTRL + End. +key("i", "", "", remap) +key("n", "", "", remap) + +-- Do just Home on CTRL + Home. +key("i", "", "", remap) + +-- Highlight the word after pressing enter. +key( + "n", + "", + [[:let searchTerm = '\v<'.expand("").'>' let @/ = searchTerm echo '/'.@/ call histadd("search", searchTerm) set hls]], + remap +) + +-- Highlight the visual selection after pressing enter. +key( + "v", + "", + [["*y:silent! let searchTerm = '\V'.substitute(escape(@*, '\/'), "\n", '\\n', "g") let @/ = searchTerm echo '/'.@/ call histadd("search", searchTerm) set hls]], + remap +) + +-- Toggle highlight of search +key("n", "", ":set hlsearch!", remap) + +-- Toggle the sidebar tree of the root folder. +key("n", "e", "", { + noremap = true, + silent = true, + desc = "Open NeoTree without warnings", + callback = function() vim.cmd("Neotree toggle source=filesystem position=left") end, +}) + +-- Try to correct the current word. +key("i", "", "ea", remap) + +-- Toggle built-in nvim spell checking. +key("n", "", ":setlocal spell!", remap) + +-- Move lines normally like an IDE when line wraps +key("i", "", [[v:count ? 'j' : 'gj']], { expr = true, noremap = true, silent = true }) +key("i", "", [[v:count ? 'k' : 'gk']], { expr = true, noremap = true, silent = true }) +key("n", "", [[v:count ? 'j' : 'gj']], { expr = true, noremap = true, silent = true }) +key("n", "", [[v:count ? 'k' : 'gk']], { expr = true, noremap = true, silent = true }) + +-- Set 'CTRL + v' as 'paster' +-- key('', '', 'map"_di', remap ) +key("v", "", "p", remap) + +-- Set 'CTRL + x' as 'cut' +key("v", "", "mad`ai", { silent = true }) + +-- Set 'CTRL + c' as 'copier' +key("v", "", "may`ai", remap) +key("i", "", ":Registers", remap) + +-- Set 'CTRL + s as save' +key("n", "", "w", remap) + +-- Create mark. +key("n", "'", "`", remap) + +-- Move normaly bottom and up with C+Up and C+Down. +key("i", "", "gk", remap) +key("i", "", "gj", remap) +key("n", "", "gk", remap) +key("n", "", "gj", remap) + +-- Set 'CTRL + z' as 'undo' +key("i", "", "ui", remap) + +-- Set 'CTRL + y' as 'redo' +key("i", "", "", remap) + +-- Set 'SHIFT + arrows' as 'select' like modern text-editor. +key("n", "", "v", remap) +key("n", "", "v", remap) +key("n", "", "v", remap) +key("n", "", "v", remap) +key("v", "", "", remap) +key("v", "", "", remap) +key("v", "", "", remap) +key("v", "", "", remap) +key("i", "", "v", remap) +key("i", "", "v", remap) +key("i", "", "v", remap) +key("i", "", "v", remap) + +-- Set 'SHIFT + special-keys' as 'select' like a modern text editor. +key("i", "", "v", remap) +key("i", "", "v", remap) +key("n", "", "v", remap) +key("n", "", "v", remap) +key("n", "", "", remap) +key("n", "", ":call Visual_Scroll_Down()i", remap) + +-- Indent the current visual selection. +key("v", "<", "", ">gv", remap) + +-- Set 'Backspace' as 'delete selection' for the visual selection. +key("v", "", '"_di', remap) + +--- + +-- Barbar keymappings + +local map = vim.api.nvim_set_keymap +local opts = { noremap = true, silent = true } + +-- Move to previous/next +map("n", "", "BufferPrevious", opts) +map("n", "", "BufferNext", opts) +-- Re-order to previous/next +map("n", "", "BufferMovePrevious", opts) +map("n", ">", "BufferMoveNext", opts) +-- Goto buffer in position... +map("n", "", "BufferGoto 1", opts) +map("n", "", "BufferGoto 2", opts) +map("n", "", "BufferGoto 3", opts) +map("n", "", "BufferGoto 4", opts) +map("n", "", "BufferGoto 5", opts) +map("n", "", "BufferGoto 6", opts) +map("n", "", "BufferGoto 7", opts) +map("n", "", "BufferGoto 8", opts) +map("n", "", "BufferGoto 9", opts) +map("n", "", "BufferLast", opts) +-- Pin/unpin buffer +map("n", "", "BufferPin", opts) + +-- Close buffer +-- map('n', '', 'BufferClose', opts) + +-- Wipeout buffer +-- :BufferWipeout +-- Close commands +-- :BufferCloseAllButCurrent +-- :BufferCloseAllButPinned +-- :BufferCloseAllButCurrentOrPinned +-- :BufferCloseBuffersLeft +-- :BufferCloseBuffersRight +-- Magic buffer-picking mode +map("n", "", "BufferPick", opts) +-- Sort automatically by... +map("n", "bb", "BufferOrderByBufferNumber", opts) +map("n", "bd", "BufferOrderByDirectory", opts) +map("n", "bl", "BufferOrderByLanguage", opts) +map("n", "bw", "BufferOrderByWindowNumber", opts) + +-- Other: +-- :BarbarEnable - enables barbar (enabled by default) +-- :BarbarDisable - very bad command, should never be used diff --git a/config/nvim/lua/lsp.lua b/config/nvim/lua/lsp.lua new file mode 100644 index 0000000..cf279d0 --- /dev/null +++ b/config/nvim/lua/lsp.lua @@ -0,0 +1,146 @@ +-- Completion for snippets. +CAPABILITIES = vim.lsp.protocol.make_client_capabilities() +CAPABILITIES = require("cmp_nvim_lsp").default_capabilities(CAPABILITIES) +CAPABILITIES.textDocument.completion.completionItem.snippetSupport = true + +--CAPABILITIES.offsetEncoding = 'utf-8' + +-- [[ Configure LSP ]] +-- This function gets run when an LSP connects to a particular buffer. +local on_attach = function(_, bufnr) + local nmap = function(keys, func, desc) + if desc then desc = "LSP: " .. desc end + + vim.keymap.set("n", keys, func, { buffer = bufnr, desc = desc }) + end + + local wk = require("which-key") + + wk.register({ + l = { + name = "LSP", + n = { vim.lsp.buf.rename, "Rename" }, + c = { vim.lsp.buf.code_action, "Code Action" }, + f = { "Format", "Format current buffer with LSP" }, + D = { vim.lsp.buf.declaration, "[G]oto [D]eclaration" }, + w = { + name = "[w]orkspace", + a = { vim.lsp.buf.add_workspace_folder, "[w]orkspace: [a]dd folder" }, + r = { vim.lsp.buf.remove_workspace_folder, "[w]orkspace: [r]emove folder" }, + l = { + function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, + "[w]orkspace [l]ist folders", + }, + }, + }, + g = { + name = "Goto", + d = { vim.lsp.buf.definition, "[G]oto [D]efinition" }, + r = { require("telescope.builtin").lsp_references, "[G]oto [R]eferences" }, + I = { vim.lsp.buf.implementation, "[G]oto [I]mplementation" }, + D = { vim.lsp.buf.type_definition, "Type [D]efinition" }, + s = { require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols" }, + w = { require("telescope.builtin").lsp_dynamic_workspace_symbols, "[W]orkspace [S]ymbols" }, + }, + }, { prefix = "" }) + + -- See `:help K` for why this keymap + nmap("K", vim.lsp.buf.hover, "Hover Documentation") + nmap("", vim.lsp.buf.signature_help, "Signature Documentation") + + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command( + bufnr, + "Format", + function(_) vim.lsp.buf.format() end, + { desc = "Format current buffer with LSP" } + ) +end + +-- Enable the following language servers +-- Feel free to add/remove any LSPs that you want here. +-- They will automatically be installed. +-- +-- Add any additional override configuration in the following +-- tables. They will be passed to the `settings` field of the +-- server config. You must look up that documentation yourself. +-- +-- If you want to override the default filetypes that your +-- language server will attach to you can define the property +-- 'filetypes' to the map in question. +local servers = { + ansiblels = {}, + bashls = {}, + clangd = {}, + docker_compose_language_service = {}, + dockerls = {}, + eslint = {}, + gopls = {}, + html = { filetypes = { "html", "twig", "hbs" } }, + intelephense = {}, + jsonls = {}, + lua_ls = { + Lua = { + workspace = { checkThirdParty = false }, + telemetry = { enable = false }, + }, + }, + marksman = {}, + pyright = {}, + rust_analyzer = {}, + terraformls = {}, + tsserver = {}, + vuels = {}, + yamlls = {}, +} + +-- Setup neovim lua configuration +require("neodev").setup() + +-- nvim-cmp supports additional completion capabilities, +-- so broadcast that to servers +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = require("cmp_nvim_lsp").default_capabilities(capabilities) + +-- Ensure the servers above are installed +local mason_lspconfig = require("mason-lspconfig") + +mason_lspconfig.setup({ + ensure_installed = vim.tbl_keys(servers), + automatic_installation = true, +}) + +mason_lspconfig.setup_handlers({ + function(server_name) + require("lspconfig")[server_name].setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = servers[server_name], + filetypes = (servers[server_name] or {}).filetypes, + }) + end, +}) + +-- Bash Language Server +require("lsp.bash") + +-- eslint_d + prettierd +-- require 'lsp.eslint_d_prettierd' + +-- HTML +require("lsp.html") + +-- JSON +require("lsp.json") + +-- Python +require("lsp.python") + +-- CSS + Less + SCSS +require("lsp.scss") + +-- rome +require("lsp.rome") + +-- Typescript + Javascript +require("lsp.typescript") diff --git a/config/nvim/lua/lsp/bash.lua b/config/nvim/lua/lsp/bash.lua new file mode 100644 index 0000000..7c9a3db --- /dev/null +++ b/config/nvim/lua/lsp/bash.lua @@ -0,0 +1,8 @@ +require("lspconfig").bashls.setup({ + cmd = { + "bash-language-server", + "start", + }, + filetypes = { "sh", "zsh" }, + capabilities = CAPABILITIES, +}) diff --git a/config/nvim/lua/lsp/eslint_d_prettierd.lua b/config/nvim/lua/lsp/eslint_d_prettierd.lua new file mode 100644 index 0000000..276ca99 --- /dev/null +++ b/config/nvim/lua/lsp/eslint_d_prettierd.lua @@ -0,0 +1,25 @@ +local eslint = require("eslint") +local null_ls = require("null-ls") +-- local sources = { null_ls.builtins.formatting.prettierd } + +null_ls.setup() + +eslint.setup({ + bin = "eslint_d", + code_actions = { + enable = true, + apply_on_save = { + enable = true, + types = { "directive", "problem", "suggestion", "layout" }, + }, + disable_rule_comment = { + enable = true, + location = "separate_line", -- or `same_line` + }, + }, + diagnostics = { + enable = true, + report_unused_disable_directives = false, + run_on = "type", -- or `save` + }, +}) diff --git a/config/nvim/lua/lsp/html.lua b/config/nvim/lua/lsp/html.lua new file mode 100644 index 0000000..34ea7d2 --- /dev/null +++ b/config/nvim/lua/lsp/html.lua @@ -0,0 +1 @@ +require("lspconfig").html.setup({ capabilities = CAPABILITIES }) diff --git a/config/nvim/lua/lsp/json.lua b/config/nvim/lua/lsp/json.lua new file mode 100644 index 0000000..5452ed9 --- /dev/null +++ b/config/nvim/lua/lsp/json.lua @@ -0,0 +1,9 @@ +require("lspconfig").jsonls.setup({ + settings = { + json = { + schemas = require("schemastore").json.schemas(), + validate = { enable = true }, + }, + }, + capabilities = CAPABILITIES, +}) diff --git a/config/nvim/lua/lsp/python.lua b/config/nvim/lua/lsp/python.lua new file mode 100644 index 0000000..994dc53 --- /dev/null +++ b/config/nvim/lua/lsp/python.lua @@ -0,0 +1 @@ +require("lspconfig").pylsp.setup({}) diff --git a/config/nvim/lua/lsp/rome.lua b/config/nvim/lua/lsp/rome.lua new file mode 100644 index 0000000..5e1374f --- /dev/null +++ b/config/nvim/lua/lsp/rome.lua @@ -0,0 +1,31 @@ +local util = require("lspconfig.util") +-- local config = require 'lspconfig.configs' + +-- This duplicate exec is just a workaruond, if don't execute at first, +-- the nvim will stuck when you first init rome socket +-- local rome_cmd = { 'rome', 'lsp-proxy' } + +-- local merged_table = vim.tbl_extend("keep", { +-- textDocument = { +-- formatting = { +-- dynamicRegistration = true +-- } +-- } +-- }, capabilities); +-- +require("lspconfig").rome.setup({ + -- cmd = rome_cmd, + -- filetypes = { + -- 'javascript', + -- 'javascriptreact', + -- 'typescript', + -- 'typescriptreact', + -- 'json' + -- }, + root_dir = util.root_pattern("rome.json"), + single_file_support = true, + on_attach = function(client, bufnr) + if client.server_capabilities.documentSymbolProvider then require("nvim-navic").attach(client, bufnr) end + end, + capabilities = CAPABILITIES, +}) diff --git a/config/nvim/lua/lsp/scss.lua b/config/nvim/lua/lsp/scss.lua new file mode 100644 index 0000000..6335da5 --- /dev/null +++ b/config/nvim/lua/lsp/scss.lua @@ -0,0 +1,22 @@ +-- CSS + Less + SASS Language Server +require("lspconfig").cssls.setup({ + cmd = { "vscode-css-language-server", "--stdio" }, + filetypes = { "css", "scss", "less" }, + -- root_dir = root_pattern("package.json", ".git") or bufdir, + settings = { + css = { + validate = true, + }, + less = { + validate = true, + }, + scss = { + validate = true, + }, + }, + single_file_support = true, + capabilities = CAPABILITIES, + on_attach = function(client, bufnr) + if client.server_capabilities.documentSymbolProvider then require("nvim-navic").attach(client, bufnr) end + end, +}) diff --git a/config/nvim/lua/lsp/typescript.lua b/config/nvim/lua/lsp/typescript.lua new file mode 100644 index 0000000..1d8cd0e --- /dev/null +++ b/config/nvim/lua/lsp/typescript.lua @@ -0,0 +1,6 @@ +require("lspconfig").tsserver.setup({ + capabilities = CAPABILITIES, + on_attach = function(client, bufnr) + if client.server_capabilities.documentSymbolProvider then require("nvim-navic").attach(client, bufnr) end + end, +}) diff --git a/config/nvim/lua/lsp_signature.lua b/config/nvim/lua/lsp_signature.lua new file mode 100644 index 0000000..0316662 --- /dev/null +++ b/config/nvim/lua/lsp_signature.lua @@ -0,0 +1,59 @@ +-- Signature for LSP + +return { + "ray-x/lsp_signature.nvim", + config = { + debug = false, -- set to true to enable debug logging + verbose = false, -- show debug line number + + bind = true, -- This is mandatory, otherwise border config won't get registered. + -- If you want to hook lspsaga or other signature handler, pls set to false + doc_lines = 10, -- will show two lines of comment/doc(if there are more than two lines in doc, will be truncated); + -- set to 0 if you DO NOT want any API comments be shown + -- This setting only take effect in insert mode, it does not affect signature help in normal + -- mode, 10 by default + + floating_window = true, -- show hint in a floating window, set to false for virtual text only mode + + floating_window_above_cur_line = false, -- try to place the floating above the current line when possible Note: + -- will set to true when fully tested, set to false will use whichever side has more space + -- this setting will be helpful if you do not want the PUM and floating win overlap + close_timeout = 4000, -- close floating window after ms when laster parameter is entered + hint_enable = true, -- virtual hint enable + hint_prefix = "🐼", -- Panda for parameter + hint_scheme = "String", + use_lspsaga = false, -- set to true if you want to use lspsaga popup + + hi_parameter = "LspSignatureActiveParameter", -- how your parameter will be highlight + + max_height = 12, -- max height of signature floating_window, if content is more than max_height, you can scroll down + -- to view the hiding contents + max_width = 90, -- max_width of signature floating_window, line will be wrapped if exceed max_width + wrap = true, + handler_opts = { + border = "shadow", -- double, rounded, single, shadow, none + }, + + always_trigger = false, -- sometime show signature on new line or in middle of parameter can be confusing, set it to false for #58 + + floating_window_off_x = 0, -- adjust float windows x position. + -- can be either a number or function + floating_window_off_y = 2, -- adjust float windows y position. e.g -2 move window up 2 lines; 2 move down 2 lines + -- can be either number or function, see examples + + auto_close_after = nil, -- autoclose signature float win after x sec, disabled if nil. + extra_trigger_chars = { "(", ",", ";", ")", "{", "}" }, -- Array of extra characters that will trigger signature completion, e.g., {"(", ","} + zindex = 200, -- by default it will be on top of all floating windows, set to <= 50 send it to bottom + + padding = "", -- character to pad on left and right of signature can be ' ', or '|' etc + + transparency = 20, -- disabled by default, allow floating win transparent value 1~100 + shadow_blend = 36, -- if you using shadow as border use this set the opacity + shadow_guibg = "Black", -- if you using shadow as border use this set the color e.g. 'Green' or '#121315' + timer_interval = 50, -- default timer check interval set to lower value if you want to reduce latency + toggle_key = "", -- toggle signature on and off in insert mode, e.g. toggle_key = '' + + select_signature_key = nil, -- cycle to next signature, e.g. '' function overloading + move_cursor_key = nil, -- imap, use nvim_set_current_win to move cursor between current win and floating + }, +} diff --git a/config/nvim/lua/options.lua b/config/nvim/lua/options.lua new file mode 100644 index 0000000..54eb005 --- /dev/null +++ b/config/nvim/lua/options.lua @@ -0,0 +1,153 @@ +local option = vim.api.nvim_set_option +local set = vim.api.nvim_set_var + +-- Fix moving through lines 'gk' and 'gj' +vim.wo.linebreak = true + +-- Enable break indent +vim.o.breakindent = true + +-- Use the new FileType system of Neovim. +-- let g:do_filetype_lua = 1 + +-- Save undo history +vim.o.undofile = true + +-- Show lines number (hybrid) +vim.wo.number = true +vim.wo.relativenumber = true + +-- Keep signcolumn on by default +vim.wo.signcolumn = "yes" + +-- Case-insensitive searching UNLESS \C or capital in search +vim.o.ignorecase = true +vim.o.smartcase = true + +-- To have a extra line :) +vim.o.cmdheight = 0 + +-- Set wrap for words +vim.wo.wrap = true + +-- Always show tabs +vim.o.showtabline = 2 + +-- Show xtra spaces +vim.opt.list = true + +-- Set wildmenu for later use +vim.o.wildmenu = true + +-- Highlighting search +vim.o.hlsearch = true + +-- Set ruler for better look +vim.o.ruler = true + +-- No nice message +vim.o.hidden = true + +-- Partial commands only in the screen +vim.o.showcmd = true + +-- Match braces when inserting new ones :) +vim.o.showmatch = true + +-- Cursor line +---- Cursor column +vim.o.cursorline = true +vim.wo.cursorline = true +vim.o.cursorcolumn = true +vim.wo.cursorcolumn = true + +-- Off scroll when moving through the buffer +vim.o.scrolloff = 40 + +-- For terminal RGB colours +vim.go.termguicolors = true + +-- Colours, I believe +vim.go.t_Co = "256" +vim.go.t_ut = "" + +-- Space for tabs +vim.o.laststatus = 3 + +-- Space for tabs +vim.o.softtabstop = 2 + +-- Expand tab to use spaces instead +vim.o.expandtab = true + +-- Space for tabs +vim.o.tabstop = 2 + +-- Space for tabs +vim.bo.shiftwidth = 2 + +-- Space for tabs +vim.o.shiftwidth = 2 + +-- Format options to not create new lines with comments +vim.o.formatoptions = "tqj" + +-- Mouse working with neovim +vim.o.mouse = "a" + +-- viminfo file +-- vim.o.viminfo = vim.o.viminfo .. '~/.config/nvim/viminfo' + +-- Spell language to English (UK) +vim.o.spelllang = "en_gb" +vim.bo.spelllang = "en_gb" + +-- Global statusline. +vim.opt.laststatus = 3 + +-- When "on" the commands listed below move the cursor to the first non-blank +-- of the line. When off the cursor is kept in the same column (if possible). +-- https://neovim.io/doc/user/options.html#'startofline' +vim.opt.startofline = true + +-- Columns line "limit" +-- vim.o.cc = '85' + +-- Set path for better searching across the system +-- vim.o.path = vim.o.path .. '**' + +-- Complete options +vim.o.completeopt = "menuone,longest,noselect" +vim.o.shortmess = vim.o.shortmess .. "c" + +-- Menu Transparency. +vim.go.pumblend = 10 + +--------------------Variables----------------- + +set("one_allow_itali:set cursorlinec:set cursorlines", 1) +set("do_filetype_lua", 1) +set("MRU_File", "~/.cache/vim_mru_files") + +--------------------API------------------------ + +-- Change title accordingly. +-- option('title', true) + +-- Set clipboard to be global across the system +option("clipboard", "unnamedplus") + +-- Basic fold column +option("foldcolumn", "1") + +-- Set dictionary to language spell +option("dictionary", "/usr/share/dict/words") + +-- Wildignore for when opening files :0 +option("wildignore", "*/tmp*/,*/node_modules/*,_site,*/__pycache__/,*/venv/*,*/target/*,*/.vim$,~$,*/.log") + +-- Folding +option("foldmethod", "syntax") + +-- File format for neovim reading +option("fileformat", "unix") diff --git a/config/nvim/lua/plugin-manager.lua b/config/nvim/lua/plugin-manager.lua new file mode 100644 index 0000000..aafa60f --- /dev/null +++ b/config/nvim/lua/plugin-manager.lua @@ -0,0 +1,21 @@ +-- Package manager https://github.com/folke/lazy.nvim +-- :help lazy.nvim.txt + +-- To install lazy.nvim automatically. +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) + +-- Plugins start here: +require("lazy").setup("plugins") diff --git a/config/nvim/lua/plugins/barbecue.lua b/config/nvim/lua/plugins/barbecue.lua new file mode 100644 index 0000000..f82dfc4 --- /dev/null +++ b/config/nvim/lua/plugins/barbecue.lua @@ -0,0 +1,90 @@ +-- Winbar with context. +return { + "utilyre/barbecue.nvim", + dependencies = { + "neovim/nvim-lspconfig", + "SmiteshP/nvim-navic", + "kyazdani42/nvim-web-devicons", -- Optional + }, + config = { + theme = "catppuccin", + + -- If you set this to false, floating windows will look weird + exclude_float = true, + + -- Instead of excluding countless number of filetypes, barbecue tries to only show on some buftypes + -- "": file buffer + -- "nofile": e.g. nvim-tree and nvim-dap-ui + -- "prompt": e.g. telescope.nvim and nvim-fzf + -- "terminal": e.g. fterm.nvim and toggleterm.nvim + -- ... + include_buftypes = { "" }, + + ---Filetypes not to enable winbar in. + --- + ---@type string[] + exclude_filetypes = { + "", + "txt", + "markdown", + }, + + -- :help events + -- :help [event] (like :help BufWinEnter) + update_events = { + "BufWinEnter", + "BufWritePost", + "CursorMoved", + "CursorMovedI", + "TextChanged", + "TextChangedI", + }, + + -- Show `~  ...` instead of `/  home  user  ...` + tilde_home = true, + + -- Your winbar will have a little padding from the edge + prefix = " ", + + -- The sign between each entry + separator = "  ", + + -- Show if lsp context is available but there is nothing to show + no_info_indicator = "…", + + -- Symbol to show if file has been modified (not saved). It's usually `[+]` in vim + -- `nil` to disable + modified_indicator = nil, + + -- Icons passed to nvim-navic + icons = { + File = " ", + Module = " ", + Namespace = " ", + Package = " ", + Class = " ", + Method = " ", + Property = " ", + Field = " ", + Constructor = " ", + Enum = "練", + Interface = "練", + Function = " ", + Variable = " ", + Constant = " ", + String = " ", + Number = " ", + Boolean = "◩ ", + Array = " ", + Object = " ", + Key = " ", + Null = "ﳠ ", + EnumMember = " ", + Struct = " ", + Event = " ", + Operator = " ", + TypeParameter = " ", + Define = " ", + }, + }, +} diff --git a/config/nvim/lua/plugins/close-buffers.lua b/config/nvim/lua/plugins/close-buffers.lua new file mode 100644 index 0000000..088b8a8 --- /dev/null +++ b/config/nvim/lua/plugins/close-buffers.lua @@ -0,0 +1 @@ +return { "kazhala/close-buffers.nvim" } diff --git a/config/nvim/lua/plugins/commentbox.lua b/config/nvim/lua/plugins/commentbox.lua new file mode 100644 index 0000000..a8e99c7 --- /dev/null +++ b/config/nvim/lua/plugins/commentbox.lua @@ -0,0 +1,4 @@ +return { + "LudoPinelli/comment-box.nvim", + opts = {}, +} diff --git a/config/nvim/lua/plugins/fold-preview.lua b/config/nvim/lua/plugins/fold-preview.lua new file mode 100644 index 0000000..197f085 --- /dev/null +++ b/config/nvim/lua/plugins/fold-preview.lua @@ -0,0 +1,29 @@ +return { + "anuvyklack/fold-preview.nvim", + dependencies = { "anuvyklack/keymap-amend.nvim", "ray-x/lsp_signature.nvim" }, + config = function() + local fp = require("fold-preview") + local map = require("fold-preview").mapping + local keymap = vim.keymap + keymap.amend = require("keymap-amend") + + fp.setup({ + default_keybindings = false, + -- another settings + }) + + keymap.amend("n", "K", function(original) + if not fp.show_preview() then original() end + -- or + -- if not fp.toggle_preview() then original() end + -- to close preview on second press on K. + end) + keymap.amend("n", "h", map.close_preview_open_fold) + keymap.amend("n", "l", map.close_preview_open_fold) + keymap.amend("n", "zo", map.close_preview) + keymap.amend("n", "zO", map.close_preview) + keymap.amend("n", "zc", map.close_preview_without_defer) + keymap.amend("n", "zR", map.close_preview) + keymap.amend("n", "zM", map.close_preview_without_defer) + end, +} diff --git a/config/nvim/lua/plugins/gitsigns.lua b/config/nvim/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..c0362fb --- /dev/null +++ b/config/nvim/lua/plugins/gitsigns.lua @@ -0,0 +1,87 @@ +-- Show signs of GIT written in lua +return { + "lewis6991/gitsigns.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + config = { + signs = { + add = { hl = "GitSignsAdd", text = "┃", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" }, + change = { hl = "GitSignsChange", text = "┃", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" }, + delete = { hl = "GitSignsDelete", text = "_", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, + topdelete = { hl = "GitSignsDelete", text = "‾", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, + changedelete = { hl = "GitSignsChange", text = "~", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" }, + }, + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + numhl = false, -- Toggle with `:Gitsigns toggle_numhl` + linehl = false, -- Toggle with `:Gitsigns toggle_linehl` + word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map("n", "]c", function() + if vim.wo.diff then return "]c" end + vim.schedule(function() gs.next_hunk() end) + return "" + end, { expr = true }) + + map("n", "[c", function() + if vim.wo.diff then return "[c" end + vim.schedule(function() gs.prev_hunk() end) + return "" + end, { expr = true }) + + -- Actions + map("n", "hs", gs.stage_hunk, { desc = "Stage Hunk" }) + map("n", "hr", gs.reset_hunk, { desc = "Reset Hunk" }) + map("v", "hs", function() gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end) + map("v", "hr", function() gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end) + map("n", "hS", gs.stage_buffer, { desc = "Stage Buffer" }) + map("n", "hu", gs.undo_stage_hunk, { desc = "Undo Stage Hunk" }) + map("n", "hR", gs.reset_buffer, { desc = "Reset Buffer" }) + map("n", "hp", gs.preview_hunk, { desc = "Preview Hunk" }) + map("n", "hb", function() gs.blame_line({ full = true }) end, { desc = "Blame Line" }) + map("n", "tb", gs.toggle_current_line_blame, { desc = "Toggle Current Line Blame" }) + map("n", "hd", gs.diffthis, { desc = "Diff This" }) + map("n", "hD", function() gs.diffthis("~") end) + map("n", "td", gs.toggle_deleted, { desc = "Toggle Deleted" }) + + -- Text object + map({ "o", "x" }, "ih", ":Gitsigns select_hunk") + end, + watch_gitdir = { + interval = 1000, + follow_files = true, + }, + attach_to_untracked = true, + current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` + current_line_blame_opts = { + virt_text = true, + virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align' + delay = 1000, + }, + current_line_blame_formatter_opts = { + relative_time = false, + }, + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, -- Use default + max_file_length = 40000, + preview_config = { + -- Options passed to nvim_open_win + border = "single", + style = "minimal", + relative = "cursor", + row = 0, + col = 1, + }, + yadm = { + enable = false, + }, + }, +} diff --git a/config/nvim/lua/plugins/harpoon.lua b/config/nvim/lua/plugins/harpoon.lua new file mode 100644 index 0000000..a499be9 --- /dev/null +++ b/config/nvim/lua/plugins/harpoon.lua @@ -0,0 +1 @@ +return { "ThePrimeagen/harpoon" } diff --git a/config/nvim/lua/plugins/incline.lua b/config/nvim/lua/plugins/incline.lua new file mode 100644 index 0000000..da0e646 --- /dev/null +++ b/config/nvim/lua/plugins/incline.lua @@ -0,0 +1,70 @@ +-- Floating statuslines for Neovim +-- https://github.com/b0o/incline.nvim +-- +-- Lightweight floating statuslines, best used with +-- Neovim's global statusline (set laststatus=3). + +return { + "b0o/incline.nvim", + config = { + debounce_threshold = { + falling = 50, + rising = 0, + }, + hide = { + cursorline = true, + focused_win = false, + only_win = true, + }, + highlight = { + groups = { + InclineNormal = { + default = true, + group = "NormalFloat", + }, + InclineNormalNC = { + default = true, + group = "NormalFloat", + }, + }, + }, + ignore = { + buftypes = "special", + filetypes = {}, + floating_wins = true, + unlisted_buffers = true, + wintypes = "special", + }, + render = "basic", + window = { + margin = { + horizontal = 1, + vertical = 1, + }, + options = { + signcolumn = "no", + wrap = false, + }, + padding = 1, + padding_char = " ", + placement = { + horizontal = "right", + vertical = "top", + }, + width = "fit", + winhighlight = { + active = { + EndOfBuffer = "None", + Normal = "InclineNormal", + Search = "None", + }, + inactive = { + EndOfBuffer = "None", + Normal = "InclineNormalNC", + Search = "None", + }, + }, + zindex = 10, + }, + }, +} diff --git a/config/nvim/lua/plugins/lazy.lua b/config/nvim/lua/plugins/lazy.lua new file mode 100644 index 0000000..02d6233 --- /dev/null +++ b/config/nvim/lua/plugins/lazy.lua @@ -0,0 +1,25 @@ +return { + -- + -- Menu + -- + -- Icons on menu + "onsails/lspkind-nvim", + + -- Restore folds and cursor position + "senderle/restoreview", + + -- + -- Appearance + -- + + -- Status information for LSP. + "j-hui/fidget.nvim", + + -- Close buffer without messing up with the window. + "famiu/bufdelete.nvim", + + "nyoom-engineering/oxocarbon.nvim", + + -- JSONLS + "b0o/schemastore.nvim", +} diff --git a/config/nvim/lua/plugins/legendary.lua b/config/nvim/lua/plugins/legendary.lua new file mode 100644 index 0000000..e2b41f6 --- /dev/null +++ b/config/nvim/lua/plugins/legendary.lua @@ -0,0 +1,9 @@ +return { + "mrjones2014/legendary.nvim", + -- since legendary.nvim handles all your keymaps/commands, + -- its recommended to load legendary.nvim before other plugins + priority = 10000, + lazy = false, + -- sqlite is only needed if you want to use frecency sorting + -- dependencies = { 'kkharji/sqlite.lua' } +} diff --git a/config/nvim/lua/plugins/marks.lua b/config/nvim/lua/plugins/marks.lua new file mode 100644 index 0000000..699391e --- /dev/null +++ b/config/nvim/lua/plugins/marks.lua @@ -0,0 +1,36 @@ +-- Signs for built-in marks. + +return { + "chentoast/marks.nvim", + config = { + -- whether to map keybinds or not. default true + default_mappings = true, + -- which builtin marks to show. default {} + builtin_marks = { ".", "<", ">", "^" }, + -- whether movements cycle back to the beginning/end of buffer. default true + cyclic = true, + -- whether the shada file is updated after modifying uppercase marks. default false + force_write_shada = false, + -- how often (in ms) to redraw signs/recompute mark positions. + -- higher values will have better performance but may cause visual lag, + -- while lower values may cause performance penalties. default 150. + refresh_interval = 250, + -- sign priorities for each type of mark - builtin marks, uppercase marks, lowercase + -- marks, and bookmarks. + -- can be either a table with all/none of the keys, or a single number, in which case + -- the priority applies to all marks. + -- default 10. + sign_priority = { lower = 10, upper = 15, builtin = 8, bookmark = 20 }, + -- disables mark tracking for specific filetypes. default {} + excluded_filetypes = {}, + -- marks.nvim allows you to configure up to 10 bookmark groups, each with its own + -- sign/virttext. Bookmarks can be used to group together positions and quickly move + -- across multiple buffers. default sign is '!@#$%^&*()' (from 0 to 9), and + -- default virt_text is "". + bookmark_0 = { + sign = "⚑", + virt_text = "hello world", + }, + mappings = {}, + }, +} diff --git a/config/nvim/lua/plugins/mini.lua b/config/nvim/lua/plugins/mini.lua new file mode 100644 index 0000000..df8a858 --- /dev/null +++ b/config/nvim/lua/plugins/mini.lua @@ -0,0 +1,131 @@ +return { + "echasnovski/mini.nvim", + version = "*", + config = function() + -- Common configuration presets + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-basics.md + require("mini.basics").setup() + + -- Fast and flexible start screen + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-starter.md + local starter = require("mini.starter") + starter.setup({ + header = table.concat({ + " ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ", + " ▄▀░░░░░░░░░░░░▄░░░░░░░▀▄ ", + " █░░▄░░░░▄░░░░░░░░░░░░░░█ ", + " █░░░░░░░░░░░░▄█▄▄░░▄░░░█ ▄▄▄ ", + "▄▄▄▄▄ █░░░░░░▀░░░░▀█░░▀▄░░░░░█▀▀░██ ", + "██▄▀██▄█░░░▄░░░░░░░██░░░░▀▀▀▀▀░░░░██ ", + " ▀██▄▀██░░░░░░░░▀░██▀░░░░░░░░░░░░░▀██", + " ▀████░▀░░░░▄░░░██░░░▄█░░░░▄░▄█░░██", + " ▀█░░░░▄░░░░░██░░░░▄░░░▄░░▄░░░██", + " ▄█▄░░░░░░░░░░░▀▄░░▀▀▀▀▀▀▀▀░░▄▀ ", + " █▀▀█████████▀▀▀▀████████████▀ ", + " ████▀ ███▀ ▀███ ▀██▀ ", + }, "\n"), + evaluate_single = true, + items = { + starter.sections.telescope(), + starter.sections.builtin_actions(), + starter.sections.recent_files(5, true, true), + }, + content_hooks = { + starter.gen_hook.adding_bullet(), + starter.gen_hook.aligning("center", "center"), + }, + }) + + -- Miscellaneous useful functions + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-misc.md + require("mini.misc").setup() + + -- Extend and create a/i textobjects + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-ai.md + require("mini.ai").setup() + + -- Align text interactively + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-align.md + require("mini.align").setup() + + -- Animate common Neovim actions + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-animate.md + require("mini.animate").setup() + + -- Go forward/backward with square brackets + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-bracketed.md + require("mini.bracketed").setup() + + -- Comment lines + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-comment.md + require("mini.comment").setup() + + -- Autocompletion and signature help plugin + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-completion.md + require("mini.completion").setup() + + -- Automatic highlighting of word under cursor + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-cursorword.md + require("mini.cursorword").setup() + + -- Highlight patterns in text + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-hipatterns.md + local hipatterns = require("mini.hipatterns") + hipatterns.setup({ + highlighters = { + -- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE' + fixme = { pattern = "%f[%w]()FIXME()%f[%W]", group = "MiniHipatternsFixme" }, + hack = { pattern = "%f[%w]()HACK()%f[%W]", group = "MiniHipatternsHack" }, + todo = { pattern = "%f[%w]()TODO()%f[%W]", group = "MiniHipatternsTodo" }, + note = { pattern = "%f[%w]()NOTE()%f[%W]", group = "MiniHipatternsNote" }, + + -- Highlight hex color strings (`#rrggbb`) using that color + hex_color = hipatterns.gen_highlighter.hex_color(), + }, + }) + + -- Visualize and work with indent scope + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-indentscope.md + require("mini.indentscope").setup() + + -- Jump to next/previous single character + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-jump.md + require("mini.jump").setup() + + -- Jump within visible lines via iterative label filtering + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-jump2d.md + require("mini.jump2d").setup() + + -- Window with buffer text overview, scrollbar, and highlights + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-map.md + require("mini.map").setup() + + -- Move any selection in any direction + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-move.md + require("mini.move").setup() + + -- Text edit operators + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-operators.md + -- require("mini.operators").setup() + + -- Minimal and fast autopairs + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-pairs.md + require("mini.pairs").setup() + + -- Split and join arguments + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-splitjoin.md + require("mini.splitjoin").setup() + + -- Minimal and fast statusline module with opinionated default look + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-statusline.md + require("mini.statusline").setup() + + -- Minimal and fast tabline showing listed buffers + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-tabline.md + require("mini.tabline").setup() + + -- Work with trailing whitespace + -- https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-trailspace.md + require("mini.trailspace").setup() + end, +} diff --git a/config/nvim/lua/plugins/neo-tree.lua b/config/nvim/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..f48433b --- /dev/null +++ b/config/nvim/lua/plugins/neo-tree.lua @@ -0,0 +1,415 @@ +-- File-tree manager. + +-- Unless you are still migrating, remove the deprecated commands from v1.x +vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) + +return { + "nvim-neo-tree/neo-tree.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "kyazdani42/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + { + -- only needed if you want to use the commands with "_with_window_picker" suffix + "s1n7ax/nvim-window-picker", + config = function() + require("window-picker").setup({ + autoselect_one = true, + include_current = false, + filter_rules = { + -- filter using buffer options + bo = { + -- if the file type is one of following, the window will be ignored + filetype = { "neo-tree", "neo-tree-popup", "notify" }, + + -- if the buffer type is one of following, the window will be ignored + buftype = { "terminal", "quickfix" }, + }, + }, + other_win_hl_color = "#e35e4f", + }) + end, + }, + }, + config = function() + -- If you want icons for diagnostic errors, you'll need to define them somewhere: + vim.fn.sign_define("DiagnosticSignError", { text = " ", texthl = "DiagnosticSignError" }) + vim.fn.sign_define("DiagnosticSignWarn", { text = " ", texthl = "DiagnosticSignWarn" }) + vim.fn.sign_define("DiagnosticSignInfo", { text = " ", texthl = "DiagnosticSignInfo" }) + vim.fn.sign_define("DiagnosticSignHint", { text = "󰌵", texthl = "DiagnosticSignHint" }) + + require("neo-tree").setup({ + close_if_last_window = true, -- Close Neo-tree if it is the last window left in the tab + popup_border_style = "rounded", -- "double", "none", "rounded", "shadow", "single" or "solid" + enable_git_status = true, + enable_diagnostics = true, + enable_normal_mode_for_inputs = false, -- Enable normal mode for input dialogs. + + open_files_do_not_replace_types = { "terminal", "trouble", "qf" }, -- when opening files, do not use windows containing these filetypes or buftypes + + -- popup_border_style is for input and confirmation dialogs. + -- Configurtaion of floating window is done in the individual source sections. + -- "NC" is a special style that works well with NormalNC set + close_floats_on_escape_key = true, + default_source = "filesystem", + git_status_async = true, + log_level = "info", -- "trace", "debug", "info", "warn", "error", "fatal" + log_to_file = false, -- true, false, "/path/to/file.log", use :NeoTreeLogs to show the file + open_files_in_last_window = true, -- false = open files in top left window + resize_timer_interval = 100, -- in ms, needed for containers to redraw right aligned and faded content + sort_case_insensitive = true, -- used when sorting files and directories in the tree + use_popups_for_input = false, -- If false, inputs will use vim.ui.input() instead of custom floats. + sort_function = nil, -- use a custom function for sorting files and directories in the tree + + event_handlers = { + -- { + -- event = "before_render", + -- handler = function (state) + -- -- add something to the state that can be used by custom components + -- end + -- }, + -- { + -- event = "file_opened", + -- handler = function(file_path) + -- --auto close + -- require("neo-tree").close_all() + -- end + -- }, + -- { + -- event = "file_opened", + -- handler = function(file_path) + -- --clear search after opening a file + -- require("neo-tree.sources.filesystem").reset_search() + -- end + -- }, + -- { + -- event = "file_renamed", + -- handler = function(args) + -- -- fix references to file + -- print(args.source, " renamed to ", args.destination) + -- end + -- }, + -- { + -- event = "file_moved", + -- handler = function(args) + -- -- fix references to file + -- print(args.source, " moved to ", args.destination) + -- end + -- }, + { + event = "neo_tree_buffer_enter", + handler = function() + vim.cmd("set winbar=") + vim.cmd("highlight CursorLine gui='bold'") + vim.cmd("highlight CursorColumn guibg=NONE") + --vim.cmd("set guicursor+=a:InvisibleCursor") + --vim.cmd("highlight InvisibleCursor gui=reverse blend=100") + end, + }, + { + event = "neo_tree_buffer_leave", + handler = function() + --vim.cmd("set guicursor-=a:InvisibleCursor") + vim.cmd("highlight CursorLine gui=NONE") + end, + }, + }, + + default_component_configs = { + container = { + enable_character_fade = true, + }, + indent = { + indent_size = 2, + padding = 1, -- extra padding on left hand side + -- indent guides + with_markers = true, + indent_marker = "│", + last_indent_marker = "└", + highlight = "NeoTreeIndentMarker", + -- expander config, needed for nesting files + with_expanders = true, -- if nil and file nesting is enabled, will enable expanders + expander_collapsed = "", + expander_expanded = "", + expander_highlight = "NeoTreeExpander", + }, + icon = { + folder_closed = "", + folder_open = "", + folder_empty = "-", + -- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there + -- then these will never be used. + default = "*", + highlight = "NeoTreeFileIcon", + }, + modified = { + symbol = "[+]", + highlight = "NeoTreeModified", + }, + name = { + trailing_slash = true, + use_git_status_colors = false, + highlight = "NeoTreeFileName", + }, + git_status = { + symbols = { + -- Change type + added = "˖", -- or "✚", but this is redundant info if you use git_status_colors on the name + modified = "±", -- or "", but this is redundant info if you use git_status_colors on the name + deleted = "✕", -- this can only be used in the git_status source + renamed = "↪", -- this can only be used in the git_status source + -- Status type + untracked = "?", + ignored = "⍨", + unstaged = "·", + staged = "✓", + conflict = "", + }, + }, + }, + renderers = { + directory = { + { "indent" }, + { "icon" }, + { "current_filter" }, + { + "container", + width = "100%", + right_padding = 0, + --max_width = 60, + content = { + { "name", zindex = 10 }, + -- { + -- "symlink_target", + -- zindex = 10, + -- highlight = "NeoTreeSymbolicLinkTarget", + -- }, + { "clipboard", zindex = 10 }, + { "diagnostics", errors_only = true, zindex = 20, align = "right" }, + }, + }, + }, + file = { + { "indent" }, + { "icon" }, + { + "container", + width = "100%", + right_padding = 0, + --max_width = 60, + content = { + { + "name", + use_git_status_colors = false, + zindex = 10, + }, + -- { + -- "symlink_target", + -- zindex = 10, + -- highlight = "NeoTreeSymbolicLinkTarget", + -- }, + { "clipboard", zindex = 10 }, + { "bufnr", zindex = 10 }, + -- { "harpoon_index" }, --> This is what actually adds the component in where you want it + { "modified", zindex = 20, align = "right" }, + { "diagnostics", zindex = 20, align = "right" }, + { "git_status", zindex = 20, align = "right" }, + }, + }, + }, + }, + -- A list of functions, each representing a global custom command + -- that will be available in all sources (if not overridden in `opts[source_name].commands`) + -- see `:h neo-tree-custom-commands-global` + commands = {}, + window = { -- see https://github.com/MunifTanjim/nui.nvim/tree/main/lua/nui/popup for + -- possible options. These can also be functions that return these options. + position = "left", -- left, right, float, current + width = 40, -- applies to left and right positions + mapping_options = { + noremap = true, + nowait = true, + }, + popup = { -- settings that apply to float position only + size = { + height = "80%", + width = "50%", + }, + position = "50%", -- 50% means center it + -- you can also specify border here, if you want a different setting from + -- the global popup_border_style. + }, + -- Mappings for tree window. See `:h nep-tree-mappings` for a list of built-in commands. + -- You can also create your own commands by providing a function instead of a string. + mappings = { + [""] = { + "toggle_node", + nowait = false, -- disable `nowait` if you have existing combos starting with this char that you want to use + }, + ["<2-LeftMouse>"] = "open", + [""] = "open", + [""] = "cancel", -- close preview or floating neo-tree window + ["P"] = { "toggle_preview", config = { use_float = true } }, + ["l"] = "focus_preview", + ["S"] = "open_split", + ["s"] = "open_vsplit", + -- ["S"] = "split_with_window_picker", + -- ["s"] = "vsplit_with_window_picker", + ["t"] = "open_tabnew", + -- [""] = "open_drop", + -- ["t"] = "open_tab_drop", + ["w"] = "open_with_window_picker", + --["P"] = "toggle_preview", -- enter preview mode, which shows the current node without focusing + ["C"] = "close_node", + -- ['C'] = 'close_all_subnodes', + ["z"] = "close_all_nodes", + --["Z"] = "expand_all_nodes", + ["a"] = { + "add", + -- this command supports BASH style brace expansion ("x{a,b,c}" -> xa,xb,xc). see `:h neo-tree-file-actions` for details + -- some commands may take optional config options, see `:h neo-tree-mappings` for details + config = { + show_path = "none", -- "none", "relative", "absolute" + }, + }, + ["A"] = "add_directory", -- also accepts the optional config.show_path option like "add". this also supports BASH style brace expansion. + ["d"] = "delete", + ["r"] = "rename", + ["y"] = "copy_to_clipboard", + ["x"] = "cut_to_clipboard", + ["p"] = "paste_from_clipboard", + ["c"] = "copy", -- takes text input for destination, also accepts the optional config.show_path option like "add": + -- ["c"] = { + -- "copy", + -- config = { + -- show_path = "none" -- "none", "relative", "absolute" + -- } + --} + ["m"] = "move", -- takes text input for destination, also accepts the optional config.show_path option like "add". + ["q"] = "close_window", + ["R"] = "refresh", + ["?"] = "show_help", + ["<"] = "prev_source", + [">"] = "next_source", + }, + }, + nesting_rules = {}, + filesystem = { + commands = {}, -- Add a custom command or override a global one using the same function name + components = { + harpoon_index = function(config, node, state) + local Marked = require("harpoon.mark") + local path = node:get_id() + local succuss, index = pcall(Marked.get_index_of, path) + if succuss and index and index > 0 then + return { + text = string.format(" ⥤ %d", index), -- <-- Add your favorite harpoon like arrow here + highlight = config.highlight or "NeoTreeDirectoryIcon", + } + else + return {} + end + end, + }, + filtered_items = { + visible = false, -- when true, they will just be displayed differently than normal items + hide_dotfiles = false, + hide_gitignored = false, + hide_hidden = true, -- only works on Windows for hidden files/directories + hide_by_name = { + ".git", + ".DS_Store", + "thumbs.db", + ".idea", + ".mypy_cache", + "node_modules", + }, + hide_by_pattern = { -- uses glob style patterns + --"*.meta", + --"*/src/*/tsconfig.json", + "*-cache", + "*.cache", + ".null-ls_*", + }, + never_show = { -- remains hidden even if visible is toggled to true + ".DS_Store", + "thumbs.db", + }, + always_show = { -- remains visible even if other settings would normally hide it + ".gitignore", + ".gitkeep", + }, + }, + find_by_full_path_words = true, + group_empty_dirs = false, -- when true, empty folders will be grouped together + bind_to_cwd = false, -- true creates a 2-way binding between vim's cwd and neo-tree's root + search_limit = 50, -- max number of search results when using filters + follow_current_file = { + enabled = false, -- This will find and focus the file in the active buffer every time + -- -- the current file is changed while the tree is open. + leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` + }, + hijack_netrw_behavior = "open_default", -- netrw disabled, opening a directory opens neo-tree + -- in whatever position is specified in window.position + -- "open_current", -- netrw disabled, opening a directory opens within the + -- window like netrw would, regardless of window.position + -- "disabled", -- netrw left alone, neo-tree does not handle opening dirs + use_libuv_file_watcher = false, -- This will use the OS level file watchers to detect changes + -- instead of relying on nvim autocmd events. + window = { + mappings = { + ["."] = "set_root", + ["/"] = "fuzzy_finder", + ["#"] = "fuzzy_sorter", -- fuzzy sorting using the fzy algorithm + [""] = "navigate_up", + [""] = "navigate_up", + [""] = "clear_filter", + ["D"] = "fuzzy_finder_directory", + ["f"] = "filter_on_submit", + ["gn"] = "next_git_modified", + ["gp"] = "prev_git_modified", + ["H"] = "toggle_hidden", + }, + fuzzy_finder_mappings = { -- define keymaps for filter popup window in fuzzy_finder_mode + [""] = "move_cursor_down", + [""] = "move_cursor_down", + [""] = "move_cursor_up", + [""] = "move_cursor_up", + }, + }, + }, + buffers = { + follow_current_file = { + enabled = true, -- This will find and focus the file in the active buffer every time + -- -- the current file is changed while the tree is open. + leave_dirs_open = true, -- `false` closes auto expanded dirs, such as with `:Neotree reveal` + }, + group_empty_dirs = true, -- when true, empty folders will be grouped together + show_unloaded = true, + window = { + mappings = { + ["bd"] = "buffer_delete", + [""] = "navigate_up", + ["."] = "set_root", + }, + }, + }, + git_status = { + window = { + position = "float", + mappings = { + ["A"] = "git_add_all", + ["gu"] = "git_unstage_file", + ["ga"] = "git_add_file", + ["gr"] = "git_revert_file", + ["gc"] = "git_commit", + ["gp"] = "git_push", + ["gg"] = "git_commit_and_push", + }, + }, + }, + }) + + vim.cmd([[nnoremap \ :Neotree reveal]]) + end, +} diff --git a/config/nvim/lua/plugins/neogen.lua b/config/nvim/lua/plugins/neogen.lua new file mode 100644 index 0000000..288cf62 --- /dev/null +++ b/config/nvim/lua/plugins/neogen.lua @@ -0,0 +1,20 @@ +local prefix = "a" +return { + "danymat/neogen", + cmd = "Neogen", + opts = { + snippet_engine = "luasnip", + languages = { + lua = { template = { annotation_convention = "ldoc" } }, + typescript = { template = { annotation_convention = "tsdoc" } }, + typescriptreact = { template = { annotation_convention = "tsdoc" } }, + }, + }, + keys = { + { prefix .. "", function() require("neogen").generate({ type = "current" }) end, desc = "Current" }, + { prefix .. "c", function() require("neogen").generate({ type = "class" }) end, desc = "Class" }, + { prefix .. "f", function() require("neogen").generate({ type = "func" }) end, desc = "Function" }, + { prefix .. "t", function() require("neogen").generate({ type = "type" }) end, desc = "Type" }, + { prefix .. "F", function() require("neogen").generate({ type = "file" }) end, desc = "File" }, + }, +} diff --git a/config/nvim/lua/plugins/null-ls.lua b/config/nvim/lua/plugins/null-ls.lua new file mode 100644 index 0000000..60cca82 --- /dev/null +++ b/config/nvim/lua/plugins/null-ls.lua @@ -0,0 +1,56 @@ +return { + "jose-elias-alvarez/null-ls.nvim", + config = function() + local null_ls = require("null-ls") + -- Check supported formatters and linters + -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/formatting + -- https://github.com/jose-elias-alvarez/null-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics + + -- Register any number of sources simultaneously + null_ls.setup({ + -- filetypes = { "markdown", "text" }, + sources = { + + -- Code Actions + null_ls.builtins.code_actions.eslint, + null_ls.builtins.code_actions.gitsigns, + null_ls.builtins.code_actions.refactoring, + null_ls.builtins.code_actions.shellcheck, + + -- Diagnostics + null_ls.builtins.diagnostics.actionlint, + null_ls.builtins.diagnostics.alex, + null_ls.builtins.diagnostics.ansiblelint, + null_ls.builtins.diagnostics.dotenv_linter, + null_ls.builtins.diagnostics.editorconfig_checker, + null_ls.builtins.diagnostics.eslint, + null_ls.builtins.diagnostics.jsonlint, + null_ls.builtins.diagnostics.luacheck, + null_ls.builtins.diagnostics.php, + null_ls.builtins.diagnostics.phpcs, + null_ls.builtins.diagnostics.phpstan, + null_ls.builtins.diagnostics.psalm, + null_ls.builtins.diagnostics.semgrep, + null_ls.builtins.diagnostics.shellcheck, + null_ls.builtins.diagnostics.stylelint, + null_ls.builtins.diagnostics.tfsec, + null_ls.builtins.diagnostics.trail_space, + null_ls.builtins.diagnostics.tsc, + null_ls.builtins.diagnostics.write_good, + null_ls.builtins.diagnostics.zsh, + + -- Formatting + null_ls.builtins.formatting.clang_format, + null_ls.builtins.formatting.fixjson, + null_ls.builtins.formatting.isort, + null_ls.builtins.formatting.jq, + null_ls.builtins.formatting.phpcsfixer, + null_ls.builtins.formatting.prettier, + null_ls.builtins.formatting.rome, + null_ls.builtins.formatting.shfmt.with({ + args = { "-i", "1", "-bn", "-ci", "-sr", "-kb", "-fn" }, + }), + }, + }) + end, +} diff --git a/config/nvim/lua/plugins/nvim-cmp.lua b/config/nvim/lua/plugins/nvim-cmp.lua new file mode 100644 index 0000000..e075af1 --- /dev/null +++ b/config/nvim/lua/plugins/nvim-cmp.lua @@ -0,0 +1,257 @@ +-- Completion menu. + +-- Icons to display. +local icons = { + Text = "  ", + Method = "  ", + Function = "  ", + Constructor = "  ", + Field = " ﰠ ", + Variable = "  ", + Class = " ﴯ ", + Interface = "  ", + Module = "  ", + Property = " ﰠ ", + Unit = " 塞 ", + Value = "  ", + Enum = "  ", + Keyword = "  ", + Snippet = "  ", + Color = "  ", + File = "  ", + Reference = "  ", + Folder = "  ", + EnumMember = "  ", + Constant = "  ", + Struct = " פּ ", + Event = "  ", + Operator = "  ", + TypeParameter = " T ", + Book = "  ", +} + +-- Load loaders from VSCode. +--require("luasnip.loaders.from_vscode").lazy_load({ +-- paths = { "~/.local/share/lazy/friendly-snippets" } +--}) + +return { + "hrsh7th/nvim-cmp", + dependencies = { + { "octaltree/cmp-look" }, + -- + { "hrsh7th/cmp-nvim-lsp" }, + -- + { "hrsh7th/cmp-nvim-lua" }, + -- Buffer words. + { "hrsh7th/cmp-buffer" }, + -- Path autocompletion. + { "hrsh7th/cmp-path" }, + -- + { "hrsh7th/cmp-cmdline" }, + -- + { "saadparwaiz1/cmp_luasnip" }, + -- + { "hrsh7th/vim-vsnip" }, + -- + { "rafamadriz/friendly-snippets" }, + -- Snippets for lua. + { "L3MON4D3/LuaSnip" }, --config = "luasnip" }, + -- + { "hrsh7th/cmp-vsnip" }, + -- + -- Signature for functions. + --{ 'hrsh7th/cmp-nvim-lsp-signature-help' }, + -- + { "hrsh7th/vim-vsnip-integ" }, + -- Make arimathetic operations. + { "hrsh7th/cmp-calc" }, + -- Emoji. + { "hrsh7th/cmp-emoji" }, + }, + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + require("luasnip.loaders.from_vscode").lazy_load() + luasnip.config.setup({}) + + -- Load specialities from LuaSnip. + -- Set it with VSCode-like mode. + luasnip.config.set_config({ + history = true, + updateevents = "TextChanged,TextChangedI", + }) + + cmp.setup({ + + -- Window documentation, for defining its dimensions. + window = { + -- Max 10 items on display for documentation. + max_height = 10, + completion = { + side_padding = 0, + col_offset = 1, + }, + }, + + -- Snippet support. + snippet = { + expand = function(args) require("luasnip").lsp_expand(args.body) end, + }, + + -- How the match works based on the input. + matching = { + -- Whethever we allow fuzzy matching or not. + disallow_fuzzy_matching = false, + }, + + -- Mapping each keybind. + mapping = { + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping.select_prev_item(), + + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.close(), + [""] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }), + [""] = function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif require("luasnip").expand_or_jumpable() then + vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-expand-or-jump", true, true, true), "") + else + fallback() + end + end, + [""] = function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif require("luasnip").jumpable(-1) then + vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-jump-prev", true, true, true), "") + else + fallback() + end + end, + }, + + -- Formatting the menu display. + formatting = { + fields = { "kind", "abbr", "menu" }, + format = function(_, vim_item) + vim_item.menu = vim_item.kind + + -- load lspkind icons + --vim_item.kind = string.format( + -- "%s %s", + -- icons[vim_item.kind], + -- vim_item.kind + --) + vim_item.kind = icons[vim_item.kind] + + --vim_item.menu = string.format( + -- "%s %s", + -- ({ + -- nvim_lsp = "力", + -- nvim_lua = "", + -- luasnip = icons.Color, + -- path = "﫶", + -- buffer = "﬘ ", + -- look = icons.Book, + -- emoji = "😎", + -- })[entry.source.name], + -- name + --) + + return vim_item + end, + }, + + -- Experimental features. + experimental = { + + -- It will type a shadow text of the intended completion. + ghost_text = { hl_group = "Comment" }, + }, + + -- Sources for completion, since it is modular; cmp accepts + -- Multiple modules. + sources = { + + -- Simple signature, normally outside an object. + --{ name = 'nvim_lsp_signature_help', priority = 15 }, + + -- More snippets. + -- For all types of languages. + { + name = "friendly-snippets", + priority = 11, + }, + + -- For the Nvim lua specifics commands. + { + name = "nvim_lua", + priority = 8, + }, + + -- Support with the current active LSP. + -- Anything that LSP supports and can share with CMP. + { + name = "nvim_lsp", + priority = 11, + --max_item_count = 10, + }, + + -- Snippets in general to facilitate life. + -- Type a often typed methods, like for in C. + -- { name = "luasnip", priority = 6 }, + + -- Show path based on the backslashes. + -- Type any path, relatively or globally. + { + name = "path", + priority = 9, + }, + + -- Words from buffer. + { + name = "buffer", + priority = 4, + }, + + -- Max item count. + + -- Dictionary for words. + -- Type any word that is on the /usr/share/dict/words + --{ + -- name = 'look', + -- priority = 1, + -- keyword_length = 3, + -- max_item_count = 4, + -- option = { + -- convert_case = true, + -- loud = true, + -- dict = '/usr/share/dict/words' + -- }, + --}, + + -- Emoji. + -- Activate with ":". + { name = "emoji", priority = 2, option = { insert = true } }, + + -- Calculate expressions based on the current line. + -- Activate with something like "4 + 5". + { + name = "calc", + priority = 10, + }, + }, + }) + end, +} + +-- The line beneath this is called `modeline`. See `:help modeline` +-- vim: ts=2 sts=2 sw=2 et diff --git a/config/nvim/lua/plugins/nvim-dap.lua b/config/nvim/lua/plugins/nvim-dap.lua new file mode 100644 index 0000000..2a91cc6 --- /dev/null +++ b/config/nvim/lua/plugins/nvim-dap.lua @@ -0,0 +1,92 @@ +-- +-- Shows how to use the DAP plugin to debug your code. +-- +-- Primarily focused on configuring the debugger for Go, but can +-- be extended to other languages as well. That's why it's called +-- kickstart.nvim and not kitchen-sink.nvim ;) + +return { + "mfussenegger/nvim-dap", + dependencies = { + -- Creates a beautiful debugger UI + "rcarriga/nvim-dap-ui", + + -- Installs the debug adapters for you + "williamboman/mason.nvim", + "jay-babu/mason-nvim-dap.nvim", + + -- Add your own debuggers here + "leoluz/nvim-dap-go", + }, + config = function() + local dap = require("dap") + local dapui = require("dapui") + + require("mason-nvim-dap").setup({ + -- Makes a best effort to setup the various debuggers with + -- reasonable debug configurations + automatic_setup = true, + automatic_installation = true, + + -- You can provide additional configuration to the handlers, + -- see mason-nvim-dap README for more information + handlers = {}, + + -- You'll need to check that you have the required things installed + -- online, please don't ask me how to install them :) + ensure_installed = { + -- Update this to ensure that you have the debuggers for the langs you want + "bash", + "delve", + "js", + "php", + "python", + }, + }) + + -- Basic debugging keymaps, feel free to change to your liking! + vim.keymap.set("n", "", dap.continue, { desc = "Debug: Start/Continue" }) + vim.keymap.set("n", "", dap.step_into, { desc = "Debug: Step Into" }) + vim.keymap.set("n", "", dap.step_over, { desc = "Debug: Step Over" }) + vim.keymap.set("n", "", dap.step_out, { desc = "Debug: Step Out" }) + vim.keymap.set("n", "Db", dap.toggle_breakpoint, { desc = "Debug: Toggle Breakpoint" }) + vim.keymap.set( + "n", + "DB", + function() dap.set_breakpoint(vim.fn.input("Breakpoint condition: ")) end, + { desc = "Debug: Set Breakpoint" } + ) + + -- Dap UI setup + -- For more information, see |:help nvim-dap-ui| + dapui.setup({ + -- Set icons to characters that are more likely to work in every terminal. + -- Feel free to remove or use ones that you like more! :) + -- Don't feel like these are good choices. + icons = { expanded = "▾", collapsed = "▸", current_frame = "*" }, + controls = { + icons = { + pause = "⏸", + play = "▶", + step_into = "⏎", + step_over = "⏭", + step_out = "⏮", + step_back = "b", + run_last = "▶▶", + terminate = "⏹", + disconnect = "⏏", + }, + }, + }) + + -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. + vim.keymap.set("n", "", dapui.toggle, { desc = "Debug: See last session result." }) + + dap.listeners.after.event_initialized["dapui_config"] = dapui.open + dap.listeners.before.event_terminated["dapui_config"] = dapui.close + dap.listeners.before.event_exited["dapui_config"] = dapui.close + + -- Install golang specific config + require("dap-go").setup() + end, +} diff --git a/config/nvim/lua/plugins/nvim-lspconfig.lua b/config/nvim/lua/plugins/nvim-lspconfig.lua new file mode 100644 index 0000000..c754157 --- /dev/null +++ b/config/nvim/lua/plugins/nvim-lspconfig.lua @@ -0,0 +1,81 @@ +return { + -- LSP auto-complete. + "neovim/nvim-lspconfig", + dependencies = { + -- Automatically install LSPs to stdpath for neovim + { "williamboman/mason.nvim", config = true }, + "williamboman/mason-lspconfig.nvim", + + -- Useful status updates for LSP + -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` + { "j-hui/fidget.nvim", tag = "legacy", opts = {} }, + + -- Additional lua configuration, makes nvim stuff amazing! + "folke/neodev.nvim", + }, + init = function() + -- disable lsp watcher. Too slow on linux + local ok, wf = pcall(require, "vim.lsp._watchfiles") + if ok then wf._watchfunc = function() + return function() end + end end + end, + config = function() + -- Switch for controlling whether you want autoformatting. + -- Use :KickstartFormatToggle to toggle autoformatting on or off + local format_is_enabled = true + vim.api.nvim_create_user_command("KickstartFormatToggle", function() + format_is_enabled = not format_is_enabled + print("Setting autoformatting to: " .. tostring(format_is_enabled)) + end, {}) + + -- Create an augroup that is used for managing our formatting autocmds. + -- We need one augroup per client to make sure that multiple clients + -- can attach to the same buffer without interfering with each other. + local _augroups = {} + local get_augroup = function(client) + if not _augroups[client.id] then + local group_name = "kickstart-lsp-format-" .. client.name + local id = vim.api.nvim_create_augroup(group_name, { clear = true }) + _augroups[client.id] = id + end + + return _augroups[client.id] + end + + -- Whenever an LSP attaches to a buffer, we will run this function. + -- + -- See `:help LspAttach` for more information about this autocmd event. + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("kickstart-lsp-attach-format", { clear = true }), + -- This is where we attach the autoformatting for reasonable clients + callback = function(args) + local client_id = args.data.client_id + local client = vim.lsp.get_client_by_id(client_id) + local bufnr = args.buf + + -- Only attach to clients that support document formatting + if not client.server_capabilities.documentFormattingProvider then return end + + -- Tsserver usually works poorly. Sorry you work with bad languages + -- You can remove this line if you know what you're doing :) + if client.name == "tsserver" then return end + + -- Create an autocmd that will run *before* we save the buffer. + -- Run the formatting command for the LSP that has just attached. + vim.api.nvim_create_autocmd("BufWritePre", { + group = get_augroup(client), + buffer = bufnr, + callback = function() + if not format_is_enabled then return end + + vim.lsp.buf.format({ + async = false, + filter = function(c) return c.id == client.id end, + }) + end, + }) + end, + }) + end, +} diff --git a/config/nvim/lua/plugins/nvim-origami.lua b/config/nvim/lua/plugins/nvim-origami.lua new file mode 100644 index 0000000..e2ca87a --- /dev/null +++ b/config/nvim/lua/plugins/nvim-origami.lua @@ -0,0 +1,9 @@ +return { + "chrisgrieser/nvim-origami", + event = "BufReadPost", -- later or on keypress would prevent saving folds + opts = { + keepFoldsAcrossSessions = true, + pauseFoldsOnSearch = true, + setupFoldKeymaps = true, + }, +} diff --git a/config/nvim/lua/plugins/nvim-regexplainer.lua b/config/nvim/lua/plugins/nvim-regexplainer.lua new file mode 100644 index 0000000..b461d87 --- /dev/null +++ b/config/nvim/lua/plugins/nvim-regexplainer.lua @@ -0,0 +1,5 @@ +return { + "bennypowers/nvim-regexplainer", + opts = {}, + ft = { "html", "javascript", "javascriptreact", "typescript", "typescriptreact" }, +} diff --git a/config/nvim/lua/plugins/nvim-surround.lua b/config/nvim/lua/plugins/nvim-surround.lua new file mode 100644 index 0000000..130c9ef --- /dev/null +++ b/config/nvim/lua/plugins/nvim-surround.lua @@ -0,0 +1,17 @@ +--[[ + Old text Command New text +-------------------------------------------------------------------------------- + surround_words ysiw) (surround_words) + make strings ys$" "make strings" + [delete ar*ound me!] ds] delete around me! + "change quot*es" cs'" "change quotes" + or tag* types csth1

or tag types

+ delete(functi*on calls) dsf function calls +]] + +return { + "kylechui/nvim-surround", + version = "*", -- Use for stability; omit to use `main` branch for the latest features + event = "VeryLazy", + config = function() require("nvim-surround").setup() end, +} diff --git a/config/nvim/lua/plugins/nvim-treesitter-context.lua b/config/nvim/lua/plugins/nvim-treesitter-context.lua new file mode 100644 index 0000000..4a13dd0 --- /dev/null +++ b/config/nvim/lua/plugins/nvim-treesitter-context.lua @@ -0,0 +1,9 @@ +return { + "nvim-treesitter/nvim-treesitter-context", + lazy = false, + enabled = true, + opts = { + enable = true, + mode = "cursor", -- cursor, or topline + }, +} diff --git a/config/nvim/lua/plugins/nvim-treesitter.lua b/config/nvim/lua/plugins/nvim-treesitter.lua new file mode 100644 index 0000000..033f227 --- /dev/null +++ b/config/nvim/lua/plugins/nvim-treesitter.lua @@ -0,0 +1,110 @@ +-- Treesitter (more highlight for syntax_on). + +return { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function() + require("nvim-treesitter.configs").setup({ + -- Add languages to be installed here that you want installed for treesitter + ensure_installed = { + "bash", + "c", + "cmake", + "comment", + "diff", + "dockerfile", + "gitignore", + "go", + "graphql", + "html", + "javascript", + "json", + "json5", + "latex", + "lua", + "markdown", + "php", + "phpdoc", + "python", + "regex", + "scss", + "terraform", + "todotxt", + "toml", + "tsx", + "typescript", + "vim", + "vimdoc", + "vue", + "yaml", + }, + + -- Autoinstall languages that are not installed. + auto_install = true, + + highlight = { + enable = true, + disable = {}, + --injections = { + -- python = { + -- docstrings: "markdown", + -- }, + --} + }, + indent = { enable = true }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "", + node_incremental = "", + scope_incremental = "", + node_decremental = "", + }, + }, + textobjects = { + select = { + enable = true, + lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ["aa"] = "@parameter.outer", + ["ia"] = "@parameter.inner", + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.outer", + ["ic"] = "@class.inner", + }, + }, + move = { + enable = true, + set_jumps = true, -- whether to set jumps in the jumplist + goto_next_start = { + ["]m"] = "@function.outer", + ["]]"] = "@class.outer", + }, + goto_next_end = { + ["]M"] = "@function.outer", + ["]["] = "@class.outer", + }, + goto_previous_start = { + ["[m"] = "@function.outer", + ["[["] = "@class.outer", + }, + goto_previous_end = { + ["[M"] = "@function.outer", + ["[]"] = "@class.outer", + }, + }, + swap = { + enable = true, + swap_next = { + ["a"] = "@parameter.inner", + }, + swap_previous = { + ["A"] = "@parameter.inner", + }, + }, + }, + }) + end, +} diff --git a/config/nvim/lua/plugins/pretty-fold.lua b/config/nvim/lua/plugins/pretty-fold.lua new file mode 100644 index 0000000..4278379 --- /dev/null +++ b/config/nvim/lua/plugins/pretty-fold.lua @@ -0,0 +1,55 @@ +-- Fold code. + +return { + "anuvyklack/pretty-fold.nvim", + config = { + fill_char = "•", + sections = { + left = { + "content", + }, + right = { + " ", + "number_of_folded_lines", + ": ", + "percentage", + " ", + function(config) return config.fill_char:rep(3) end, + }, + }, + + remove_fold_markers = false, + + -- Keep the indentation of the content of the fold string. + keep_indentation = true, + + -- Possible values: + -- "delete" : Delete all comment signs from the fold string. + -- "spaces" : Replace all comment signs with equal number of spaces. + -- false : Do nothing with comment signs. + process_comment_signs = "spaces", + + -- Comment signs additional to the value of `&commentstring` option. + comment_signs = { + { "/**", "*/" }, -- multiline comment + { "" }, -- multiline comment + { "%--[[", "--]]" }, -- multiline comment + }, + + -- List of patterns that will be removed from content foldtext section. + stop_words = { + "@brief%s*", -- (for C++) Remove '@brief' and all spaces after. + }, + + add_close_pattern = true, + matchup_patterns = { + { "{", "}" }, + { "%(", ")" }, -- % to escape lua pattern char + { "%[", "]" }, -- % to escape lua pattern char + { "if%s", "end" }, + { "do%s", "end" }, + { "for%s", "end" }, + { "function%s*%(", "end" }, -- 'function(' or 'function (' + }, + }, +} diff --git a/config/nvim/lua/plugins/project.lua b/config/nvim/lua/plugins/project.lua new file mode 100644 index 0000000..b65ec98 --- /dev/null +++ b/config/nvim/lua/plugins/project.lua @@ -0,0 +1,14 @@ +return { + { + "jay-babu/project.nvim", + name = "project_nvim", + event = "VeryLazy", + opts = { ignore_lsp = { "lua_ls" } }, + }, + { + "nvim-telescope/telescope.nvim", + optional = true, + dependencies = { "project_nvim" }, + opts = function() require("telescope").load_extension("projects") end, + }, +} diff --git a/config/nvim/lua/plugins/refactoring-nvim.lua b/config/nvim/lua/plugins/refactoring-nvim.lua new file mode 100644 index 0000000..859394e --- /dev/null +++ b/config/nvim/lua/plugins/refactoring-nvim.lua @@ -0,0 +1,97 @@ +return { + "ThePrimeagen/refactoring.nvim", + dependencies = { "nvim-lua/plenary.nvim", "nvim-treesitter/nvim-treesitter" }, + cmd = { "Refactor" }, + opts = {}, + keys = { + { + "re", + [[ lua require('refactoring').refactor('Extract Function')]], + { silent = true, expr = false }, + mode = { + "v", + "x", + }, + desc = "Extract Function", + }, + { + "rf", + [[ lua require('refactoring').refactor('Extract Function To File')]], + { silent = true, expr = false }, + mode = { + "v", + "x", + }, + desc = "Extract Function To File", + }, + { + "rv", + [[ lua require('refactoring').refactor('Extract Variable')]], + { silent = true, expr = false }, + mode = { + "v", + "x", + }, + desc = "Extract Variable", + }, + { + "ri", + [[ lua require('refactoring').refactor('Inline Variable')]], + { silent = true, expr = false }, + mode = { + "n", + "v", + "x", + }, + desc = "Inline Variable", + }, + { + "rb", + function() require("refactoring").refactor("Extract Block") end, + { silent = true, expr = false }, + mode = { + "n", + }, + desc = "Extract Block", + }, + { + "rbf", + function() require("refactoring").refactor("Extract Block To File") end, + { silent = true, expr = false }, + mode = { + "n", + }, + desc = "Extract Block To File", + }, + { + "rr", + function() require("refactoring").select_refactor() end, + { silent = true, expr = false }, + desc = "Select Refactor", + }, + { + "rp", + function() require("refactoring").debug.printf({ below = false }) end, + mode = { "n" }, + desc = "Debug: Print Function", + }, + { + "rd", + function() require("refactoring").debug.print_var({ normal = true, below = false }) end, + mode = { "n" }, + desc = "Debug: Print Variable", + }, + { + "rd", + function() require("refactoring").debug.print_var({ below = false }) end, + mode = { "v" }, + desc = "Debug: Print Variable", + }, + { + "rc", + function() require("refactoring").debug.cleanup({}) end, + mode = { "n" }, + desc = "Debug: Clean Up", + }, + }, +} diff --git a/config/nvim/lua/plugins/smartcolumn.lua b/config/nvim/lua/plugins/smartcolumn.lua new file mode 100644 index 0000000..0ecb9e5 --- /dev/null +++ b/config/nvim/lua/plugins/smartcolumn.lua @@ -0,0 +1,7 @@ +return { + "m4xshen/smartcolumn.nvim", + opts = { + colorcolumn = { "80", "100", "120" }, + disabled_filetypes = { "help", "text", "markdown", "json", "lazy", "starter", "neo-tree" }, + }, +} diff --git a/config/nvim/lua/plugins/stickybuf.lua b/config/nvim/lua/plugins/stickybuf.lua new file mode 100644 index 0000000..0aa0a63 --- /dev/null +++ b/config/nvim/lua/plugins/stickybuf.lua @@ -0,0 +1 @@ +return { "stevearc/stickybuf.nvim", opts = {} } diff --git a/config/nvim/lua/plugins/tabnine.lua b/config/nvim/lua/plugins/tabnine.lua new file mode 100644 index 0000000..6093975 --- /dev/null +++ b/config/nvim/lua/plugins/tabnine.lua @@ -0,0 +1,8 @@ +return { + "codota/tabnine-nvim", + name = "tabnine", + build = vim.loop.os_uname().sysname == "Windows_NT" and "pwsh.exe -file .\\dl_binaries.ps1" or "./dl_binaries.sh", + cmd = { "TabnineStatus", "TabnineDisable", "TabnineEnable", "TabnineToggle" }, + event = "User", + opts = { accept_keymap = "" }, +} diff --git a/config/nvim/lua/plugins/telescope-nvim.lua b/config/nvim/lua/plugins/telescope-nvim.lua new file mode 100644 index 0000000..884b6c5 --- /dev/null +++ b/config/nvim/lua/plugins/telescope-nvim.lua @@ -0,0 +1,132 @@ +-- Telescope, a see-all-through file manager. +return { + "nvim-telescope/telescope.nvim", + dependencies = { + "nvim-lua/popup.nvim", + "nvim-lua/plenary.nvim", + -- Fuzzy Finder Algorithm which requires local dependencies to be built. + -- Only load if `make` is available. Make sure you have the system + -- requirements installed. + { + "nvim-telescope/telescope-fzf-native.nvim", + -- NOTE: If you are having trouble with this installation, + -- refer to the README for telescope-fzf-native for more instructions. + build = "make", + cond = function() return vim.fn.executable("make") == 1 end, + }, + "nvim-telescope/telescope-file-browser.nvim", + }, + config = function() + local actions = require("telescope.actions") + local sorters = require("telescope.sorters") + local previewers = require("telescope.previewers") + + require("telescope").setup({ + defaults = { + mappings = { + i = { + [""] = actions.close, + [""] = false, + [""] = false, + }, + }, + vimgrep_arguments = { + "rg", + "-L", + "--color=never", + "--no-heading", + "--with-filename", + "--line-number", + "--column", + "--smart-case", + }, + + prompt_prefix = "  ", + selection_caret = " ", + entry_prefix = " ", + initial_mode = "insert", + selection_strategy = "reset", + sorting_strategy = "ascending", + layout_strategy = "horizontal", + layout_config = { + horizontal = { + prompt_position = "top", + preview_width = 0.55, + results_width = 0.8, + }, + vertical = { + mirror = false, + }, + width = 0.87, + height = 0.80, + preview_cutoff = 120, + }, + file_sorter = sorters.get_fuzzy_file, + file_ignore_patterns = { "node_modules", "dotbot" }, + generic_sorter = sorters.get_generic_fuzzy_sorter, + path_display = { "truncate" }, + winblend = 0, + border = {}, + borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, + color_devicons = true, + use_less = true, + set_env = { ["COLORTERM"] = "truecolor" }, -- default = nil, + file_previewer = previewers.vim_buffer_cat.new, + grep_previewer = previewers.vim_buffer_vimgrep.new, + qflist_previewer = previewers.vim_buffer_qflist.new, + -- Developer configurations: Not meant for general override + buffer_previewer_maker = previewers.buffer_previewer_maker, + }, + + extensions_list = { "themes", "terms" }, + }) + + pcall(require("telescope").load_extension, "fzf") + pcall(require("telescope").load_extension, "file_browser") + + -- See `:help telescope.builtin` + vim.keymap.set("n", "?", require("telescope.builtin").oldfiles, { desc = "[?] Find recently opened files" }) + vim.keymap.set("n", "", require("telescope.builtin").buffers, { desc = "[ ] Find existing buffers" }) + vim.keymap.set("n", "/", function() + -- You can pass additional configuration to telescope to change theme, layout, etc. + require("telescope.builtin").current_buffer_fuzzy_find(require("telescope.themes").get_dropdown({ + winblend = 10, + previewer = false, + })) + end, { desc = "[/] Fuzzily search in current buffer" }) + + vim.keymap.set( + "n", + "tg", + require("telescope.builtin").git_files, + { desc = "[T]elescope: Search [G]it files" } + ) + vim.keymap.set("n", "tf", require("telescope.builtin").find_files, { desc = "[T]elescope: Search [F]iles" }) + vim.keymap.set("n", "th", require("telescope.builtin").help_tags, { desc = "[T]elescope: Search [H]elp" }) + vim.keymap.set( + "n", + "tw", + require("telescope.builtin").grep_string, + { desc = "[T]elescope: Search current [W]ord" } + ) + vim.keymap.set( + "n", + "tr", + require("telescope.builtin").live_grep, + { desc = "[T]elescope: Search by G[r]ep" } + ) + vim.keymap.set( + "n", + "td", + require("telescope.builtin").diagnostics, + { desc = "[T]elescope: Search [D]iagnostics" } + ) + + vim.keymap.set( + "n", + "tb", + ":Telescope file_browser", + { desc = "[T]elescope: File [B]rowser", noremap = true } + ) + end, +} diff --git a/config/nvim/lua/plugins/theme.lua b/config/nvim/lua/plugins/theme.lua new file mode 100644 index 0000000..8c39b52 --- /dev/null +++ b/config/nvim/lua/plugins/theme.lua @@ -0,0 +1,68 @@ +--- https://github.com/catppuccin/nvim +return { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, + enabled = true, + lazy = false, + config = function() vim.cmd.colorscheme("catppuccin") end, + opts = { + flavour = "mocha", + transparent_background = true, + dim_inactive = { + enabled = true, + shade = "dark", + percentage = 0.15, + }, + integrations = { + alpha = true, + aerial = true, + barbecue = { + dim_dirname = true, -- directory name is dimmed by default + bold_basename = true, + dim_context = false, + alt_background = false, + }, + cmp = true, + dap = { enabled = true, enable_ui = true }, + gitsigns = true, + harpoon = true, + indent_blankline = { + enabled = true, + colored_indent_levels = false, + }, + mason = true, + neotree = true, + notify = true, + nvimtree = false, + native_lsp = { + enabled = true, + virtual_text = { + errors = { "italic" }, + hints = { "italic" }, + warnings = { "italic" }, + information = { "italic" }, + }, + underlines = { + errors = { "underline" }, + hints = { "underline" }, + warnings = { "underline" }, + information = { "underline" }, + }, + inlay_hints = { + background = true, + }, + }, + semantic_tokens = true, + symbols_outline = true, + telescope = { + enabled = true, + -- style = "nvchad" + }, + ts_rainbow = true, + treesitter = true, + lsp_trouble = true, + which_key = true, + }, + }, +} diff --git a/config/nvim/lua/plugins/trouble.lua b/config/nvim/lua/plugins/trouble.lua new file mode 100644 index 0000000..116ced3 --- /dev/null +++ b/config/nvim/lua/plugins/trouble.lua @@ -0,0 +1,56 @@ +-- Trouble for diagnostics of plugins +return { + "folke/trouble.nvim", + dependencies = "kyazdani42/nvim-web-devicons", + config = { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + + position = "bottom", -- position of the list can be: bottom, top, left, right + height = 10, -- height of the trouble list when position is top or bottom + width = 50, -- width of the list when position is left or right + icons = true, -- use devicons for filenames + mode = "workspace_diagnostics", -- "workspace_diagnostics", "document_diagnostics", "quickfix", "lsp_references", "loclist" + fold_open = "", -- icon used for open folds + fold_closed = "", -- icon used for closed folds + group = true, -- group results by file + padding = true, -- add an extra new line on top of the list + action_keys = { -- key mappings for actions in the trouble list + -- map to {} to remove a mapping, for example: + -- close = {}, + close = "q", -- close the list + cancel = "", -- cancel the preview and get back to your last window / buffer / cursor + refresh = "r", -- manually refresh + jump = { "", "" }, -- jump to the diagnostic or open / close folds + open_split = { "" }, -- open buffer in new split + open_vsplit = { "" }, -- open buffer in new vsplit + open_tab = { "" }, -- open buffer in new tab + jump_close = { "o" }, -- jump to the diagnostic and close the list + toggle_mode = "m", -- toggle between "workspace" and "document" diagnostics mode + toggle_preview = "P", -- toggle auto_preview + hover = "K", -- opens a small popup with the full multiline message + preview = "p", -- preview the diagnostic location + close_folds = { "zM", "zm" }, -- close all folds + open_folds = { "zR", "zr" }, -- open all folds + toggle_fold = { "zA", "za" }, -- toggle fold of current file + previous = "k", -- preview item + next = "j", -- next item + }, + indent_lines = true, -- add an indent guide below the fold icons + auto_open = false, -- automatically open the list when you have diagnostics + auto_close = false, -- automatically close the list when you have no diagnostics + auto_preview = true, -- automatically preview the location of the diagnostic. to close preview and go back to last window + auto_fold = false, -- automatically fold a file trouble list at creation + auto_jump = { "lsp_definitions" }, -- for the given modes, automatically jump if there is only a single result + signs = { + -- icons / text used for a diagnostic + error = "", + warning = "", + hint = "", + information = "", + other = "﫠", + }, + use_diagnostic_signs = false, -- enabling this will use the signs defined in your lsp client + }, +} diff --git a/config/nvim/lua/plugins/twilight.lua b/config/nvim/lua/plugins/twilight.lua new file mode 100644 index 0000000..be8ad2d --- /dev/null +++ b/config/nvim/lua/plugins/twilight.lua @@ -0,0 +1,24 @@ +-- Dim +return { + "folke/twilight.nvim", + config = { + dimming = { + alpha = 0.5, -- amount of dimming + inactive = false, -- when true, other windows will be fully dimmed (unless they contain the same buffer) + }, + context = 3, -- amount of lines we will try to show around the current line + treesitter = true, -- use treesitter when available for the filetype + -- treesitter is used to automatically expand the visible text, + -- but you can further control the types of nodes that should always be fully expanded + expand = { -- for treesitter, we we always try to expand to the top-most ancestor with these types + "function", + "while_statement", + "for_statement", + "switch_statement", + "method", + "table", + "if_statement", + }, + exclude = {}, -- exclude these filetypes + }, +} diff --git a/config/nvim/lua/plugins/vim-hexokinase.lua b/config/nvim/lua/plugins/vim-hexokinase.lua new file mode 100644 index 0000000..b7689b6 --- /dev/null +++ b/config/nvim/lua/plugins/vim-hexokinase.lua @@ -0,0 +1,54 @@ +-- Colorizer for strings. + +-- Minimise code. +local set = vim.api.nvim_set_var + +return { + "RRethy/vim-hexokinase", + build = "cd ~/.local/share/nvim/lazy/vim-hexokinase && make hexokinase", + init = function() + -- All possible highlighters + set("Hexokinase_highlighters", { + "virtual", + "sign_column", + "background", + "backgroundfull", + -- 'foreground', + -- 'foregroundfull' + }) + + -- Patterns to match for all filetypes + -- Can be a comma separated string or a list of strings + + -- All possible values + set("Hexokinase_optInPatterns", { + "full_hex", + "triple_hex", + "rgb", + "rgba", + "hsl", + "hsla", + "colour_names", + }) + + -- Filetype specific patterns to match + -- entry value must be comma seperated list + set("Hexokinase_ftOptInPatterns", { + css = "full_hex,rgb,rgba,hsl,hsla,colour_names", + html = "full_hex,rgb,rgba,hsl,hsla,colour_names", + }) + + -- Sample value, to keep default behaviour don't define this', variable + set("Hexokinase_ftEnabled", { + "css", + "html", + "javascript", + "scss", + "sass", + "lua", + }) + + -- Turn the colors on. + --vim.cmd('au BufEnter * HexokinaseTurnOn') + end, +} diff --git a/config/nvim/lua/plugins/vim-matchup.lua b/config/nvim/lua/plugins/vim-matchup.lua new file mode 100644 index 0000000..ae1e278 --- /dev/null +++ b/config/nvim/lua/plugins/vim-matchup.lua @@ -0,0 +1,23 @@ +-- Move faster between context. + +return { + "andymass/vim-matchup", + dependencies = "nvim-treesitter/nvim-treesitter", + config = { + highlight = { + enable = true, + disable = {}, + }, + indent = { + enable = false, + disable = {}, + }, + autotag = { + enable = true, + }, + matchup = { + enable = true, -- mandatory, false will disable the whole extension + --disable = { "c", "ruby" }, -- optional, list of language that will be disabled + }, + }, +} diff --git a/config/nvim/lua/plugins/vim-sleuth.lua b/config/nvim/lua/plugins/vim-sleuth.lua new file mode 100644 index 0000000..a0bea58 --- /dev/null +++ b/config/nvim/lua/plugins/vim-sleuth.lua @@ -0,0 +1 @@ +return { "tpope/vim-sleuth" } diff --git a/config/nvim/lua/plugins/wakatime.lua b/config/nvim/lua/plugins/wakatime.lua new file mode 100644 index 0000000..3923cf1 --- /dev/null +++ b/config/nvim/lua/plugins/wakatime.lua @@ -0,0 +1,5 @@ +return { + "wakatime/vim-wakatime", + lazy = false, + enabled = true, +} diff --git a/config/nvim/lua/plugins/which-key.lua b/config/nvim/lua/plugins/which-key.lua new file mode 100644 index 0000000..2b03a74 --- /dev/null +++ b/config/nvim/lua/plugins/which-key.lua @@ -0,0 +1,15 @@ +local vim = vim + +return { + "folke/which-key.nvim", + enabled = true, + lazy = false, + init = function() + vim.o.timeout = true + vim.o.timeoutlen = 300 + end, + opts = { + -- your configuration comes here + -- or leave it empty to use the default settings + }, +} diff --git a/config/nvim/spell/en.utf-8.add b/config/nvim/spell/en.utf-8.add new file mode 100644 index 0000000..3859461 --- /dev/null +++ b/config/nvim/spell/en.utf-8.add @@ -0,0 +1,3 @@ +Plugins +lua +plugins