# AstroVim **Repository Path**: ryan6981/AstroVim ## Basic Information - **Project Name**: AstroVim - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-11-10 - **Last Updated**: 2023-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

AstroVim

AstroVim is an aesthetic and feature-rich neovim config that is extensible and easy to use with a great set of plugins

**BREAKING RELEASE NOTICE:** If you were using AstroVim before the official release, please see the updated user configuration in the [`lua/user_example` folder](https://github.com/kabinspace/AstroVim/tree/main/lua/user_example) as well as the updated configuration details below and in the `user_example` README. The official release came with a lot of restructuring changes to make things easier and more "future-proof". ## 🌟 Preview ![Preview1](./utils/media/preview1.png) ![Preview2](./utils/media/preview2.png) ![Preview33](./utils/media/preview3.png) ## ⚡ Requirements - [Nerd Fonts](https://www.nerdfonts.com/font-downloads) - [Neovim 0.6+](https://github.com/neovim/neovim/releases/tag/v0.6.1) ## 🛠️ Installation ### Linux #### Make a backup of your current nvim folder ``` mv ~/.config/nvim ~/.config/nvimbackup ``` #### Clone the repository ``` git clone https://github.com/kabinspace/AstroVim ~/.config/nvim nvim +PackerSync ``` ## 📦 Setup #### Install LSP Enter `:LspInstall` followed by the name of the server you want to install
Example: `:LspInstall pyright` #### Install language parser Enter `:TSInstall` followed by the name of the language you want to install
Example: `:TSInstall python` #### Manage plugins Run `:PackerClean` to remove any disabled or unused plugins
Run `:PackerSync` to update and clean plugins
#### Update AstroVim Run `:AstroUpdate` to get the latest updates from the repository
## ✨ Features - File explorer with [Nvimtree](https://github.com/kyazdani42/nvim-tree.lua) - Autocompletion with [Cmp](https://github.com/hrsh7th/nvim-cmp) - Git integration with [Gitsigns](https://github.com/lewis6991/gitsigns.nvim) - Statusline with [Lualine](https://github.com/nvim-lualine/lualine.nvim) - Terminal with [Toggleterm](https://github.com/akinsho/toggleterm.nvim) - Fuzzy finding with [Telescope](https://github.com/nvim-telescope/telescope.nvim) - Syntax highlighting with [Treesitter](https://github.com/nvim-treesitter/nvim-treesitter) - Formatting and linting with [Null-ls](https://github.com/jose-elias-alvarez/null-ls.nvim) - Language Server Protocol with [Native LSP](https://github.com/neovim/nvim-lspconfig) ## ⚙️ Configuration To begin making custom user configurations you must create a `user/` folder. The provided example can be created with (please note the trailing slashes after the directory names) ```sh cp -r ~/.config/nvim/lua/user_example/ ~/.config/nvim/lua/user/ ``` The provided example [user_example](https://github.com/kabinspace/AstroVim/blob/main/lua/user_example) contains an `init.lua` file which can be used for all user configuration. After running the `cp` command above this file can be found in `~/.config/nvim/lua/user/init.lua`. **Advanced Configuration Options** are described in the [`AstroVim wiki`](https://github.com/kabinspace/AstroVim/wiki/Advanced-Configuration) ## Extending AstroVim AstroVim should allow you to extend its functionality without going outside of the `user` directory! Please get in contact when you run into some setup issue where that is not the case. ### Add more Plugins Just copy the `packer` configuration without the `use` and with a `,` after the last closing `}` into the `plugins.init` entry of your `user/init.lua` file. See the example in the [user_example](https://github.com/kabinspace/AstroVim/blob/main/lua/user_example) directory. ### Change Default Plugin Configurations AstroVim allows you to easily override the setup of any pre-configured plugins. Simply add a table to the `plugins` table with a key the same name as the plugin package and return a table with the new options or overrides that you want. For an example see the included `plugins` entry for `treesitter` in the `user_example` folder which lets you extend the default treesitter configuration. ### Change Default Packer Configuration The `plugins` table extensibility includes the packer configuration for all plugins, user plugins as well as plugins configured by AstroVim. E.g. this code in your `init.lua` `plugins.init` table entry to remove `dashboard-nvim` and disable lazy loading of `toggleterm`: ```lua plugins = { -- if the plugins init table can be a function on the default plugin table -- instead of a table to be extended. This lets you modify the details of the default plugins init = function(plugins) -- add your new plugins to this table local my_plugins = { -- { "andweeb/presence.nvim" }, -- { -- "ray-x/lsp_signature.nvim", -- event = "BufRead", -- config = function() -- require("lsp_signature").setup() -- end, -- }, } -- Remove a default plugins all-together plugins["glepnir/dashboard-nvim"] = nil -- Modify default plugin packer configuration plugins["akinsho/nvim-toggleterm.lua"]["cmd"] = nil -- add the my_plugins table to the plugin table return vim.tbl_deep_extend("force", plugins, my_plugins) end, }, ``` ### Adding sources to `nvim-cmp` To add new completion sources to `nvim-cmp` you can add the plugin (see above) providing that source like this: ```lua plugins = { init = { { "Saecki/crates.nvim", after = "nvim-cmp", config = function() require("crates").setup() local cmp = require "cmp" local config = cmp.get_config() table.insert(config.sources, { name = "crates" }) cmp.setup(config) end, }, }, }, ``` Use the options provided by `nvim-cmp` to change the order, etc. as you see fit. ### Add Custom LSP Server Settings You might want to override the default LSP settings for some servers to enable advanced features. This can be achieved with the `lsp.server-settings` table inside of your `user/init.lua` config and creating entries where the keys are equal to the LSP server. Examples of these table entries can be found in [`/lua/configs/lsp/server-settings`](https://github.com/kabinspace/AstroVim/tree/main/lua/configs/lsp/server-settings). For example, if you want to add schemas to the `yamlls` LSP server, you can add the following to the `user/init.lua` file: ```lua lsp = { ["server-settings"] = { yamlls = { settings = { yaml = { schemas = { ["http://json.schemastore.org/github-workflow"] = ".github/workflows/*.{yml,yaml}", ["http://json.schemastore.org/github-action"] = ".github/action.{yml,yaml}", ["http://json.schemastore.org/ansible-stable-2.9"] = "roles/tasks/*.{yml,yaml}", }, }, }, }, }, }, ``` ### Compley LSP server setup Some plugins need to do special magic to the LSP configuration to enable advanced features. One example for this is the `rust-tools.nvim` plugin. Those can override `lsp.server_registration`. For example the `rust-tools.nvim` plugin can be set up in the `user/init.lua` file as follows: ```lua plugins = { init = { -- Plugin definition: { "simrat39/rust-tools.nvim", requires = { "nvim-lspconfig", "nvim-lsp-installer", "nvim-dap", "Comment.nvim" }, -- Is configured via the server_registration_override installed below! }, }, }, lsp = { server_registration = function(server, server_opts) -- Special code for rust.tools.nvim! if server.name == "rust_analyzer" then local extension_path = vim.fn.stdpath "data" .. "/dapinstall/codelldb/extension/" local codelldb_path = extension_path .. "adapter/codelldb" local liblldb_path = extension_path .. "lldb/lib/liblldb.so" require("rust-tools").setup { server = server_opts, dap = { adapter = require("rust-tools.dap").get_codelldb_adapter(codelldb_path, liblldb_path), }, } else server:setup(server_opts) end end, }, ``` ### Extending the LSP on_attach Function Some users may want to have more control over the `on_attach` function of their LSP servers to enable or disable capabilities. This can be extended with `lsp.on_attach` in the `user/init.lua` file. For example if you want to disable document formatting for `intelephense` in `user/init.lua`: ```lua lsp = { on_attach = function(client, bufnr) if client.name == "intelephense" then client.resolved_capabilities.document_formatting = false client.resolved_capabilities.document_range_formatting = false end end, }, ``` ### More Configuration Options More detailed explanations of the possible configuration options are described in the [AstroVim wiki](https://github.com/kabinspace/AstroVim/wiki/Advanced-Configuration) ## 🗒️ Note [Guide](https://github.com/kabinspace/AstroVim/blob/main/utils/userguide.md) is given for basic usage
[Learn](https://github.com/kabinspace/AstroVim/blob/main/utils/mappings.txt) more about the default key bindings
[Watch](https://www.youtube.com/watch?v=JQLZ7NJRTEo&t=4s&ab_channel=JohnCodes) a review video to know about the out of the box experience ## ⭐ Credits Sincere appreciation to the following repositories, plugin authors and the entire neovim community out there that made the development of AstroVim possible. - [Plugins](https://github.com/kabinspace/AstroVim/blob/main/utils/plugins.txt) - [NvChad](https://github.com/NvChad/NvChad) - [LunarVim](https://github.com/LunarVim) - [CosmicVim](https://github.com/CosmicNvim/CosmicNvim)
[![Lua](https://img.shields.io/badge/Made%20with%20Lua-blue.svg?style=for-the-badge&logo=lua)](https://lua.org)