From e0ca87efd63ed88006829510f66124afeb5f37b5 Mon Sep 17 00:00:00 2001 From: Kiril Date: Tue, 30 Apr 2024 11:24:23 +0100 Subject: [PATCH] Sync Neovim config --- .gitignore | 7 + .stylua.toml | 6 + LICENSE.md | 19 +++ README.md | 277 ++++++++++++++++++++++++++++++++++++ doc/kickstart.txt | 24 ++++ init.lua | 16 +++ lua/instant_options.lua | 1 + lua/plugins/alpha.lua | 6 + lua/plugins/completions.lua | 45 ++++++ lua/plugins/debugging.lua | 36 +++++ lua/plugins/live-share.lua | 3 + lua/plugins/lsp.lua | 41 ++++++ lua/plugins/lualine.lua | 11 ++ lua/plugins/neotree.lua | 12 ++ lua/plugins/none-ls.lua | 15 ++ lua/plugins/sessions.lua | 4 + lua/plugins/telescope.lua | 24 ++++ lua/plugins/theme.lua | 38 +++++ lua/plugins/theme.lua.old | 9 ++ lua/plugins/treesitter.lua | 13 ++ lua/vim_options.lua | 15 ++ 21 files changed, 622 insertions(+) create mode 100644 .gitignore create mode 100644 .stylua.toml create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 doc/kickstart.txt create mode 100644 init.lua create mode 100644 lua/instant_options.lua create mode 100644 lua/plugins/alpha.lua create mode 100644 lua/plugins/completions.lua create mode 100644 lua/plugins/debugging.lua create mode 100644 lua/plugins/live-share.lua create mode 100644 lua/plugins/lsp.lua create mode 100644 lua/plugins/lualine.lua create mode 100644 lua/plugins/neotree.lua create mode 100644 lua/plugins/none-ls.lua create mode 100644 lua/plugins/sessions.lua create mode 100644 lua/plugins/telescope.lua create mode 100644 lua/plugins/theme.lua create mode 100644 lua/plugins/theme.lua.old create mode 100644 lua/plugins/treesitter.lua create mode 100644 lua/vim_options.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..005b535 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +tags +test.sh +.luarc.json +nvim + +spell/ +lazy-lock.json diff --git a/.stylua.toml b/.stylua.toml new file mode 100644 index 0000000..139e939 --- /dev/null +++ b/.stylua.toml @@ -0,0 +1,6 @@ +column_width = 160 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferSingle" +call_parentheses = "None" 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 new file mode 100644 index 0000000..3453cfa --- /dev/null +++ b/README.md @@ -0,0 +1,277 @@ +# kickstart.nvim + +## Introduction + +A starting point for Neovim that is: + +* Small +* Single-file +* Completely Documented + +**NOT** a Neovim distribution, but instead a starting point for your configuration. + +## Installation + +### Install Neovim + +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 + +> **NOTE** +> [Backup](#FAQ) your previous configuration (if any exists) + +External Requirements: +- Basic utils: `git`, `make`, `unzip`, C Compiler (`gcc`) +- [ripgrep](https://github.com/BurntSushi/ripgrep#installation) +- 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. + +> **NOTE** +> See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes +> and quick install snippets + +Neovim's configurations are located under the following paths, depending on your OS: + +| OS | PATH | +| :- | :--- | +| Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` | +| Windows (cmd)| `%userprofile%\AppData\Local\nvim\` | +| Windows (powershell)| `$env:USERPROFILE\AppData\Local\nvim\` | + +### Install Kickstart + +#### Recommended Step + +[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` + +#### Clone kickstart.nvim +> **NOTE** +> If following the recommended step above (i.e., forking the repo), replace +> `nvim-lua` with `` in the commands below + +
Linux and Mac + +```sh +git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim +``` + +
+ +
Windows + +If you're using `cmd.exe`: + +``` +git clone https://github.com/nvim-lua/kickstart.nvim.git %userprofile%\AppData\Local\nvim\ +``` + +If you're using `powershell.exe` + +``` +git clone https://github.com/nvim-lua/kickstart.nvim.git $env:USERPROFILE\AppData\Local\nvim\ +``` + +
+ +### Post Installation + +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. + + +#### Examples of adding popularly requested plugins + +NOTE: You'll need to uncomment the line in the init.lua that turns on loading custom plugins. + +
+ Adding autopairs + +This will automatically install [windwp/nvim-autopairs](https://github.com/windwp/nvim-autopairs) +and enable it on startup. For more information, see documentation for +[lazy.nvim](https://github.com/folke/lazy.nvim). + +In the file: `lua/custom/plugins/autopairs.lua`, add: + +```lua +-- File: lua/custom/plugins/autopairs.lua + +return { + "windwp/nvim-autopairs", + -- Optional dependency + dependencies = { 'hrsh7th/nvim-cmp' }, + config = function() + require("nvim-autopairs").setup {} + -- If you want to automatically add `(` after selecting a function or method + local cmp_autopairs = require('nvim-autopairs.completion.cmp') + local cmp = require('cmp') + cmp.event:on( + 'confirm_done', + cmp_autopairs.on_confirm_done() + ) + end, +} +``` + +
+
+ Adding a file tree plugin + +This will install the tree plugin and add the command `:Neotree` for you. +For more information, see the documentation at +[neo-tree.nvim](https://github.com/nvim-neo-tree/neo-tree.nvim). + +In the file: `lua/custom/plugins/filetree.lua`, add: + +```lua +-- File: lua/custom/plugins/filetree.lua + +return { + "nvim-neo-tree/neo-tree.nvim", + version = "*", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", -- not strictly required, but recommended + "MunifTanjim/nui.nvim", + }, + config = function () + require('neo-tree').setup {} + end, +} +``` + +
+ +### 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 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 neovim +``` +
+
Debian Install Steps + +``` +sudo apt update +sudo apt install make gcc ripgrep unzip git +echo "deb https://deb.debian.org/debian unstable main" | sudo tee -a /etc/apt/sources.list +sudo apt update +sudo apt install -t unstable neovim +``` +
+
Fedora Install Steps + +``` +sudo dnf install -y gcc make git ripgrep fd-find neovim +``` +
+ 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/init.lua b/init.lua new file mode 100644 index 0000000..d3dd2f2 --- /dev/null +++ b/init.lua @@ -0,0 +1,16 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", + lazypath, + }) +end + +vim.opt.rtp:prepend(lazypath) +require("vim_options") +require("lazy").setup("plugins") + diff --git a/lua/instant_options.lua b/lua/instant_options.lua new file mode 100644 index 0000000..bc5949c --- /dev/null +++ b/lua/instant_options.lua @@ -0,0 +1 @@ +vim.g.instant_username = "kiril" diff --git a/lua/plugins/alpha.lua b/lua/plugins/alpha.lua new file mode 100644 index 0000000..70e42b8 --- /dev/null +++ b/lua/plugins/alpha.lua @@ -0,0 +1,6 @@ +return { + "goolord/alpha-nvim", + config = function () + require("alpha").setup(require("alpha.themes.dashboard").config) + end +}; diff --git a/lua/plugins/completions.lua b/lua/plugins/completions.lua new file mode 100644 index 0000000..48ce885 --- /dev/null +++ b/lua/plugins/completions.lua @@ -0,0 +1,45 @@ +return { + { + "hrsh7th/cmp-nvim-lsp" + }, + { + "L3MON4D3/LuaSnip", + dependencies = { + "saadparwaiz1/cmp_luasnip", + "rafamadriz/friendly-snippets" + } + }, + { + "hrsh7th/nvim-cmp", + config=function() + local cmp = require("cmp") + require("luasnip.loaders.from_vscode").lazy_load() + + cmp.setup({ + snippet = { + -- REQUIRED - you must specify a snippet engine + expand = function(args) + require("luasnip").lsp_expand(args.body) -- For `luasnip` users. + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + mapping = cmp.mapping.preset.insert({ + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.abort(), + [''] = cmp.mapping.confirm({ select = true }), + }), + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'luasnip' }, -- For luasnip users. + }, { + { name = 'buffer' }, + }) + }) + end + } +} diff --git a/lua/plugins/debugging.lua b/lua/plugins/debugging.lua new file mode 100644 index 0000000..38a1afe --- /dev/null +++ b/lua/plugins/debugging.lua @@ -0,0 +1,36 @@ +return { + "mfussenegger/nvim-dap", + dependencies={ + { + "rcarriga/nvim-dap-ui", + dependencies={ + "nvim-neotest/nvim-nio" + }}, + { + "mfussenegger/nvim-dap-python" + } + }, + config=function () + local dap = require("dap") + local dapui = require("dapui") + + vim.keymap.set("n", "dt", dap.toggle_breakpoint, {}) + vim.keymap.set("n", "dc", dap.continue, {}) + + require("dapui").setup() + require("dap-python").setup("~/.virtualenvs/debugpy/bin/python") + + dap.listeners.before.attach.dapui_config = function() + dapui.open() + end + dap.listeners.before.launch.dapui_config = function() + dapui.open() + end + dap.listeners.before.event_terminated.dapui_config = function() + dapui.close() + end + dap.listeners.before.event_exited.dapui_config = function() + dapui.close() + end + end +} diff --git a/lua/plugins/live-share.lua b/lua/plugins/live-share.lua new file mode 100644 index 0000000..8dbecc6 --- /dev/null +++ b/lua/plugins/live-share.lua @@ -0,0 +1,3 @@ +return { + "jbyuki/instant.nvim" +} diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua new file mode 100644 index 0000000..b2dbc39 --- /dev/null +++ b/lua/plugins/lsp.lua @@ -0,0 +1,41 @@ +return { + {"williamboman/mason.nvim", + config=function() + require("mason").setup() + end + }, + { + "williamboman/mason-lspconfig.nvim", + config=function() + require("mason-lspconfig").setup({ + ensure_installed = { + "lua_ls", + "ruff_lsp", + "pyright", + } + }) + end + }, + { + "neovim/nvim-lspconfig", + config=function() + local capabilities = require("cmp_nvim_lsp").default_capabilities() + local lspconfig = require("lspconfig") + + lspconfig.lua_ls.setup({ + capabilities=capabilities + }) + lspconfig.pyright.setup({ + capabilities=capabilities + }) + lspconfig.ruff_lsp.setup({ + capabilities=capabilities + }) + + vim.keymap.set("n", "K", vim.lsp.buf.hover, {}) + vim.keymap.set("n", "gd", vim.lsp.buf.definition, {}) + vim.keymap.set({"n", "v"}, "ca", vim.lsp.buf.code_action, {}) + end + } +} + diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua new file mode 100644 index 0000000..d191014 --- /dev/null +++ b/lua/plugins/lualine.lua @@ -0,0 +1,11 @@ +return { + "nvim-lualine/lualine.nvim", + dependencies = {"nvim-tree/nvim-web-devicons"}, + config=function() + require("lualine").setup({ + options={ + theme="vscode" + } + }) + end +} diff --git a/lua/plugins/neotree.lua b/lua/plugins/neotree.lua new file mode 100644 index 0000000..affb347 --- /dev/null +++ b/lua/plugins/neotree.lua @@ -0,0 +1,12 @@ +return { + "nvim-neo-tree/neo-tree.nvim", + branch = "v3.x", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", + "MunifTanjim/nui.nvim", + }, + config=function() + vim.keymap.set("n", "", ":Neotree filesystem toggle left") + end +} diff --git a/lua/plugins/none-ls.lua b/lua/plugins/none-ls.lua new file mode 100644 index 0000000..9ce7259 --- /dev/null +++ b/lua/plugins/none-ls.lua @@ -0,0 +1,15 @@ +return { + "nvimtools/none-ls.nvim", + config=function() + local null_ls = require("null-ls") + null_ls.setup({ + sources = { + -- null_ls.builtins.formatting.stylua, -- THIS SUCKS ASS + null_ls.builtins.formatting.isort, + null_ls.builtins.formatting.black, + } + + }) + vim.keymap.set("n", "f", vim.lsp.buf.format, {}) + end +} diff --git a/lua/plugins/sessions.lua b/lua/plugins/sessions.lua new file mode 100644 index 0000000..8e7a0a4 --- /dev/null +++ b/lua/plugins/sessions.lua @@ -0,0 +1,4 @@ +return { +-- "Shatur/neovim-session-manager", +-- opts={} +} diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua new file mode 100644 index 0000000..2eeb336 --- /dev/null +++ b/lua/plugins/telescope.lua @@ -0,0 +1,24 @@ +return { + { + "nvim-telescope/telescope.nvim", tag="0.1.5", + dependencies = { "nvim-lua/plenary.nvim"}, + config=function() + local builtin = require("telescope.builtin") + vim.keymap.set("n", "", builtin.find_files, {}) + vim.keymap.set("n", "fg", builtin.live_grep, {}) + end + }, + { + "nvim-telescope/telescope-ui-select.nvim", + config= function() + require("telescope").setup { + extensions = { + ["ui-select"] = { + require("telescope.themes").get_dropdown({}) + } + } + } + require("telescope").load_extension("ui-select") + end + } +} diff --git a/lua/plugins/theme.lua b/lua/plugins/theme.lua new file mode 100644 index 0000000..62fb035 --- /dev/null +++ b/lua/plugins/theme.lua @@ -0,0 +1,38 @@ +return { + "Mofiqul/vscode.nvim", + name="vscode", + priority=1000, + config=function() + local c = require("vscode.colors").get_colors() + require("vscode").setup({ + -- Alternatively set style in setup + -- style = 'light' + + -- Enable transparent background + transparent = true, + + -- Enable italic comment + italic_comments = true, + + -- Underline `@markup.link.*` variants + underline_links = true, + + -- Disable nvim-tree background color + disable_nvimtree_bg = true, + + -- Override colors (see ./lua/vscode/colors.lua) + color_overrides = { + vscLineNumber = '#FFFFFF', + }, + + -- Override highlight groups (see ./lua/vscode/theme.lua) + group_overrides = { + -- this supports the same val table as vim.api.nvim_set_hl + -- use colors from this colorscheme by requiring vscode.colors! + Cursor = { fg=c.vscDarkBlue, bg=c.vscLightGreen, bold=true }, + } + }) + vim.cmd.colorscheme("vscode") + end +} + diff --git a/lua/plugins/theme.lua.old b/lua/plugins/theme.lua.old new file mode 100644 index 0000000..25cdbb7 --- /dev/null +++ b/lua/plugins/theme.lua.old @@ -0,0 +1,9 @@ +return { + "catppuccin/nvim", + name="catppuccin", + priority=1000, + config=function() + vim.cmd.colorscheme("catppuccin") + end +} + diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua new file mode 100644 index 0000000..b4f13bf --- /dev/null +++ b/lua/plugins/treesitter.lua @@ -0,0 +1,13 @@ +return { + "nvim-treesitter/nvim-treesitter", + build=":TSUpdate", + config=function() + local config = require("nvim-treesitter.configs") + config.setup({ + ensure_installed = {"lua", "python", "rust"}, + highlight = {enable=true}, + indent = {enable=true}, + }) + end +} + diff --git a/lua/vim_options.lua b/lua/vim_options.lua new file mode 100644 index 0000000..5269efa --- /dev/null +++ b/lua/vim_options.lua @@ -0,0 +1,15 @@ +vim.opt.expandtab = true +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.o.background = "dark" +vim.g.mapleader = " " +vim.opt.breakindent = true +vim.opt.number = true +vim.opt.relativenumber = true +vim.opt.fillchars="eob: " -- Remove the trailing ~s +vim.opt.showmode = false + +-- Instant.nvim for Live Share function +require("instant_options") +