.
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..9cf1062
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,19 @@
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 4ae672d..f445b65 100644
--- a/README.md
+++ b/README.md
@@ -1,128 +1,229 @@
+# kickstart.nvim
-# THIS IS A FORK
+## Introduction
-I have forked the original NvChad to make it easier to add my own stuff to it.
-I try to sync to the upstream, but we will see how good this goes.
+A starting point for Neovim that is:
----
-NvChad
+* Small
+* Single-file
+* Completely Documented
-
+**NOT** a Neovim distribution, but instead a starting point for your configuration.
-
-
-[![Neovim Minimum Version](https://img.shields.io/badge/Neovim-0.9.0-blueviolet.svg?style=flat-square&logo=Neovim&color=90E59A&logoColor=white)](https://github.com/neovim/neovim)
-[![GitHub Issues](https://img.shields.io/github/issues/NvChad/NvChad.svg?style=flat-square&label=Issues&color=d77982)](https://github.com/NvChad/NvChad/issues)
-[![Discord](https://img.shields.io/discord/869557815780470834?color=738adb&label=Discord&logo=discord&logoColor=white&style=flat-square)](https://discord.gg/gADmkJb9Fb)
-[![Matrix](https://img.shields.io/badge/Matrix-40aa8b.svg?style=flat-square&logo=Matrix&logoColor=white)](https://matrix.to/#/#nvchad:matrix.org)
-[![Telegram](https://img.shields.io/badge/Telegram-blue.svg?style=flat-square&logo=Telegram&logoColor=white)](https://t.me/DE_WM)
+## Installation
-
+### Install Neovim
-## Showcase
+Kickstart.nvim targets *only* the latest
+['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest
+['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim.
+If you are experiencing issues, please make sure you have the latest versions.
-
-
+### Install External Dependencies
-
-
+External Requirements:
+- Basic utils: `git`, `make`, `unzip`, C Compiler (`gcc`)
+- [ripgrep](https://github.com/BurntSushi/ripgrep#installation)
+- Clipboard tool (xclip/xsel/win32yank or other depending on platform)
+- A [Nerd Font](https://www.nerdfonts.com/): optional, provides various icons
+ - if you have it set `vim.g.have_nerd_font` in `init.lua` to true
+- Language Setup:
+ - If want to write Typescript, you need `npm`
+ - If want to write Golang, you will need `go`
+ - etc.
-## What is it?
+> **NOTE**
+> See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes
+> and quick install snippets
-- NvChad is a neovim config written in lua aiming to provide a base configuration with very beautiful UI and blazing fast startuptime (around 0.02 secs ~ 0.07 secs). We tweak UI plugins such as telescope, nvim-tree, bufferline etc well to provide an aesthetic UI experience.
+### Install Kickstart
-- Lazy loading is done 93% of the time meaning that plugins will not be loaded by default, they will be loaded only when required also at specific commands, events etc. This lowers the startuptime and it was like 0.07~ secs tested on an old pentium machine 1.4ghz + 4gb ram & HDD.
+> **NOTE**
+> [Backup](#FAQ) your previous configuration (if any exists)
-- NvChad isn't a framework! It's supposed to be used as a "base" config, so users can tweak the defaults well, and also remove the things they don't like in the default config and build their config on top of it. Users can tweak the entire default config while staying in their custom config (lua/custom dir). This is the control center of the user's config and gitignored so the users can stay up-to-date with NvChad's latest config (main branch) while still controlling it with their chadrc (file that controls entire custom dir).
+Neovim's configurations are located under the following paths, depending on your OS:
-## Theme Showcase
+| OS | PATH |
+| :- | :--- |
+| Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` |
+| Windows (cmd)| `%userprofile%\AppData\Local\nvim\` |
+| Windows (powershell)| `$env:USERPROFILE\AppData\Local\nvim\` |
- Images (Click to expand!)
+#### Recommended Step
-![4 themes](https://nvchad.com/screenshots/four_Themes.webp)
-![radium 1](https://nvchad.com/screenshots/radium1.webp)
-![radium 2](https://nvchad.com/screenshots/radium2.webp)
-![radium 3](https://nvchad.com/screenshots/radium3.webp)
+[Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) this repo
+so that you have your own copy that you can modify, then install by cloning the
+fork to your machine using one of the commands below, depending on your OS.
+> **NOTE**
+> Your fork's url will be something like this:
+> `https://github.com//kickstart.nvim.git`
-(Note: these are just 4-5 themes, NvChad has around 56 themes)
-
+#### Clone kickstart.nvim
+> **NOTE**
+> If following the recommended step above (i.e., forking the repo), replace
+> `nvim-lua` with `` in the commands below
-## UI related plugins used
+ Linux and Mac
- Images (Click to expand!)
-
- Nvim-tree.lua
-
-Fast file tree:
-
-
-
- Telescope-nvim
-
-A fuzzy file finder, picker, sorter, previewer and much more:
-
-
-
- Our own statusline written from scratch
-
-[NvChad UI](https://github.com/NvChad/ui)
-
-
-
- Tabufline (our own pertab bufferline)
-
-
-- Here's a [video](https://www.youtube.com/watch?v=V_9iJ96U_k8&ab_channel=siduck) that showcases it.
-
- NvCheatsheet ( our UI Plugin )
-
+```sh
+git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim
+```
-## Plugins list
+ Windows
-- Inbuilt terminal toggling & management with [Nvterm](https://github.com/NvChad/nvterm)
-- Lightweight & performant ui plugin with [NvChad UI](https://github.com/NvChad/ui) It provides statusline modules, tabufline ( tabs + buffer manager) , beautiful cheatsheets, NvChad updater, hide & unhide terminal buffers, theme switcher and much more!
-- File navigation with [nvim-tree.lua](https://github.com/kyazdani42/nvim-tree.lua)
-- Beautiful and configurable icons with [nvim-web-devicons](https://github.com/kyazdani42/nvim-web-devicons)
-- Git diffs and more with [gitsigns.nvim](https://github.com/lewis6991/gitsigns.nvim)
-- NeoVim Lsp configuration with [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) and [mason.nvim](https://github.com/williamboman/mason.nvim)
-- Autocompletion with [nvim-cmp](https://github.com/hrsh7th/nvim-cmp)
-- File searching, previewing image and text files and more with [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim).
-- Syntax highlighting with [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter)
-- Autoclosing braces and html tags with [nvim-autopairs](https://github.com/windwp/nvim-autopairs)
-- Indentlines with [indent-blankline.nvim](https://github.com/lukas-reineke/indent-blankline.nvim)
-- Useful snippets with [friendly snippets](https://github.com/rafamadriz/friendly-snippets) + [LuaSnip](https://github.com/L3MON4D3/LuaSnip).
-- Popup mappings keysheet [whichkey.nvim](https://github.com/folke/which-key.nvim)
+If you're using `cmd.exe`:
-## History
+```
+git clone https://github.com/nvim-lua/kickstart.nvim.git %userprofile%\AppData\Local\nvim\
+```
-- I (@siduck i.e creator of NvChad) in my initial days of learning to program wanted a lightweight IDE for writing code, I had a very low end system which was like 1.4ghz pentium + 4gb ram & HDD. I was into web dev stuff so many suggested me to use vscode but that thing was very heavy on my system, It took more ram than my browser! ( minimal ungoogled chromium ) so I never tried it again, sublime text was nice but the fear of using proprietary software XD for a linux user bugged me a lot. Then I tried doom-emacs which looked pretty but it was slow and I was lost within its docs, I tried lunarvim but too lazy to read the docs. Doom-emacs and lunarvim inspired me to make a config which is the prettiest + very fast and simple.
+If you're using `powershell.exe`
-- I'm decent at ricing i.e customizing system and making it look pretty so I posted my neovim rice on [neovim subreddit](https://www.reddit.com/r/neovim/comments/m3xl4f/neovim_rice/), my neovim-dotfiles github repo blew up and then I had to come up with a name, I was amazed by the chad meme lol so I put NvChad as the name, the chad word in here doesnt literally mean the chad guy but in the sense such as chad linux vs windows i.e meaning superior, best etc. NvChad was made for my personal use but it gained some popularity which inspired me to make a public config i.e config usable by many and less hassle to update as everyone's going to use the same base config (NvChad) with their custom modifications (which are gitignored so that wont mess up), without the custom config stuff users would have to keep a track of every commit and copy paste git diffs to manually update nvchad.
-
-## :gift_heart: Support
+```
+git clone https://github.com/nvim-lua/kickstart.nvim.git $env:USERPROFILE\AppData\Local\nvim\
+```
-If you like NvChad and would like to support & appreciate it via donation then I'll gladly accept it.
+
-[![kofi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/siduck)
-[![paypal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://paypal.me/siduck13)
-[![buymeacoffee](https://img.shields.io/badge/Buy_Me_A_Coffee-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/siduck)
-[![patreon](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge&logo=patreon&logoColor=white)](https://www.patreon.com/siduck)
+### Post Installation
-## Credits
+Start Neovim
+
+```sh
+nvim
+```
+
+That's it! Lazy will install all the plugins you have. Use `:Lazy` to view
+current plugin status. Hit `q` to close the window.
+
+Read through the `init.lua` file in your configuration folder for more
+information about extending and exploring Neovim. That also includes
+examples of adding popularly requested plugins.
+
+
+### Getting Started
+
+[The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o)
+
+### FAQ
+
+* What should I do if I already have a pre-existing neovim configuration?
+ * You should back it up and then delete all associated files.
+ * This includes your existing init.lua and the neovim files in `~/.local`
+ which can be deleted with `rm -rf ~/.local/share/nvim/`
+* Can I keep my existing configuration in parallel to kickstart?
+ * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME`
+ to maintain multiple configurations. For example, you can install the kickstart
+ configuration in `~/.config/nvim-kickstart` and create an alias:
+ ```
+ alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim'
+ ```
+ When you run Neovim using `nvim-kickstart` alias it will use the alternative
+ config directory and the matching local directory
+ `~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim
+ distribution that you would like to try out.
+* What if I want to "uninstall" this configuration:
+ * See [lazy.nvim uninstall](https://github.com/folke/lazy.nvim#-uninstalling) information
+* Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files?
+ * The main purpose of kickstart is to serve as a teaching tool and a reference
+ configuration that someone can easily use to `git clone` as a basis for their own.
+ As you progress in learning Neovim and Lua, you might consider splitting `init.lua`
+ into smaller parts. A fork of kickstart that does this while maintaining the
+ same functionality is available here:
+ * [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim)
+ * Discussions on this topic can be found here:
+ * [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218)
+ * [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473)
+
+### Install Recipes
+
+Below you can find OS specific install instructions for Neovim and dependencies.
+
+After installing all the dependencies continue with the [Install Kickstart](#Install-Kickstart) step.
+
+#### Windows Installation
+
+Windows with Microsoft C++ Build Tools and CMake
+Installation may require installing build tools and updating the run command for `telescope-fzf-native`
+
+See `telescope-fzf-native` documentation for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation)
+
+This requires:
+
+- Install CMake and the Microsoft C++ Build Tools on Windows
+
+```lua
+{'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' }
+```
+
+Windows with gcc/make using chocolatey
+Alternatively, one can install gcc and make which don't require changing the config,
+the easiest way is to use choco:
+
+1. install [chocolatey](https://chocolatey.org/install)
+either follow the instructions on the page or use winget,
+run in cmd as **admin**:
+```
+winget install --accept-source-agreements chocolatey.chocolatey
+```
+
+2. install all requirements using choco, exit previous cmd and
+open a new one so that choco path is set, and run in cmd as **admin**:
+```
+choco install -y neovim git ripgrep wget fd unzip gzip mingw make
+```
+
+WSL (Windows Subsystem for Linux)
+
+```
+wsl --install
+wsl
+sudo add-apt-repository ppa:neovim-ppa/unstable -y
+sudo apt update
+sudo apt install make gcc ripgrep unzip git xclip neovim
+```
+
+
+#### Linux Install
+Ubuntu Install Steps
+
+```
+sudo add-apt-repository ppa:neovim-ppa/unstable -y
+sudo apt update
+sudo apt install make gcc ripgrep unzip git xclip neovim
+```
+
+Debian Install Steps
+
+```
+sudo apt update
+sudo apt install make gcc ripgrep unzip git xclip curl
+
+# Now we install nvim
+curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz
+sudo rm -rf /opt/nvim-linux64
+sudo mkdir -p /opt/nvim-linux64
+sudo chmod a+rX /opt/nvim-linux64
+sudo tar -C /opt -xzf nvim-linux64.tar.gz
+
+# make it available in /usr/local/bin, distro installs to /usr/bin
+sudo ln -sf /opt/nvim-linux64/bin/nvim /usr/local/bin/
+```
+
+Fedora Install Steps
+
+```
+sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
+```
+
+
+Arch Install Steps
+
+```
+sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim
+```
+
-- [Elianiva](https://github.com/elianiva) helped me with NeoVim Lua related issues many times, NvChad wouldn't exist without his help at all as he helped me in my initial neovim journey!
-- @lorvethe for making the beautiful NvChad logo.
diff --git a/doc/kickstart.txt b/doc/kickstart.txt
new file mode 100644
index 0000000..cb87ac3
--- /dev/null
+++ b/doc/kickstart.txt
@@ -0,0 +1,24 @@
+================================================================================
+INTRODUCTION *kickstart.nvim*
+
+Kickstart.nvim is a project to help you get started on your neovim journey.
+
+ *kickstart-is-not*
+It is not:
+- Complete framework for every plugin under the sun
+- Place to add every plugin that could ever be useful
+
+ *kickstart-is*
+It is:
+- Somewhere that has a good start for the most common "IDE" type features:
+ - autocompletion
+ - goto-definition
+ - find references
+ - fuzzy finding
+ - and hinting at what more can be done :)
+- A place to _kickstart_ your journey.
+ - You should fork this project and use/modify it so that it matches your
+ style and preferences. If you don't want to do that, there are probably
+ other projects that would fit much better for you (and that's great!)!
+
+ vim:tw=78:ts=8:ft=help:norl:
diff --git a/doc/tags b/doc/tags
new file mode 100644
index 0000000..687ae77
--- /dev/null
+++ b/doc/tags
@@ -0,0 +1,3 @@
+kickstart-is kickstart.txt /*kickstart-is*
+kickstart-is-not kickstart.txt /*kickstart-is-not*
+kickstart.nvim kickstart.txt /*kickstart.nvim*
diff --git a/init.lua b/init.lua
index 64fca35..f02ce22 100644
--- a/init.lua
+++ b/init.lua
@@ -1,20 +1,821 @@
-require "core"
+-- Set as the leader key
+-- See `:help mapleader`
+-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
+vim.g.mapleader = ' '
+vim.g.maplocalleader = ';'
-local custom_init_path = vim.api.nvim_get_runtime_file("lua/custom/init.lua", false)[1]
+-- Set to true if you have a Nerd Font installed and selected in the terminal
+vim.g.have_nerd_font = true
-if custom_init_path then
- dofile(custom_init_path)
-end
+-- [[ Setting options ]]
+-- See `:help vim.opt`
+-- NOTE: You can change these options as you wish!
+-- For more options, you can see `:help option-list`
-require("core.utils").load_mappings()
+-- Make line numbers default
+vim.opt.number = true
+-- You can also add relative line numbers, to help with jumping.
+-- Experiment for yourself to see if you like it!
+-- vim.opt.relativenumber = true
-local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim"
+-- Enable mouse mode, can be useful for resizing splits for example!
+vim.opt.mouse = 'a'
--- bootstrap lazy.nvim!
+-- Don't show the mode, since it's already in the status line
+vim.opt.showmode = false
+
+-- Enable break indent
+vim.opt.breakindent = true
+
+-- Save undo history
+vim.opt.undofile = true
+
+-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
+vim.opt.ignorecase = true
+vim.opt.smartcase = true
+
+-- Keep signcolumn on by default
+vim.opt.signcolumn = 'yes'
+
+-- Decrease update time
+vim.opt.updatetime = 250
+
+-- Decrease mapped sequence wait time
+-- Displays which-key popup sooner
+vim.opt.timeoutlen = 300
+
+-- Configure how new splits should be opened
+vim.opt.splitright = true
+vim.opt.splitbelow = true
+
+-- Sets how neovim will display certain whitespace characters in the editor.
+-- See `:help 'list'`
+-- and `:help 'listchars'`
+vim.opt.list = true
+vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' }
+
+-- Preview substitutions live, as you type!
+vim.opt.inccommand = 'split'
+
+-- Show which line your cursor is on
+vim.opt.cursorline = true
+
+-- Minimal number of screen lines to keep above and below the cursor.
+vim.opt.scrolloff = 10
+
+-- [[ Basic Keymaps ]]
+-- See `:help vim.keymap.set()`
+
+-- Set highlight on search, but clear on pressing in normal mode
+vim.opt.hlsearch = true
+vim.keymap.set('n', '', 'nohlsearch')
+
+-- Diagnostic keymaps
+vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous [D]iagnostic message' })
+vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next [D]iagnostic message' })
+vim.keymap.set('n', 'e', vim.diagnostic.open_float, { desc = 'Show diagnostic [E]rror messages' })
+vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
+
+-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
+-- for people to discover. Otherwise, you normally need to press , which
+-- is not what someone will guess without a bit more experience.
+--
+-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
+-- or just use to exit terminal mode
+vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' })
+
+-- TIP: Disable arrow keys in normal mode
+-- vim.keymap.set('n', '', 'echo "Use h to move!!"')
+-- vim.keymap.set('n', '', 'echo "Use l to move!!"')
+-- vim.keymap.set('n', '', 'echo "Use k to move!!"')
+-- vim.keymap.set('n', '', 'echo "Use j to move!!"')
+
+-- Keybinds to make split navigation easier.
+-- Use CTRL+ to switch between windows
+--
+-- See `:help wincmd` for a list of all window commands
+vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' })
+vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' })
+vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' })
+vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' })
+
+-- [[ Basic Autocommands ]]
+-- See `:help lua-guide-autocommands`
+
+-- Highlight when yanking (copying) text
+-- Try it with `yap` in normal mode
+-- See `:help vim.highlight.on_yank()`
+vim.api.nvim_create_autocmd('TextYankPost', {
+ desc = 'Highlight when yanking (copying) text',
+ group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
+ callback = function()
+ vim.highlight.on_yank()
+ end,
+})
+
+-- [[ Install `lazy.nvim` plugin manager ]]
+-- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info
+local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
- require("core.bootstrap").gen_chadrc_template()
- require("core.bootstrap").lazy(lazypath)
-end
-
+ local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
+ vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath }
+end ---@diagnostic disable-next-line: undefined-field
vim.opt.rtp:prepend(lazypath)
-require "plugins"
+
+-- [[ Configure and install plugins ]]
+--
+-- To check the current status of your plugins, run
+-- :Lazy
+--
+-- You can press `?` in this menu for help. Use `:q` to close the window
+--
+-- To update plugins you can run
+-- :Lazy update
+--
+-- NOTE: Here is where you install your plugins.
+require('lazy').setup({
+ -- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link).
+ 'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically
+
+ -- NOTE: Plugins can also be added by using a table,
+ -- with the first argument being the link and the following
+ -- keys can be used to configure plugin behavior/loading/etc.
+ --
+ -- Use `opts = {}` to force a plugin to be loaded.
+ --
+ -- This is equivalent to:
+ -- require('Comment').setup({})
+
+ -- "gc" to comment visual regions/lines
+ { 'numToStr/Comment.nvim', opts = {} },
+
+ -- Here is a more advanced example where we pass configuration
+ -- options to `gitsigns.nvim`. This is equivalent to the following Lua:
+ -- require('gitsigns').setup({ ... })
+ --
+ -- See `:help gitsigns` to understand what the configuration keys do
+ { -- Adds git related signs to the gutter, as well as utilities for managing changes
+ 'lewis6991/gitsigns.nvim',
+ opts = {
+ signs = {
+ add = { text = '+' },
+ change = { text = '~' },
+ delete = { text = '_' },
+ topdelete = { text = '‾' },
+ changedelete = { text = '~' },
+ },
+ },
+ },
+
+ -- NOTE: Plugins can also be configured to run Lua code when they are loaded.
+ --
+ -- This is often very useful to both group configuration, as well as handle
+ -- lazy loading plugins that don't need to be loaded immediately at startup.
+ --
+ -- For example, in the following configuration, we use:
+ -- event = 'VimEnter'
+ --
+ -- which loads which-key before all the UI elements are loaded. Events can be
+ -- normal autocommands events (`:help autocmd-events`).
+ --
+ -- Then, because we use the `config` key, the configuration only runs
+ -- after the plugin has been loaded:
+ -- config = function() ... end
+
+ { -- Useful plugin to show you pending keybinds.
+ 'folke/which-key.nvim',
+ event = 'VimEnter', -- Sets the loading event to 'VimEnter'
+ config = function() -- This is the function that runs, AFTER loading
+ require('which-key').setup()
+
+ -- Document existing key chains
+ require('which-key').register {
+ ['c'] = { name = '[C]ode', _ = 'which_key_ignore' },
+ ['d'] = { name = '[D]ocument', _ = 'which_key_ignore' },
+ ['r'] = { name = '[R]ename', _ = 'which_key_ignore' },
+ ['f'] = { name = '[F]ind', _ = 'which_key_ignore' },
+ ['w'] = { name = '[W]orkspace', _ = 'which_key_ignore' },
+ ['t'] = { name = '[T]oggle', _ = 'which_key_ignore' },
+ ['h'] = { name = 'Git [H]unk', _ = 'which_key_ignore' },
+ }
+ -- visual mode
+ require('which-key').register({
+ ['h'] = { 'Git [H]unk' },
+ }, { mode = 'v' })
+ end,
+ },
+
+ -- NOTE: Plugins can specify dependencies.
+ --
+ -- The dependencies are proper plugin specifications as well - anything
+ -- you do for a plugin at the top level, you can do for a dependency.
+ --
+ -- Use the `dependencies` key to specify the dependencies of a particular plugin
+
+ { -- Fuzzy Finder (files, lsp, etc)
+ 'nvim-telescope/telescope.nvim',
+ event = 'VimEnter',
+ branch = '0.1.x',
+ dependencies = {
+ 'nvim-lua/plenary.nvim',
+ { -- If encountering errors, see telescope-fzf-native README for installation instructions
+ 'nvim-telescope/telescope-fzf-native.nvim',
+
+ -- `build` is used to run some command when the plugin is installed/updated.
+ -- This is only run then, not every time Neovim starts up.
+ build = 'make',
+
+ -- `cond` is a condition used to determine whether this plugin should be
+ -- installed and loaded.
+ cond = function()
+ return vim.fn.executable 'make' == 1
+ end,
+ },
+ { 'nvim-telescope/telescope-ui-select.nvim' },
+
+ -- Useful for getting pretty icons, but requires a Nerd Font.
+ { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font },
+ },
+ config = function()
+ -- Telescope is a fuzzy finder that comes with a lot of different things that
+ -- it can fuzzy find! It's more than just a "file finder", it can search
+ -- many different aspects of Neovim, your workspace, LSP, and more!
+ --
+ -- The easiest way to use Telescope, is to start by doing something like:
+ -- :Telescope help_tags
+ --
+ -- After running this command, a window will open up and you're able to
+ -- type in the prompt window. You'll see a list of `help_tags` options and
+ -- a corresponding preview of the help.
+ --
+ -- Two important keymaps to use while in Telescope are:
+ -- - Insert mode:
+ -- - Normal mode: ?
+ --
+ -- This opens a window that shows you all of the keymaps for the current
+ -- Telescope picker. This is really useful to discover what Telescope can
+ -- do as well as how to actually do it!
+
+ -- [[ Configure Telescope ]]
+ -- See `:help telescope` and `:help telescope.setup()`
+ require('telescope').setup {
+ -- You can put your default mappings / updates / etc. in here
+ -- All the info you're looking for is in `:help telescope.setup()`
+ --
+ -- defaults = {
+ -- mappings = {
+ -- i = { [''] = 'to_fuzzy_refine' },
+ -- },
+ -- },
+ -- pickers = {}
+ extensions = {
+ ['ui-select'] = {
+ require('telescope.themes').get_dropdown(),
+ },
+ },
+ }
+
+ -- Enable Telescope extensions if they are installed
+ pcall(require('telescope').load_extension, 'fzf')
+ pcall(require('telescope').load_extension, 'ui-select')
+
+ -- See `:help telescope.builtin`
+ local builtin = require 'telescope.builtin'
+ vim.keymap.set('n', 'fh', builtin.help_tags, { desc = '[F]ind [H]elp' })
+ vim.keymap.set('n', 'fk', builtin.keymaps, { desc = '[F]ind [K]eymaps' })
+ vim.keymap.set('n', 'ff', builtin.find_files, { desc = '[F]ind [F]iles' })
+ vim.keymap.set('n', 'fs', builtin.builtin, { desc = '[F]ind [S]elect Telescope' })
+ vim.keymap.set('n', 'fw', builtin.grep_string, { desc = '[F]ind current [W]ord' })
+ vim.keymap.set('n', 'fg', builtin.live_grep, { desc = '[F]ind by [G]rep' })
+ vim.keymap.set('n', 'fd', builtin.diagnostics, { desc = '[F]ind [D]iagnostics' })
+ vim.keymap.set('n', 'fr', builtin.resume, { desc = '[F]ind [R]esume' })
+ vim.keymap.set('n', 'f.', builtin.oldfiles, { desc = '[F]ind Recent Files ("." for repeat)' })
+ vim.keymap.set('n', '', builtin.buffers, { desc = '[ ] Find existing buffers' })
+
+ -- Slightly advanced example of overriding default behavior and theme
+ vim.keymap.set('n', '/', function()
+ -- You can pass additional configuration to Telescope to change the theme, layout, etc.
+ builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
+ winblend = 10,
+ previewer = false,
+ })
+ end, { desc = '[/] Fuzzily search in current buffer' })
+
+ -- It's also possible to pass additional configuration options.
+ -- See `:help telescope.builtin.live_grep()` for information about particular keys
+ vim.keymap.set('n', 's/', function()
+ builtin.live_grep {
+ grep_open_files = true,
+ prompt_title = 'Live Grep in Open Files',
+ }
+ end, { desc = '[F]ind [/] in Open Files' })
+
+ -- Shortcut for searching your Neovim configuration files
+ vim.keymap.set('n', 'sn', function()
+ builtin.find_files { cwd = vim.fn.stdpath 'config' }
+ end, { desc = '[F]ind [N]eovim files' })
+ end,
+ },
+
+ { -- LSP Configuration & Plugins
+ 'neovim/nvim-lspconfig',
+ dependencies = {
+ -- Automatically install LSPs and related tools to stdpath for Neovim
+ { 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants
+ 'williamboman/mason-lspconfig.nvim',
+ 'WhoIsSethDaniel/mason-tool-installer.nvim',
+
+ -- Useful status updates for LSP.
+ -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
+ { 'j-hui/fidget.nvim', opts = {} },
+
+ -- `neodev` configures Lua LSP for your Neovim config, runtime and plugins
+ -- used for completion, annotations and signatures of Neovim apis
+ { 'folke/neodev.nvim', opts = {} },
+ },
+ config = function()
+ -- Brief aside: **What is LSP?**
+ --
+ -- LSP is an initialism you've probably heard, but might not understand what it is.
+ --
+ -- LSP stands for Language Server Protocol. It's a protocol that helps editors
+ -- and language tooling communicate in a standardized fashion.
+ --
+ -- In general, you have a "server" which is some tool built to understand a particular
+ -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
+ -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
+ -- processes that communicate with some "client" - in this case, Neovim!
+ --
+ -- LSP provides Neovim with features like:
+ -- - Go to definition
+ -- - Find references
+ -- - Autocompletion
+ -- - Symbol Search
+ -- - and more!
+ --
+ -- Thus, Language Servers are external tools that must be installed separately from
+ -- Neovim. This is where `mason` and related plugins come into play.
+ --
+ -- If you're wondering about lsp vs treesitter, you can check out the wonderfully
+ -- and elegantly composed help section, `:help lsp-vs-treesitter`
+
+ -- This function gets run when an LSP attaches to a particular buffer.
+ -- That is to say, every time a new file is opened that is associated with
+ -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
+ -- function will be executed to configure the current buffer
+ vim.api.nvim_create_autocmd('LspAttach', {
+ group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
+ callback = function(event)
+ -- NOTE: Remember that Lua is a real programming language, and as such it is possible
+ -- to define small helper and utility functions so you don't have to repeat yourself.
+ --
+ -- In this case, we create a function that lets us more easily define mappings specific
+ -- for LSP related items. It sets the mode, buffer and description for us each time.
+ local map = function(keys, func, desc)
+ vim.keymap.set('n', keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
+ end
+
+ -- Jump to the definition of the word under your cursor.
+ -- This is where a variable was first declared, or where a function is defined, etc.
+ -- To jump back, press .
+ map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
+
+ -- Find references for the word under your cursor.
+ map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
+
+ -- Jump to the implementation of the word under your cursor.
+ -- Useful when your language has ways of declaring types without an actual implementation.
+ map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
+
+ -- Jump to the type of the word under your cursor.
+ -- Useful when you're not sure what type a variable is and you want to see
+ -- the definition of its *type*, not where it was *defined*.
+ map('D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
+
+ -- Fuzzy find all the symbols in your current document.
+ -- Symbols are things like variables, functions, types, etc.
+ map('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
+
+ -- Fuzzy find all the symbols in your current workspace.
+ -- Similar to document symbols, except searches over your entire project.
+ map('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
+
+ -- Rename the variable under your cursor.
+ -- Most Language Servers support renaming across files, etc.
+ map('rn', vim.lsp.buf.rename, '[R]e[n]ame')
+
+ -- Execute a code action, usually your cursor needs to be on top of an error
+ -- or a suggestion from your LSP for this to activate.
+ map('ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
+
+ -- Opens a popup that displays documentation about the word under your cursor
+ -- See `:help K` for why this keymap.
+ map('K', vim.lsp.buf.hover, 'Hover Documentation')
+
+ -- WARN: This is not Goto Definition, this is Goto Declaration.
+ -- For example, in C this would take you to the header.
+ map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
+
+ -- The following two autocommands are used to highlight references of the
+ -- word under your cursor when your cursor rests there for a little while.
+ -- See `:help CursorHold` for information about when this is executed
+ --
+ -- When you move your cursor, the highlights will be cleared (the second autocommand).
+ local client = vim.lsp.get_client_by_id(event.data.client_id)
+ if client and client.server_capabilities.documentHighlightProvider then
+ local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
+ vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
+ buffer = event.buf,
+ group = highlight_augroup,
+ callback = vim.lsp.buf.document_highlight,
+ })
+
+ vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
+ buffer = event.buf,
+ group = highlight_augroup,
+ callback = vim.lsp.buf.clear_references,
+ })
+
+ vim.api.nvim_create_autocmd('LspDetach', {
+ group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
+ callback = function(event2)
+ vim.lsp.buf.clear_references()
+ vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
+ end,
+ })
+ end
+
+ -- The following autocommand is used to enable inlay hints in your
+ -- code, if the language server you are using supports them
+ --
+ -- This may be unwanted, since they displace some of your code
+ if client and client.server_capabilities.inlayHintProvider and vim.lsp.inlay_hint then
+ map('th', function()
+ vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
+ end, '[T]oggle Inlay [H]ints')
+ end
+ end,
+ })
+
+ -- LSP servers and clients are able to communicate to each other what features they support.
+ -- By default, Neovim doesn't support everything that is in the LSP specification.
+ -- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities.
+ -- So, we create new capabilities with nvim cmp, and then broadcast that to the servers.
+ local capabilities = vim.lsp.protocol.make_client_capabilities()
+ capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
+
+ -- 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. Available keys are:
+ -- - cmd (table): Override the default command used to start the server
+ -- - filetypes (table): Override the default list of associated filetypes for the server
+ -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
+ -- - settings (table): Override the default settings passed when initializing the server.
+ -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
+ local servers = {
+ -- clangd = {},
+ -- gopls = {},
+ -- pyright = {},
+ -- rust_analyzer = {},
+ -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
+ --
+ -- Some languages (like typescript) have entire language plugins that can be useful:
+ -- https://github.com/pmizio/typescript-tools.nvim
+ --
+ -- But for many setups, the LSP (`tsserver`) will work just fine
+ -- tsserver = {},
+ --
+
+ lua_ls = {
+ -- cmd = {...},
+ -- filetypes = { ...},
+ -- capabilities = {},
+ settings = {
+ Lua = {
+ completion = {
+ callSnippet = 'Replace',
+ },
+ -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
+ -- diagnostics = { disable = { 'missing-fields' } },
+ },
+ },
+ },
+ }
+
+ -- Ensure the servers and tools above are installed
+ -- To check the current status of installed tools and/or manually install
+ -- other tools, you can run
+ -- :Mason
+ --
+ -- You can press `g?` for help in this menu.
+ require('mason').setup()
+
+ -- You can add other tools here that you want Mason to install
+ -- for you, so that they are available from within Neovim.
+ local ensure_installed = vim.tbl_keys(servers or {})
+ vim.list_extend(ensure_installed, {
+ 'stylua', -- Used to format Lua code
+ })
+ require('mason-tool-installer').setup { ensure_installed = ensure_installed }
+
+ require('mason-lspconfig').setup {
+ handlers = {
+ function(server_name)
+ local server = servers[server_name] or {}
+ -- This handles overriding only values explicitly passed
+ -- by the server configuration above. Useful when disabling
+ -- certain features of an LSP (for example, turning off formatting for tsserver)
+ server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
+ require('lspconfig')[server_name].setup(server)
+ end,
+ },
+ }
+ end,
+ },
+
+ { -- Autoformat
+ 'stevearc/conform.nvim',
+ lazy = false,
+ keys = {
+ {
+ 'f',
+ function()
+ require('conform').format { async = true, lsp_fallback = true }
+ end,
+ mode = '',
+ desc = '[F]ormat buffer',
+ },
+ },
+ opts = {
+ notify_on_error = false,
+ format_on_save = function(bufnr)
+ -- Disable "format_on_save lsp_fallback" for languages that don't
+ -- have a well standardized coding style. You can add additional
+ -- languages here or re-enable it for the disabled ones.
+ local disable_filetypes = { c = true, cpp = true }
+ return {
+ timeout_ms = 500,
+ lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype],
+ }
+ end,
+ formatters_by_ft = {
+ lua = { 'stylua' },
+ -- Conform can also run multiple formatters sequentially
+ -- python = { "isort", "black" },
+ --
+ -- You can use a sub-list to tell conform to run *until* a formatter
+ -- is found.
+ -- javascript = { { "prettierd", "prettier" } },
+ },
+ },
+ },
+
+ { -- Autocompletion
+ 'hrsh7th/nvim-cmp',
+ event = 'InsertEnter',
+ dependencies = {
+ -- Snippet Engine & its associated nvim-cmp source
+ {
+ 'L3MON4D3/LuaSnip',
+ build = (function()
+ -- Build Step is needed for regex support in snippets.
+ -- This step is not supported in many windows environments.
+ -- Remove the below condition to re-enable on windows.
+ if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
+ return
+ end
+ return 'make install_jsregexp'
+ end)(),
+ dependencies = {
+ -- `friendly-snippets` contains a variety of premade snippets.
+ -- See the README about individual language/framework/plugin snippets:
+ -- https://github.com/rafamadriz/friendly-snippets
+ -- {
+ -- 'rafamadriz/friendly-snippets',
+ -- config = function()
+ -- require('luasnip.loaders.from_vscode').lazy_load()
+ -- end,
+ -- },
+ },
+ },
+ 'saadparwaiz1/cmp_luasnip',
+
+ -- Adds other completion capabilities.
+ -- nvim-cmp does not ship with all sources by default. They are split
+ -- into multiple repos for maintenance purposes.
+ 'hrsh7th/cmp-nvim-lsp',
+ 'hrsh7th/cmp-path',
+ },
+ config = function()
+ -- See `:help cmp`
+ local cmp = require 'cmp'
+ local luasnip = require 'luasnip'
+ luasnip.config.setup {}
+
+ cmp.setup {
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end,
+ },
+ completion = { completeopt = 'menu,menuone,noinsert' },
+
+ -- For an understanding of why these mappings were
+ -- chosen, you will need to read `:help ins-completion`
+ --
+ -- No, but seriously. Please read `:help ins-completion`, it is really good!
+ mapping = cmp.mapping.preset.insert {
+ -- Select the [n]ext item
+ [''] = cmp.mapping.select_next_item(),
+ -- Select the [p]revious item
+ [''] = cmp.mapping.select_prev_item(),
+
+ -- Scroll the documentation window [b]ack / [f]orward
+ [''] = cmp.mapping.scroll_docs(-4),
+ [''] = cmp.mapping.scroll_docs(4),
+
+ -- Accept ([y]es) the completion.
+ -- This will auto-import if your LSP supports it.
+ -- This will expand snippets if the LSP sent a snippet.
+ [''] = cmp.mapping.confirm { select = true },
+
+ -- If you prefer more traditional completion keymaps,
+ -- you can uncomment the following lines
+ --[''] = cmp.mapping.confirm { select = true },
+ --[''] = cmp.mapping.select_next_item(),
+ --[''] = cmp.mapping.select_prev_item(),
+
+ -- Manually trigger a completion from nvim-cmp.
+ -- Generally you don't need this, because nvim-cmp will display
+ -- completions whenever it has completion options available.
+ [''] = cmp.mapping.complete {},
+
+ -- Think of as moving to the right of your snippet expansion.
+ -- So if you have a snippet that's like:
+ -- function $name($args)
+ -- $body
+ -- end
+ --
+ -- will move you to the right of each of the expansion locations.
+ -- is similar, except moving you backwards.
+ [''] = cmp.mapping(function()
+ if luasnip.expand_or_locally_jumpable() then
+ luasnip.expand_or_jump()
+ end
+ end, { 'i', 's' }),
+ [''] = cmp.mapping(function()
+ if luasnip.locally_jumpable(-1) then
+ luasnip.jump(-1)
+ end
+ end, { 'i', 's' }),
+
+ -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
+ -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
+ },
+ sources = {
+ { name = 'nvim_lsp' },
+ { name = 'luasnip' },
+ { name = 'path' },
+ },
+ }
+ end,
+ },
+
+ { -- You can easily change to a different colorscheme.
+ -- Change the name of the colorscheme plugin below, and then
+ -- change the command in the config to whatever the name of that colorscheme is.
+ --
+ -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
+ 'folke/tokyonight.nvim',
+ priority = 1000, -- Make sure to load this before all the other start plugins.
+ init = function()
+ -- Load the colorscheme here.
+ -- Like many other themes, this one has different styles, and you could load
+ -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'.
+ vim.cmd.colorscheme 'tokyonight-night'
+
+ -- You can configure highlights by doing something like:
+ vim.cmd.hi 'Comment gui=none'
+ end,
+ },
+
+ -- Highlight todo, notes, etc in comments
+ { 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, opts = { signs = false } },
+
+ { -- Collection of various small independent plugins/modules
+ 'echasnovski/mini.nvim',
+ config = function()
+ -- Better Around/Inside textobjects
+ --
+ -- Examples:
+ -- - va) - [V]isually select [A]round [)]paren
+ -- - yinq - [Y]ank [I]nside [N]ext [']quote
+ -- - ci' - [C]hange [I]nside [']quote
+ require('mini.ai').setup { n_lines = 500 }
+
+ -- Add/delete/replace surroundings (brackets, quotes, etc.)
+ --
+ -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
+ -- - sd' - [S]urround [D]elete [']quotes
+ -- - sr)' - [S]urround [R]eplace [)] [']
+ require('mini.surround').setup()
+
+ -- Simple and easy statusline.
+ -- You could remove this setup call if you don't like it,
+ -- and try some other statusline plugin
+ local statusline = require 'mini.statusline'
+ -- set use_icons to true if you have a Nerd Font
+ statusline.setup { use_icons = vim.g.have_nerd_font }
+
+ -- You can configure sections in the statusline by overriding their
+ -- default behavior. For example, here we set the section for
+ -- cursor location to LINE:COLUMN
+ ---@diagnostic disable-next-line: duplicate-set-field
+ statusline.section_location = function()
+ return '%2l:%-2v'
+ end
+
+ -- ... and there is more!
+ -- Check out: https://github.com/echasnovski/mini.nvim
+ end,
+ },
+ { -- Highlight, edit, and navigate code
+ 'nvim-treesitter/nvim-treesitter',
+ build = ':TSUpdate',
+ opts = {
+ ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'vim', 'vimdoc' },
+ -- Autoinstall languages that are not installed
+ auto_install = true,
+ highlight = {
+ enable = true,
+ -- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
+ -- If you are experiencing weird indenting issues, add the language to
+ -- the list of additional_vim_regex_highlighting and disabled languages for indent.
+ additional_vim_regex_highlighting = { 'ruby' },
+ },
+ indent = { enable = true, disable = { 'ruby' } },
+ },
+ config = function(_, opts)
+ -- [[ Configure Treesitter ]] See `:help nvim-treesitter`
+
+ -- Prefer git instead of curl in order to improve connectivity in some environments
+ require('nvim-treesitter.install').prefer_git = true
+ ---@diagnostic disable-next-line: missing-fields
+ require('nvim-treesitter.configs').setup(opts)
+
+ -- There are additional nvim-treesitter modules that you can use to interact
+ -- with nvim-treesitter. You should go explore a few and see what interests you:
+ --
+ -- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
+ -- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
+ -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
+ end,
+ },
+
+ -- The following two comments only work if you have downloaded the kickstart repo, not just copy pasted the
+ -- init.lua. If you want these files, they are in the repository, so you can just download them and
+ -- place them in the correct locations.
+
+ -- NOTE: Next step on your Neovim journey: Add/Configure additional plugins for Kickstart
+ --
+ -- Here are some example plugins that I've included in the Kickstart repository.
+ -- Uncomment any of the lines below to enable them (you will need to restart nvim).
+ --
+ -- require 'kickstart.plugins.debug',
+ -- require 'kickstart.plugins.indent_line',
+ -- require 'kickstart.plugins.lint',
+ -- require 'kickstart.plugins.autopairs',
+ -- require 'kickstart.plugins.neo-tree',
+ -- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps
+
+ -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
+ -- This is the easiest way to modularize your config.
+ --
+ -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going.
+ -- For additional information, see `:help lazy.nvim-lazy.nvim-structuring-your-plugins`
+ -- { import = 'custom.plugins' },
+}, {
+ ui = {
+ -- If you are using a Nerd Font: set icons to an empty table which will use the
+ -- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table
+ icons = vim.g.have_nerd_font and {} or {
+ cmd = '⌘',
+ config = '🛠',
+ event = '📅',
+ ft = '📂',
+ init = '⚙',
+ keys = '🗝',
+ plugin = '🔌',
+ runtime = '💻',
+ require = '🌙',
+ source = '📄',
+ start = '🚀',
+ task = '📌',
+ lazy = '💤 ',
+ },
+ },
+})
+
+-- The line beneath this is called `modeline`. See `:help modeline`
+-- vim: ts=2 sts=2 sw=2 et
diff --git a/lua/core/bootstrap.lua b/lua/core/bootstrap.lua
deleted file mode 100644
index 0b4ffa3..0000000
--- a/lua/core/bootstrap.lua
+++ /dev/null
@@ -1,53 +0,0 @@
-local M = {}
-local fn = vim.fn
-
-M.echo = function(str)
- vim.cmd "redraw"
- vim.api.nvim_echo({ { str, "Bold" } }, true, {})
-end
-
-local function shell_call(args)
- local output = fn.system(args)
- assert(vim.v.shell_error == 0, "External call failed with error code: " .. vim.v.shell_error .. "\n" .. output)
-end
-
-M.lazy = function(install_path)
-
-
- vim.opt.rtp:prepend(lazy_path)
-
-
- --------- lazy.nvim ---------------
- M.echo " Installing lazy.nvim & plugins ..."
- local repo = "https://github.com/folke/lazy.nvim.git"
- shell_call { "git", "clone", "--filter=blob:none", "--branch=stable", repo, install_path }
- vim.opt.rtp:prepend(install_path)
-
- -- install plugins
- require "plugins"
-end
-
-M.gen_chadrc_template = function()
- local path = fn.stdpath "config" .. "/lua/custom"
-
- if fn.isdirectory(path) ~= 1 then
- local input = vim.env.NVCHAD_EXAMPLE_CONFIG or fn.input "Do you want to install example custom config? (y/N): "
-
- if input:lower() == "y" then
- M.echo "Cloning example custom config repo..."
- shell_call { "git", "clone", "--depth", "1", "https://github.com/NvChad/example_config", path }
- fn.delete(path .. "/.git", "rf")
- else
- -- use very minimal chadrc
- fn.mkdir(path, "p")
-
- local file = io.open(path .. "/chadrc.lua", "w")
- if file then
- file:write "---@type ChadrcConfig\nlocal M = {}\n\nM.ui = { theme = 'onedark' }\n\nreturn M"
- file:close()
- end
- end
- end
-end
-
-return M
diff --git a/lua/core/default_config.lua b/lua/core/default_config.lua
deleted file mode 100644
index a2722b1..0000000
--- a/lua/core/default_config.lua
+++ /dev/null
@@ -1,90 +0,0 @@
-local M = {}
-
-M.options = {
- nvchad_branch = "v2.0",
-}
-
-M.ui = {
- -- hl = highlights
- hl_add = {},
- hl_override = {},
- changed_themes = {},
- theme_toggle = { "onedark", "one_light" },
- theme = "onedark", -- default theme
- transparency = false,
- lsp_semantic_tokens = false, -- needs nvim v0.9, just adds highlight groups for lsp semantic tokens
-
- extended_integrations = {}, -- these aren't compiled by default, ex: "alpha", "notify"
-
- -- cmp themeing
- cmp = {
- icons = true,
- lspkind_text = true,
- style = "default", -- default/flat_light/flat_dark/atom/atom_colored
- border_color = "grey_fg", -- only applicable for "default" style, use color names from base30 variables
- selected_item_bg = "colored", -- colored / simple
- },
-
- telescope = { style = "borderless" }, -- borderless / bordered
-
- ------------------------------- nvchad_ui modules -----------------------------
- statusline = {
- theme = "default", -- default/vscode/vscode_colored/minimal
- -- default/round/block/arrow separators work only for default statusline theme
- -- round and block will work for minimal theme only
- separator_style = "default",
- overriden_modules = nil,
- },
-
- -- lazyload it when there are 1+ buffers
- tabufline = {
- show_numbers = false,
- enabled = true,
- lazyload = true,
- overriden_modules = nil,
- },
-
- -- nvdash (dashboard)
- nvdash = {
- load_on_startup = false,
-
- header = {
- " ▄ ▄ ",
- " ▄ ▄▄▄ ▄ ▄▄▄ ▄ ▄ ",
- " █ ▄ █▄█ ▄▄▄ █ █▄█ █ █ ",
- " ▄▄ █▄█▄▄▄█ █▄█▄█▄▄█▄▄█ █ ",
- " ▄ █▄▄█ ▄ ▄▄ ▄█ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ",
- " █▄▄▄▄ ▄▄▄ █ ▄ ▄▄▄ ▄ ▄▄▄ ▄ ▄ █ ▄",
- "▄ █ █▄█ █▄█ █ █ █▄█ █ █▄█ ▄▄▄ █ █",
- "█▄█ ▄ █▄▄█▄▄█ █ ▄▄█ █ ▄ █ █▄█▄█ █",
- " █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ █▄█▄▄▄█ ",
- },
-
- buttons = {
- { " Find File", "Spc f f", "Telescope find_files" },
- { " Recent Files", "Spc f o", "Telescope oldfiles" },
- { " Find Word", "Spc f w", "Telescope live_grep" },
- { " Bookmarks", "Spc m a", "Telescope marks" },
- { " Themes", "Spc t h", "Telescope themes" },
- { " Mappings", "Spc c h", "NvCheatsheet" },
- },
- },
-
- cheatsheet = { theme = "grid" }, -- simple/grid
-
- lsp = {
- -- show function signatures i.e args as you type
- signature = {
- disabled = false,
- silent = true, -- silences 'no signature help available' message from appearing
- },
- },
-}
-
-M.plugins = "" -- path i.e "custom.plugins", so make custom/plugins.lua file
-
-M.lazy_nvim = require "plugins.configs.lazy_nvim" -- config for lazy.nvim startup options
-
-M.mappings = require "core.mappings"
-
-return M
diff --git a/lua/core/init.lua b/lua/core/init.lua
deleted file mode 100644
index 2aaadaa..0000000
--- a/lua/core/init.lua
+++ /dev/null
@@ -1,78 +0,0 @@
-local opt = vim.opt
-local g = vim.g
-local config = require("core.utils").load_config()
-
--------------------------------------- globals -----------------------------------------
-g.nvchad_theme = config.ui.theme
-g.toggle_theme_icon = " "
-g.transparency = config.ui.transparency
-
--------------------------------------- options ------------------------------------------
-opt.laststatus = 3 -- global statusline
-opt.showmode = false
-
-opt.clipboard = "unnamedplus"
-opt.cursorline = true
-
--- Indenting
-opt.expandtab = true
-opt.shiftwidth = 2
-opt.smartindent = true
-opt.tabstop = 2
-opt.softtabstop = 2
-
-opt.fillchars = { eob = " " }
-opt.ignorecase = true
-opt.smartcase = true
-opt.mouse = "a"
-
--- Numbers
-opt.number = true
-opt.numberwidth = 2
-opt.ruler = false
-
--- disable nvim intro
-opt.shortmess:append "sI"
-
-opt.signcolumn = "yes"
-opt.splitbelow = true
-opt.splitright = true
-opt.termguicolors = true
-opt.timeoutlen = 400
-opt.undofile = true
-
--- interval for writing swap file to disk, also used by gitsigns
-opt.updatetime = 250
-
--- go to previous/next line with h,l,left arrow and right arrow
--- when cursor reaches end/beginning of line
-opt.whichwrap:append "<>[]hl"
-
-g.mapleader = " "
-
--- disable some default providers
-for _, provider in ipairs { "node", "perl", "python3", "ruby" } do
- vim.g["loaded_" .. provider .. "_provider"] = 0
-end
-
--- add binaries installed by mason.nvim to path
-local is_windows = vim.loop.os_uname().sysname == "Windows_NT"
-vim.env.PATH = vim.fn.stdpath "data" .. "/mason/bin" .. (is_windows and ";" or ":") .. vim.env.PATH
-
--------------------------------------- autocmds ------------------------------------------
-local autocmd = vim.api.nvim_create_autocmd
-
--- dont list quickfix buffers
-autocmd("FileType", {
- pattern = "qf",
- callback = function()
- vim.opt_local.buflisted = false
- end,
-})
-
--------------------------------------- commands ------------------------------------------
-local new_cmd = vim.api.nvim_create_user_command
-
-new_cmd("NvChadUpdate", function()
- require "nvchad.updater"()
-end, {})
diff --git a/lua/core/mappings.lua b/lua/core/mappings.lua
deleted file mode 100644
index 0a652a7..0000000
--- a/lua/core/mappings.lua
+++ /dev/null
@@ -1,468 +0,0 @@
--- n, v, i, t = mode names
-
-local M = {}
-
-M.general = {
- i = {
- -- go to beginning and end
- [""] = { "^i", "Beginning of line" },
- [""] = { "", "End of line" },
-
- -- navigate within insert mode
- [""] = { "", "Move left" },
- [""] = { "", "Move right" },
- [""] = { "", "Move down" },
- [""] = { "", "Move up" },
- },
-
- n = {
- [""] = { " noh ", "Clear highlights" },
- -- switch between windows
- [""] = { "h", "Window left" },
- [""] = { "l", "Window right" },
- [""] = { "j", "Window down" },
- [""] = { "k", "Window up" },
-
- -- save
- [""] = { " w ", "Save file" },
-
- -- Copy all
- [""] = { " %y+ ", "Copy whole file" },
-
- -- line numbers
- ["n"] = { " set nu! ", "Toggle line number" },
- ["rn"] = { " set rnu! ", "Toggle relative number" },
-
- -- Allow moving the cursor through wrapped lines with j, k, and
- -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/
- -- empty mode is same as using :map
- -- also don't use g[j|k] when in operator pending mode, so it doesn't alter d, y or c behaviour
- ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } },
- ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } },
- [""] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } },
- [""] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } },
-
- -- new buffer
- ["b"] = { " enew ", "New buffer" },
- ["ch"] = { " NvCheatsheet ", "Mapping cheatsheet" },
-
- ["fm"] = {
- function()
- vim.lsp.buf.format { async = true }
- end,
- "LSP formatting",
- },
- },
-
- t = {
- [""] = { vim.api.nvim_replace_termcodes("", true, true, true), "Escape terminal mode" },
- },
-
- v = {
- [""] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } },
- [""] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } },
- ["<"] = { ""] = { ">gv", "Indent line" },
- },
-
- x = {
- ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } },
- ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } },
- -- Don't copy the replaced text after pasting in visual mode
- -- https://vim.fandom.com/wiki/Replace_a_word_with_yanked_text#Alternative_mapping_for_paste
- ["p"] = { 'p:let @+=@0:let @"=@0', "Dont copy replaced text", opts = { silent = true } },
- },
-}
-
-M.tabufline = {
- plugin = true,
-
- n = {
- -- cycle through buffers
- [""] = {
- function()
- require("nvchad.tabufline").tabuflineNext()
- end,
- "Goto next buffer",
- },
-
- [""] = {
- function()
- require("nvchad.tabufline").tabuflinePrev()
- end,
- "Goto prev buffer",
- },
-
- -- close buffer + hide terminal buffer
- ["x"] = {
- function()
- require("nvchad.tabufline").close_buffer()
- end,
- "Close buffer",
- },
- },
-}
-
-M.comment = {
- plugin = true,
-
- -- toggle comment in both modes
- n = {
- ["/"] = {
- function()
- require("Comment.api").toggle.linewise.current()
- end,
- "Toggle comment",
- },
- },
-
- v = {
- ["/"] = {
- "lua require('Comment.api').toggle.linewise(vim.fn.visualmode())",
- "Toggle comment",
- },
- },
-}
-
-M.lspconfig = {
- plugin = true,
-
- -- See ` :help vim.lsp.*` for documentation on any of the below functions
-
- n = {
- ["gD"] = {
- function()
- vim.lsp.buf.declaration()
- end,
- "LSP declaration",
- },
-
- ["gd"] = {
- function()
- vim.lsp.buf.definition()
- end,
- "LSP definition",
- },
-
- ["K"] = {
- function()
- vim.lsp.buf.hover()
- end,
- "LSP hover",
- },
-
- ["gi"] = {
- function()
- vim.lsp.buf.implementation()
- end,
- "LSP implementation",
- },
-
- ["ls"] = {
- function()
- vim.lsp.buf.signature_help()
- end,
- "LSP signature help",
- },
-
- ["D"] = {
- function()
- vim.lsp.buf.type_definition()
- end,
- "LSP definition type",
- },
-
- ["ra"] = {
- function()
- require("nvchad.renamer").open()
- end,
- "LSP rename",
- },
-
- ["ca"] = {
- function()
- vim.lsp.buf.code_action()
- end,
- "LSP code action",
- },
-
- ["gr"] = {
- function()
- vim.lsp.buf.references()
- end,
- "LSP references",
- },
-
- ["lf"] = {
- function()
- vim.diagnostic.open_float { border = "rounded" }
- end,
- "Floating diagnostic",
- },
-
- ["[d"] = {
- function()
- vim.diagnostic.goto_prev { float = { border = "rounded" } }
- end,
- "Goto prev",
- },
-
- ["]d"] = {
- function()
- vim.diagnostic.goto_next { float = { border = "rounded" } }
- end,
- "Goto next",
- },
-
- ["q"] = {
- function()
- vim.diagnostic.setloclist()
- end,
- "Diagnostic setloclist",
- },
-
- ["wa"] = {
- function()
- vim.lsp.buf.add_workspace_folder()
- end,
- "Add workspace folder",
- },
-
- ["wr"] = {
- function()
- vim.lsp.buf.remove_workspace_folder()
- end,
- "Remove workspace folder",
- },
-
- ["wl"] = {
- function()
- print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
- end,
- "List workspace folders",
- },
- },
-
- v = {
- ["ca"] = {
- function()
- vim.lsp.buf.code_action()
- end,
- "LSP code action",
- },
- },
-}
-
-M.nvimtree = {
- plugin = true,
-
- n = {
- -- toggle
- [""] = { " NvimTreeToggle ", "Toggle nvimtree" },
-
- -- focus
- ["e"] = { " NvimTreeFocus ", "Focus nvimtree" },
- },
-}
-
-M.telescope = {
- plugin = true,
-
- n = {
- -- find
- ["ff"] = { " Telescope find_files ", "Find files" },
- ["fa"] = { " Telescope find_files follow=true no_ignore=true hidden=true ", "Find all" },
- ["fw"] = { " Telescope live_grep ", "Live grep" },
- ["fb"] = { " Telescope buffers ", "Find buffers" },
- ["fh"] = { " Telescope help_tags ", "Help page" },
- ["fo"] = { " Telescope oldfiles ", "Find oldfiles" },
- ["fz"] = { " Telescope current_buffer_fuzzy_find ", "Find in current buffer" },
-
- -- git
- ["cm"] = { " Telescope git_commits ", "Git commits" },
- ["gt"] = { " Telescope git_status ", "Git status" },
-
- -- pick a hidden term
- ["pt"] = { " Telescope terms ", "Pick hidden term" },
-
- -- theme switcher
- ["th"] = { " Telescope themes ", "Nvchad themes" },
-
- ["ma"] = { " Telescope marks ", "telescope bookmarks" },
- },
-}
-
-M.nvterm = {
- plugin = true,
-
- t = {
- -- toggle in terminal mode
- [""] = {
- function()
- require("nvterm.terminal").toggle "float"
- end,
- "Toggle floating term",
- },
-
- [""] = {
- function()
- require("nvterm.terminal").toggle "horizontal"
- end,
- "Toggle horizontal term",
- },
-
- [""] = {
- function()
- require("nvterm.terminal").toggle "vertical"
- end,
- "Toggle vertical term",
- },
- },
-
- n = {
- -- toggle in normal mode
- [""] = {
- function()
- require("nvterm.terminal").toggle "float"
- end,
- "Toggle floating term",
- },
-
- [""] = {
- function()
- require("nvterm.terminal").toggle "horizontal"
- end,
- "Toggle horizontal term",
- },
-
- [""] = {
- function()
- require("nvterm.terminal").toggle "vertical"
- end,
- "Toggle vertical term",
- },
-
- -- new
- ["h"] = {
- function()
- require("nvterm.terminal").new "horizontal"
- end,
- "New horizontal term",
- },
-
- ["v"] = {
- function()
- require("nvterm.terminal").new "vertical"
- end,
- "New vertical term",
- },
- },
-}
-
-M.whichkey = {
- plugin = true,
-
- n = {
- ["wK"] = {
- function()
- vim.cmd "WhichKey"
- end,
- "Which-key all keymaps",
- },
- ["wk"] = {
- function()
- local input = vim.fn.input "WhichKey: "
- vim.cmd("WhichKey " .. input)
- end,
- "Which-key query lookup",
- },
- },
-}
-
-M.blankline = {
- plugin = true,
-
- n = {
- ["cc"] = {
- function()
- local ok, start = require("indent_blankline.utils").get_current_context(
- vim.g.indent_blankline_context_patterns,
- vim.g.indent_blankline_use_treesitter_scope
- )
-
- if ok then
- vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { start, 0 })
- vim.cmd [[normal! _]]
- end
- end,
-
- "Jump to current context",
- },
- },
-}
-
-M.gitsigns = {
- plugin = true,
-
- n = {
- -- Navigation through hunks
- ["]c"] = {
- function()
- if vim.wo.diff then
- return "]c"
- end
- vim.schedule(function()
- require("gitsigns").next_hunk()
- end)
- return ""
- end,
- "Jump to next hunk",
- opts = { expr = true },
- },
-
- ["[c"] = {
- function()
- if vim.wo.diff then
- return "[c"
- end
- vim.schedule(function()
- require("gitsigns").prev_hunk()
- end)
- return ""
- end,
- "Jump to prev hunk",
- opts = { expr = true },
- },
-
- -- Actions
- ["rh"] = {
- function()
- require("gitsigns").reset_hunk()
- end,
- "Reset hunk",
- },
-
- ["ph"] = {
- function()
- require("gitsigns").preview_hunk()
- end,
- "Preview hunk",
- },
-
- ["gb"] = {
- function()
- package.loaded.gitsigns.blame_line()
- end,
- "Blame line",
- },
-
- ["td"] = {
- function()
- require("gitsigns").toggle_deleted()
- end,
- "Toggle deleted",
- },
- },
-}
-
-return M
diff --git a/lua/core/utils.lua b/lua/core/utils.lua
deleted file mode 100644
index 8b2a03d..0000000
--- a/lua/core/utils.lua
+++ /dev/null
@@ -1,118 +0,0 @@
-local M = {}
-local merge_tb = vim.tbl_deep_extend
-
-M.load_config = function()
- local config = require "core.default_config"
- local chadrc_path = vim.api.nvim_get_runtime_file("lua/custom/chadrc.lua", false)[1]
-
- if chadrc_path then
- local chadrc = dofile(chadrc_path)
-
- config.mappings = M.remove_disabled_keys(chadrc.mappings, config.mappings)
- config = merge_tb("force", config, chadrc)
- config.mappings.disabled = nil
- end
-
- return config
-end
-
-M.remove_disabled_keys = function(chadrc_mappings, default_mappings)
- if not chadrc_mappings then
- return default_mappings
- end
-
- -- store keys in a array with true value to compare
- local keys_to_disable = {}
- for _, mappings in pairs(chadrc_mappings) do
- for mode, section_keys in pairs(mappings) do
- if not keys_to_disable[mode] then
- keys_to_disable[mode] = {}
- end
- section_keys = (type(section_keys) == "table" and section_keys) or {}
- for k, _ in pairs(section_keys) do
- keys_to_disable[mode][k] = true
- end
- end
- end
-
- -- make a copy as we need to modify default_mappings
- for section_name, section_mappings in pairs(default_mappings) do
- for mode, mode_mappings in pairs(section_mappings) do
- mode_mappings = (type(mode_mappings) == "table" and mode_mappings) or {}
- for k, _ in pairs(mode_mappings) do
- -- if key if found then remove from default_mappings
- if keys_to_disable[mode] and keys_to_disable[mode][k] then
- default_mappings[section_name][mode][k] = nil
- end
- end
- end
- end
-
- return default_mappings
-end
-
-M.load_mappings = function(section, mapping_opt)
- vim.schedule(function()
- local function set_section_map(section_values)
- if section_values.plugin then
- return
- end
-
- section_values.plugin = nil
-
- for mode, mode_values in pairs(section_values) do
- local default_opts = merge_tb("force", { mode = mode }, mapping_opt or {})
- for keybind, mapping_info in pairs(mode_values) do
- -- merge default + user opts
- local opts = merge_tb("force", default_opts, mapping_info.opts or {})
-
- mapping_info.opts, opts.mode = nil, nil
- opts.desc = mapping_info[2]
-
- vim.keymap.set(mode, keybind, mapping_info[1], opts)
- end
- end
- end
-
- local mappings = require("core.utils").load_config().mappings
-
- if type(section) == "string" then
- mappings[section]["plugin"] = nil
- mappings = { mappings[section] }
- end
-
- for _, sect in pairs(mappings) do
- set_section_map(sect)
- end
- end)
-end
-
-M.lazy_load = function(plugin)
- vim.api.nvim_create_autocmd({ "BufRead", "BufWinEnter", "BufNewFile" }, {
- group = vim.api.nvim_create_augroup("BeLazyOnFileOpen" .. plugin, {}),
- callback = function()
- local file = vim.fn.expand "%"
- local condition = file ~= "NvimTree_1" and file ~= "[lazy]" and file ~= ""
-
- if condition then
- vim.api.nvim_del_augroup_by_name("BeLazyOnFileOpen" .. plugin)
-
- -- dont defer for treesitter as it will show slow highlighting
- -- This deferring only happens only when we do "nvim filename"
- if plugin ~= "nvim-treesitter" then
- vim.schedule(function()
- require("lazy").load { plugins = plugin }
-
- if plugin == "nvim-lspconfig" then
- vim.cmd "silent! do FileType"
- end
- end, 0)
- else
- require("lazy").load { plugins = plugin }
- end
- end
- end,
- })
-end
-
-return M
diff --git a/lua/custom/chadrc.lua b/lua/custom/chadrc.lua
deleted file mode 100644
index c6a4274..0000000
--- a/lua/custom/chadrc.lua
+++ /dev/null
@@ -1,73 +0,0 @@
----@type ChadrcConfig
-local M = {}
-
--- Path to overriding theme and highlights files
-local highlights = require "custom.highlights"
-
-M.ui = {
- theme = "bearded-arc",
- theme_toggle = { "bearded-arc", "ayu_light" },
-
- hl_override = highlights.override,
- hl_add = highlights.add,
- lsp_semantic_tokens = true,
- statusline = {
- theme = "default", -- default/vscode/vscode_colored/minimal
- -- default/round/block/arrow separators work only for default statusline theme
- -- round and block will work for minimal theme only
- separator_style = "default",
- overriden_modules = nil,
- },
- -- lazyload it when there are 1+ buffers
- tabufline = {
- show_numbers = true,
- enabled = true,
- lazyload = true,
- overriden_modules = nil,
- },
- -- nvdash (dashboard)
- nvdash = {
- load_on_startup = true,
- header = {
- " ",
- " █ ████████ █████ ███████ ████ ",
- " ███ ██████ █████ █████████ ██████ ",
- " █████ ██████████████████████ ████ ███████████████ ",
- " ██ ██ █████ █████████████ ████ ████████████████ ",
- " ████ ███████████████ █████████ ████ █████ ██████ ████ ",
- " ██████ ██████ ███ █████████ ████ █████ █████ ████ ",
- " ████████ ███████████████████ ████ ████ █████ ████ ████ ",
- " ",
- " 🛠️ Sharp tools make good work 🖥️ ",
- },
- },
-}
-
-M.plugins = "custom.plugins"
-
--- check core.mappings for table structure
-M.mappings = require "custom.mappings"
-
-local get_info = function()
- local buf = {
- { " Find File", ";ff", "Telescope find_files" },
- { " Recent Files", ";fo", "Telescope oldfiles" },
- { " Find Word", ";fw", "Telescope live_grep" },
- { " Bookmarks", ";fm", "Telescope marks" },
- { " Theme: " .. M.ui.theme, ";th", "Telescope themes" },
- {
- " Toggle Theme",
- "th",
- function()
- end,
- },
- { " Mappings", "ch", "NvCheatsheet" },
- { " Git", "gg", "LazyGit" },
- { " Files", "", "NvimTreeToggle" },
- { " Change Directory", ";cd", "Telescope zoxide list" },
- { " Terminal", "", "ToggleTerm direction=float" },
- }
- return buf
-end
-M.ui.nvdash.buttons = get_info()
-return M
diff --git a/lua/custom/configs/conform.lua b/lua/custom/configs/conform.lua
deleted file mode 100644
index 766f55e..0000000
--- a/lua/custom/configs/conform.lua
+++ /dev/null
@@ -1,29 +0,0 @@
-local options = {
- lsp_fallback = true,
-
- formatters_by_ft = {
- lua = { "stylua" },
-
- javascript = { "prettier" },
- css = { "prettier" },
- html = { "prettier" },
-
- sh = { "shfmt" },
- toml = { "taplo" },
- rust = { "rustfmt" },
-
- tex = { "latexindent" },
- latex = { "latexindent" },
- },
-
- -- adding same formatter for multiple filetypes can look too much work for some
- -- instead of the above code you could just use a loop! the config is just a table after all!
-
- -- format_on_save = {
- -- -- These options will be passed to conform.format()
- -- timeout_ms = 500,
- -- lsp_fallback = true,
- -- },
-}
-
-require("conform").setup(options)
diff --git a/lua/custom/configs/lspconfig.lua b/lua/custom/configs/lspconfig.lua
deleted file mode 100644
index bb70d1a..0000000
--- a/lua/custom/configs/lspconfig.lua
+++ /dev/null
@@ -1,36 +0,0 @@
-local on_attach = require("plugins.configs.lspconfig").on_attach
-local capabilities = require("plugins.configs.lspconfig").capabilities
-
-local lspconfig = require "lspconfig"
-local lspsettings = require "custom.configs.lspsettings"
-
--- if you just want default config for the servers then put them in a table
-local servers = {
- "html",
- "cssls",
- "tsserver",
- "clangd",
- "bashls",
- "cmake",
- "yamlls",
- "texlab",
- "csharp_ls",
-}
-
-for _, lsp in ipairs(servers) do
- lspconfig[lsp].setup {
- on_attach = on_attach,
- capabilities = capabilities,
- }
-end
-
-local server_with_settings = {
- -- "textlsp",
- "ltex",
- "rust_analyzer",
- "basedpyright",
-}
-
-for _, lsp in ipairs(server_with_settings) do
- lspconfig[lsp].setup(lspsettings[lsp])
-end
diff --git a/lua/custom/configs/lspsettings.lua b/lua/custom/configs/lspsettings.lua
deleted file mode 100644
index 13286fb..0000000
--- a/lua/custom/configs/lspsettings.lua
+++ /dev/null
@@ -1,212 +0,0 @@
-local on_attach = require("plugins.configs.lspconfig").on_attach
-local capabilities = require("plugins.configs.lspconfig").capabilities
-
-local M = {}
-
-M.basedpyright = {
- on_attach = on_attach,
- capabilities = capabilities,
- root_dir = vim.loop.cwd,
- flags = { debounce_text_changes = 300 },
- single_file_support = true,
- settings = {
- python = {
- analysis = {
- autoSearchPaths = true,
- diagnosticMode = "openFilesOnly",
- useLibraryCodeForTypes = true,
- typeCheckingMode = "basic",
- },
- },
- },
-}
-M.rust_analyzer = {
- on_attach = on_attach,
- capabilities = capabilities,
- settings = {
- ["rust-analyzer"] = {
- check = {
- command = "clippy",
- },
- imports = {
- granularity = {
- group = "module",
- },
- prefix = "self",
- },
- cargo = {
- buildScripts = {
- enable = true,
- },
- },
- procMacro = {
- enable = true,
- },
- },
- },
-}
-
-M.ltex = {
- on_attach = on_attach,
- capabilities = capabilities,
- use_spellfile = false,
- settings = {
- ltex = {
- checkFrequency = "save", -- shut up while i'm just editing, see
- -- specific language (such as en-GB or de-DE is recommended, but I
- -- want multilingual)
- language = "auto",
- enabled = {
- "bibtex",
- "tex",
- "latex",
- "gitcommit",
- "markdown",
- "org",
- "restructuredtext",
- "rsweave",
- "quarto",
- "rmd",
- "context",
- -- "html",
- -- "xhtml",
- },
- additionalRules = {
- enablePickyRules = true,
- -- thats cool, but often adds diagnostics in
- -- places where a german might confuse words that are similar
- -- between english and german REGARDLESS of context. I seem to use the
- -- english words only in the proper contexts, so leaving this on
- -- just adds annoying hints like 'Hinweis: "list/NN.*" (English) bedeutet "Liste",
- -- "Verzeichnis" (German). Meinten Sie vielleicht 'cunning', 'trick'?'
- -- everytime I use the word "list". I liked that this makes the hints be
- -- in german regardless of the language I'm working in through...
- --motherTongue = "de",
- },
- -- load token and additional languagetool items later
- },
- },
-}
-
-M.textlsp = {
- on_attach = on_attach,
- capabilities = capabilities,
- filetypes = {
- "bibtex",
- "tex",
- "latex",
- "gitcommit",
- "markdown",
- "org",
- "restructuredtext",
- "rsweave",
- "quarto",
- "rmd",
- "context",
- "html",
- "xhtml",
- },
- settings = {
- textLSP = {
- analysers = {
- languagetool = {
- enabled = true,
- check_text = {
- on_open = true,
- on_save = true,
- on_change = false,
- },
- },
- gramformer = {
- -- gramformer dependency needs to be installed manually
- enabled = true,
- gpu = false,
- check_text = {
- on_open = false,
- on_save = true,
- on_change = false,
- },
- },
- hf_checker = {
- enabled = false,
- gpu = false,
- quantize = 32,
- model = "pszemraj/flan-t5-large-grammar-synthesis",
- min_length = 40,
- check_text = {
- on_open = false,
- on_save = true,
- on_change = false,
- },
- },
- hf_instruction_checker = {
- enabled = true,
- gpu = false,
- quantize = 32,
- model = "grammarly/coedit-large",
- min_length = 40,
- check_text = {
- on_open = false,
- on_save = true,
- on_change = false,
- },
- },
- hf_completion = {
- enabled = true,
- gpu = false,
- quantize = 32,
- model = "bert-base-multilingual-cased",
- topk = 5,
- },
- -- openai = {
- -- enabled = false,
- -- api_key = "",
- -- check_text = {
- -- on_open = false,
- -- on_save = false,
- -- on_change = false,
- -- },
- -- model = "gpt-3.5-turbo",
- -- max_token = 16,
- -- },
- -- grammarbot = {
- -- enabled = false,
- -- api_key = "",
- -- -- longer texts are split, this parameter sets the maximum number of splits per analysis
- -- input_max_requests = 1,
- -- check_text = {
- -- on_open = false,
- -- on_save = false,
- -- on_change = false,
- -- },
- -- },
- },
- documents = {
- -- org = {
- -- org_todo_keywords = {
- -- "TODO",
- -- "IN_PROGRESS",
- -- "DONE",
- -- },
- -- },
- txt = {
- parse = true,
- },
- },
- },
- },
-}
-
--- load secrets
--- the secret module should just return a string with the token
-local available, token = require("custom.utils").try_require "custom.secret.languagetool_token"
-if available then
- M.ltex.languageToolOrg = {
- apiKey = token,
- username = "accounts@cscherr.de",
- languageToolHttpServerUrl = "https://api.languagetoolplus.com/v2/",
- }
- M.ltex.languageToolHttpServerUrl = "https://api.languagetoolplus.com/v2/"
-end
-
-return M
diff --git a/lua/custom/configs/overrides.lua b/lua/custom/configs/overrides.lua
deleted file mode 100644
index 7e0c3cf..0000000
--- a/lua/custom/configs/overrides.lua
+++ /dev/null
@@ -1,71 +0,0 @@
-local M = {}
-
-M.treesitter = {
- ensure_installed = {
- "vim",
- "lua",
- "html",
- "css",
- "javascript",
- "typescript",
- "tsx",
- "c",
- "markdown",
- "markdown_inline",
- "rust",
- "cpp",
- "python",
- "yaml",
- "json",
- "toml",
- "bash",
- },
- indent = {
- enable = true,
- -- disable = {
- -- "python"
- -- },
- },
-}
-
-M.mason = {
- ensure_installed = {
- "purpose",
- "lua-language-server",
- "stylua",
- "css-lsp",
- "html-lsp",
- "typescript-language-server",
- "deno",
- "prettier",
- "clangd",
- "clang-format",
- "cmake-language-server",
- "rust-analyzer",
- "taplo",
- "basedpyright",
- "shellcheck",
- "bash-language-server",
- "ltex-ls",
- "shellcheck",
- "taplo",
- },
-}
-
--- git support in nvimtree
-M.nvimtree = {
- git = {
- enable = true,
- },
-
- renderer = {
- highlight_git = true,
- icons = {
- show = {
- git = true,
- },
- },
- },
-}
-
-return M
diff --git a/lua/custom/highlights.lua b/lua/custom/highlights.lua
deleted file mode 100644
index 6ff2e60..0000000
--- a/lua/custom/highlights.lua
+++ /dev/null
@@ -1,30 +0,0 @@
--- To find any highlight groups: " Telescope highlights"
--- Each highlight group can take a table with variables fg, bg, bold, italic, etc
--- base30 variable names can also be used as colors
-
-local M = {}
-
----@type Base46HLGroupsList
-M.override = {
- Comment = {
- italic = false,
- },
- -- NvDashAscii = {
- -- fg = "#b33366",
- -- bg = "#1a1a1a",
- -- },
- -- NvDashButtons = {
- -- fg = "White",
- -- bg = "#241e1e",
- -- },
- TodoFgNOTE = {
- fg = "#cccccc"
- }
-}
-
----@type HLTable
-M.add = {
- NvimTreeOpenedFolderName = { fg = "green", bold = true },
-}
-
-return M
diff --git a/lua/custom/init.lua b/lua/custom/init.lua
deleted file mode 100644
index b7cc7e0..0000000
--- a/lua/custom/init.lua
+++ /dev/null
@@ -1,196 +0,0 @@
-local opt = vim.opt
-local g = vim.g
-g.maplocalleader = ";"
-g.python3_host_prog = "/usr/bin/python3"
-
-opt.mouse = "a" -- mouse does annoying things for me if it's not 'a'
-opt.signcolumn = "yes"
-opt.clipboard = "" -- don't just use the system clipboard
-opt.wrap = false
-opt.breakindent = false
-opt.spell = false
-opt.list = true
-opt.conceallevel = 2
-opt.undofile = true
-opt.undolevels = 10000
-opt.writebackup = false
-opt.history = 5000
-opt.shada = { "'1000", "<50", "s10", "h" }
-
--- Tabs and Indents
--- ===
-
-opt.textwidth = 80 -- Text width maximum chars before wrapping
-opt.tabstop = 4 -- The number of spaces a tab is
-opt.shiftwidth = 4 -- Number of spaces to use in auto(indent)
-opt.smarttab = true -- Tab insert blanks according to 'shiftwidth'
-opt.autoindent = true -- Use same indenting on new lines
-opt.smartindent = true -- Smart autoindenting on new lines
-opt.shiftround = true -- Round indent to multiple of 'shiftwidth'
-
--- Timing
--- ===
--- NOTE: the which-key plugin makes this a little different. Instead of going
--- to a newline after "o", the which-key panel opens. Only when we input
--- something other than "o" it will go to the line and write that. I don't
--- really like this behavior. We can disable this for specific triggers.
--- See https://github.com/folke/which-key.nvim
-opt.timeout = true
-opt.ttimeout = true
-opt.timeoutlen = 250 -- Time out on mappings
-opt.ttimeoutlen = 10 -- Time out on key codes
-opt.updatetime = 300 -- Idle time to write swap and trigger CursorHold
-
--- Searching
--- ===
-opt.ignorecase = true -- Search ignoring case
-opt.smartcase = true -- Keep case when searching with *
-opt.infercase = true -- Adjust case in insert completion mode
-opt.incsearch = true -- Incremental search
-
--- Formatting
--- ===
-
-opt.wrap = false -- No wrap by default
-opt.linebreak = true -- Break long lines at 'breakat'
-opt.breakat = "\\ \\ ;:,!?" -- Long lines break chars
-opt.startofline = false -- Cursor in same column for few commands
-opt.splitbelow = true -- Splits open bottom right
-opt.splitright = true
-opt.breakindentopt = { shift = 2, min = 20 }
-opt.formatoptions = "qnlmBjp" -- see :h fo-table & :h formatoptions
-
--- Diff
--- ===
-
-opt.diffopt:append { "iwhite", "indent-heuristic", "algorithm:patience" }
-opt.wildmode = "longest:full,full" -- Command-line completion mode
-
--- Folds
--- ===
-
-opt.foldlevelstart = 15 -- start with some folds closed
-
--- Editor UI
--- ===
-
-vim.o.guifont = "FiraCode Nerd Font:h15"
-opt.termguicolors = true
-opt.shortmess = "xsTOInfFitloCaAs"
-opt.showmode = true -- Show mode in cmd window
-opt.scrolloff = 2 -- Keep at least n lines above/below
-opt.sidescrolloff = 0 -- Keep at least n lines left/right
-opt.numberwidth = 2 -- Minimum number of columns to use for the line number
-opt.number = true -- Show line numbers
-opt.relativenumber = true -- Show relative line numbers
-opt.ruler = true -- Default status ruler
-opt.list = true -- Show hidden characters
-opt.showtabline = 1 -- Don't change this, goes back to a vanilla vim default
-opt.laststatus = 3 -- Always show laststatus
-
-if vim.g.started_by_firenvim == true then
- opt.showtabline = 1 -- Don't show tabline in firenvim, unless multitab
- opt.laststatus = 1 -- Don't show laststatus in firenvim
- opt.wrap = true
-end
-
-if vim.g.neovide == true then
- -- fulscreen with F11
- vim.api.nvim_set_keymap("n", "", ":let g:neovide_fullscreen = !g:neovide_fullscreen", {})
-
- vim.g.neovide_underline_automatic_scaling = true
-
- -- vim.g.neovide_floating_blur_amount_x = 2.0
- -- vim.g.neovide_floating_blur_amount_y = 2.0
-
- vim.g.neovide_scroll_animation_length = 0.1
- -- vim.g.neovide_cursor_animation_length = 0
- -- vim.g.neovide_cursor_trail_size = 0
- vim.g.neovide_hide_mouse_when_typing = true
-
- vim.g.neovide_fullscreen = true
-end
-
-opt.helpheight = 0 -- Disable help window resizing
-opt.winwidth = 30 -- Minimum width for active window
-opt.winminwidth = 1 -- Minimum width for inactive windows
-opt.winheight = 1 -- Minimum height for active window
-opt.winminheight = 1 -- Minimum height for inactive window
-
-opt.showcmd = false -- show command in status line
-opt.cmdheight = 0
-opt.cmdwinheight = 5 -- Command-line lines
-opt.equalalways = true -- Resize windows on split or close
-opt.colorcolumn = "+0" -- Column highlight at textwidth's max character-limit
-
-opt.cursorline = true
-opt.cursorlineopt = { "number", "screenline" }
-
-opt.pumheight = 10 -- Maximum number of items to show in the popup menu
-opt.pumwidth = 10 -- Minimum width for the popup menu
-opt.pumblend = 10 -- Popup blend
-
--- Spelling correction
--- ===
-
-opt.spell = false -- manually enable spell with `set spell` or `ts`
-opt.spelllang = "en,de_de,"
-opt.spellsuggest = "double,50,timeout:5000"
-
--- autocommands
--- ===
-local function augroup(name)
- return vim.api.nvim_create_augroup("plex_" .. name, {})
-end
-
--- highlight on yank
-vim.api.nvim_create_autocmd("TextYankPost", {
- group = augroup "highlight_yank",
- callback = function()
- vim.highlight.on_yank()
- end,
-})
-
--- Disable conceallevel for specific file-types.
-vim.api.nvim_create_autocmd("FileType", {
- group = augroup "fix_conceallevel",
- pattern = { "latex", "tex" },
- callback = function()
- vim.opt_local.conceallevel = 0
- end,
-})
-
--- Resize splits if window got resized
-vim.api.nvim_create_autocmd("VimResized", {
- group = augroup "resize_splits",
- callback = function()
- vim.cmd "wincmd ="
- end,
-})
-
--- Wrap and enable spell-checker in text filetypes
--- also enable wrap on these text filetypes
-vim.api.nvim_create_autocmd("FileType", {
- group = augroup "spell_conceal",
- pattern = { "gitcommit", "markdown", "tex", "latex", "norg" },
- callback = function()
- vim.opt_local.spell = true
- vim.opt_local.conceallevel = 0
- vim.opt.wrap = true
- -- vim.opt.formatoptions = ""
- end,
-})
-
--- map resizing for firenvim
-if vim.g.started_by_firenvim == true then
- vim.keymap.set("n", "", function()
- vim.o.lines = vim.o.lines + 1
- end, { expr = true, desc = "Make Display bigger" })
- vim.keymap.set("n", "", function()
- vim.o.lines = vim.o.lines - 1
- end, { expr = true, desc = "Make Display smaller" })
-end
-
--- alias filetypes
-vim.filetype.add { extension = { tera = "html" } }
-vim.filetype.add { extension = { plaintex = "tex" } }
diff --git a/lua/custom/mappings.lua b/lua/custom/mappings.lua
deleted file mode 100644
index 60350e2..0000000
--- a/lua/custom/mappings.lua
+++ /dev/null
@@ -1,670 +0,0 @@
----@type MappingsTable
-
-local M = {}
-
--- NOTE: The mappings here are case sensitive!!! Removing a specific default
--- mapping requires the same case here!
-M.disabled = {
- n = {
- [""] = "",
- [""] = "",
- [""] = "",
- ["n"] = "",
- ["rn"] = "",
- [""] = "",
- [""] = "",
- ["x"] = "",
- ["/"] = "",
- ["ra"] = "",
- ["[d"] = "",
- ["]d"] = "",
- ["[c"] = "",
- ["]c"] = "",
- ["h"] = "",
- ["