From ca53467321aefd90169e4f9f98d4e336359b75ba Mon Sep 17 00:00:00 2001 From: Daniil Tsivinsky Date: Fri, 12 Nov 2021 22:32:28 +0300 Subject: [PATCH] Create new neovim config with lua --- config/nvim/init.lua | 33 ++++++ config/nvim/lua/file-tree.lua | 25 +++++ config/nvim/lua/general.lua | 28 +++++ config/nvim/lua/lsp.lua | 64 +++++++++++ config/nvim/lua/plugins.lua | 57 ++++++++++ config/nvim/lua/remaps.lua | 77 +++++++++++++ config/nvim/lua/telescope-config.lua | 5 + config/nvim/lua/treesitter.lua | 15 +++ config/nvim/plugin/packer_compiled.lua | 146 +++++++++++++++++++++++++ 9 files changed, 450 insertions(+) create mode 100644 config/nvim/init.lua create mode 100644 config/nvim/lua/file-tree.lua create mode 100644 config/nvim/lua/general.lua create mode 100644 config/nvim/lua/lsp.lua create mode 100644 config/nvim/lua/plugins.lua create mode 100644 config/nvim/lua/remaps.lua create mode 100644 config/nvim/lua/telescope-config.lua create mode 100644 config/nvim/lua/treesitter.lua create mode 100644 config/nvim/plugin/packer_compiled.lua diff --git a/config/nvim/init.lua b/config/nvim/init.lua new file mode 100644 index 0000000..3729ae3 --- /dev/null +++ b/config/nvim/init.lua @@ -0,0 +1,33 @@ +require("plugins") +require("general") + +require("treesitter") +require("file-tree") +require("telescope-config") +require("lsp") + +require("remaps") + +-- Tabs +require("bufferline").setup() + +-- Statusline +require("lualine").setup() + +-- Git +require("gitsigns").setup({ + current_line_blame = true, + current_line_blame_opts = { + virt_text = true, + virt_text_pos = "eol", + delay = 500 + }, + keymaps = { + noremap = true, + ["n gs"] = 'lua require("gitsigns").stage_hunk()', + ["n gu"] = 'lua require("gitsigns").undo_stage_hunk()' + } +}) + +-- Automatically formatting buffer on save +vim.api.nvim_command("autocmd BufWritePre * lua vim.lsp.buf.formatting_sync()") diff --git a/config/nvim/lua/file-tree.lua b/config/nvim/lua/file-tree.lua new file mode 100644 index 0000000..3283b91 --- /dev/null +++ b/config/nvim/lua/file-tree.lua @@ -0,0 +1,25 @@ +require("nvim-tree").setup({ + open_on_setup = true, + hijack_cursor = true, + update_cwd = true, + update_focused_file = { + enable = true + }, + view = { + width = 30, + side = "left", + auto_resize = true + }, + filters = { + custom = { ".git" } + } +}) + +vim.g.nvim_tree_add_trailing = 1 +vim.g.nvim_tree_indent_markers = 1 +vim.g.nvim_tree_show_icons = { + git = 0, + folders = 0, + files = 0, + folder_arrows = 0 +} diff --git a/config/nvim/lua/general.lua b/config/nvim/lua/general.lua new file mode 100644 index 0000000..6548fb2 --- /dev/null +++ b/config/nvim/lua/general.lua @@ -0,0 +1,28 @@ +vim.o.tabstop = 2 +vim.o.shiftwidth = 2 +vim.o.expandtab = true +vim.o.autoindent = true + +vim.o.number = true +vim.o.relativenumber = true +vim.o.wrap = true +vim.o.swapfile = true +vim.o.encoding = "utf-8" +vim.o.hidden = true +vim.o.writebackup = false +vim.o.cmdheight = 2 +vim.o.updatetime = 300 +vim.o.shortmess = "filnxtToOFc" +vim.o.mouse = "a" +vim.o.cursorline = true +vim.o.clipboard = "unnamedplus" +vim.o.splitright = true +vim.o.splitbelow = true +vim.o.termguicolors = true + +vim.g.mapleader = " " + +vim.cmd([[ + let ayucolor = "mirage" + colorscheme ayu +]]) diff --git a/config/nvim/lua/lsp.lua b/config/nvim/lua/lsp.lua new file mode 100644 index 0000000..f62ab0e --- /dev/null +++ b/config/nvim/lua/lsp.lua @@ -0,0 +1,64 @@ +local lsp_installer = require("nvim-lsp-installer") +local cmp = require("cmp") +local lspkind = require("lspkind") + +cmp.setup({ + snippet = { + expand = function(args) + require("luasnip").lsp_expand(args.body) + end + }, + mapping = { + [''] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), + [''] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), + [''] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), + [''] = cmp.mapping.confirm({ select = true }), + [''] = function(fallback) + if cmp.visible() then + cmp.select_next_item() + else + fallback() + end + end, + [''] = function(fallback) + if cmp.visible() then + cmp.select_prev_item() + else + fallback() + end + end + }, + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "nvim_lua" } + }, { + { name = "buffer", keyword_length = 5 } + }), + completion = { + completeopt = "menu,menuone,noselect,noinsert" + }, + formatting = { + format = lspkind.cmp_format({ + with_text = true, + menu = { + buffer = "[buf]", + nvim_lsp = "[LSP]", + path = "[path]" + } + }) + }, + experimental = { + ghost_text = true + } +}) + +local capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities()) + +lsp_installer.on_server_ready(function(server) + local opts = { + capabilities = capabilities + } + + server:setup(opts) +end) diff --git a/config/nvim/lua/plugins.lua b/config/nvim/lua/plugins.lua new file mode 100644 index 0000000..35408ba --- /dev/null +++ b/config/nvim/lua/plugins.lua @@ -0,0 +1,57 @@ +return require("packer").startup(function(use) + use("wbthomason/packer.nvim") + + -- The best colorscheme out there + use({ "ayu-theme/ayu-vim" }) + + -- Treesitter + use({ "nvim-treesitter/nvim-treesitter", run = ":TSUpdate" }) + use({ "p00f/nvim-ts-rainbow" }) + use({ "windwp/nvim-ts-autotag" }) + use({ "JoosepAlviste/nvim-ts-context-commentstring" }) + + -- Make commenting code great + use({ "tpope/vim-commentary" }) + + -- File tree + use({ "kyazdani42/nvim-tree.lua", requires = { "kyazdani42/nvim-web-devicons" } }) + + -- Telescope + use({ "nvim-telescope/telescope.nvim", requires = { "nvim-lua/plenary.nvim" } }) + + -- Automatically close brackets and quotes + use({ + "steelsojka/pears.nvim", + config = function() + require("pears").setup() + end + }) + + -- LSP + use({ "neovim/nvim-lspconfig", "williamboman/nvim-lsp-installer", "onsails/lspkind-nvim" }) + use({ "jose-elias-alvarez/null-ls.nvim" }) + use({ "hrsh7th/nvim-cmp", requires = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-cmdline", + "hrsh7th/cmp-nvim-lua", + "saadparwaiz1/cmp_luasnip" + }}) + use({ "L3MON4D3/LuaSnip" }) + + -- Tabs + use({ "akinsho/bufferline.nvim", requires = { "kyazdani42/nvim-web-devicons" } }) + + -- Terminal + use({ "caenrique/nvim-toggle-terminal" }) + + -- Statusline + use({ "nvim-lualine/lualine.nvim", requires = { "kyazdani42/nvim-web-devicons", opt = true } }) + + -- Git + use({ "lewis6991/gitsigns.nvim", requires = { "nvim-lua/plenary.nvim" } }) + use({ "tpope/vim-fugitive" }) + + use({ "fatih/vim-go" }) +end) diff --git a/config/nvim/lua/remaps.lua b/config/nvim/lua/remaps.lua new file mode 100644 index 0000000..8007bbb --- /dev/null +++ b/config/nvim/lua/remaps.lua @@ -0,0 +1,77 @@ +local function map(mode, shortcut, command) + vim.api.nvim_set_keymap(mode, shortcut, command, { noremap = true, silent = true }) +end + +local function nmap(shortcut, command) + map("n", shortcut, command) +end + +local function vmap(shortcut, command) + map("v", shortcut, command) +end + +local function imap(shortcut, command) + map("i", shortcut, command) +end + +-- Quickly save/quit vim +nmap("w", ":w") +nmap("q", ":q") + +-- Move line under the cursor up and down +nmap("", ":m .-2==") +nmap("", ":m .+1==") +vmap("K", ":m '<-2gv=gv") +vmap("J", ":m '>+1gv=gv") + +-- Remove search highlighting +nmap("nh", ":nohl") + +-- Escape from terminal +map("t", "", "") + +-- Open splits +nmap("sv", ":vs") +nmap("sh", ":sp") + +-- Move focus between splits +nmap("h", "h") +nmap("j", "j") +nmap("k", "k") +nmap("l", "l") + +-- Resize splits +nmap("", ":resize -2") +nmap("", ":resize +2") +nmap("", ":vert resize -10") +nmap("", ":vert resize +10") + +-- File tree +nmap("b", ":NvimTreeToggle") + +-- Telescope +nmap("f", ":Telescope find_files") + +-- LSP +-- nmap("K", "lua vim.lsp.buf.hover()") +-- nmap("gd", "lua vim.lsp.buf.definition()") +-- nmap(".", "lua vim.lsp.buf.code_action()") +-- nmap("", "lua vim.lsp.buf.rename()") +-- imap("", "lua vim.lsp.buf.completion()") + +-- Tabs +nmap("1", ":BufferLineGoToBuffer 1") +nmap("2", ":BufferLineGoToBuffer 2") +nmap("3", ":BufferLineGoToBuffer 3") +nmap("4", ":BufferLineGoToBuffer 4") +nmap("5", ":BufferLineGoToBuffer 5") +nmap("6", ":BufferLineGoToBuffer 6") +nmap("7", ":BufferLineGoToBuffer 7") +nmap("8", ":BufferLineGoToBuffer 8") +nmap("9", ":BufferLineGoToBuffer 9") + +-- Terminal +nmap("t", ":ToggleTerminal") + +-- Git +nmap("gg", ":G") diff --git a/config/nvim/lua/telescope-config.lua b/config/nvim/lua/telescope-config.lua new file mode 100644 index 0000000..9bc7df7 --- /dev/null +++ b/config/nvim/lua/telescope-config.lua @@ -0,0 +1,5 @@ +require("telescope").setup({ + defaults = { + sorting_strategy = "ascending" + } +}) diff --git a/config/nvim/lua/treesitter.lua b/config/nvim/lua/treesitter.lua new file mode 100644 index 0000000..da58412 --- /dev/null +++ b/config/nvim/lua/treesitter.lua @@ -0,0 +1,15 @@ +require("nvim-treesitter.configs").setup({ + highlight = { + enable = true + }, + rainbow = { + enable = true, + extended_mode = true + }, + autotag = { + enable = true + }, + context_commentstring = { + enable = true + } +}) diff --git a/config/nvim/plugin/packer_compiled.lua b/config/nvim/plugin/packer_compiled.lua new file mode 100644 index 0000000..7b0b688 --- /dev/null +++ b/config/nvim/plugin/packer_compiled.lua @@ -0,0 +1,146 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + + local time + local profile_info + local should_profile = false + if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end + else + time = function(chunk, start) end + end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + + _G._packer = _G._packer or {} + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/daniil/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/home/daniil/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/home/daniil/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/home/daniil/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/daniil/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s)) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + ["ayu-vim"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/ayu-vim", + url = "https://github.com/ayu-theme/ayu-vim" + }, + ["nvim-tree.lua"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/nvim-tree.lua", + url = "https://github.com/kyazdani42/nvim-tree.lua" + }, + ["nvim-treesitter"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/nvim-treesitter", + url = "https://github.com/nvim-treesitter/nvim-treesitter" + }, + ["nvim-ts-autotag"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/nvim-ts-autotag", + url = "https://github.com/windwp/nvim-ts-autotag" + }, + ["nvim-ts-context-commentstring"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/nvim-ts-context-commentstring", + url = "https://github.com/JoosepAlviste/nvim-ts-context-commentstring" + }, + ["nvim-ts-rainbow"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/nvim-ts-rainbow", + url = "https://github.com/p00f/nvim-ts-rainbow" + }, + ["nvim-web-devicons"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/nvim-web-devicons", + url = "https://github.com/kyazdani42/nvim-web-devicons" + }, + ["packer.nvim"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/packer.nvim", + url = "https://github.com/wbthomason/packer.nvim" + }, + ["pears.nvim"] = { + config = { "\27LJ\2\n3\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\npears\frequire\0" }, + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/pears.nvim", + url = "https://github.com/steelsojka/pears.nvim" + }, + ["plenary.nvim"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/plenary.nvim", + url = "https://github.com/nvim-lua/plenary.nvim" + }, + ["telescope.nvim"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/telescope.nvim", + url = "https://github.com/nvim-telescope/telescope.nvim" + }, + ["vim-commentary"] = { + loaded = true, + path = "/home/daniil/.local/share/nvim/site/pack/packer/start/vim-commentary", + url = "https://github.com/tpope/vim-commentary" + } +} + +time([[Defining packer_plugins]], false) +-- Config for: pears.nvim +time([[Config for pears.nvim]], true) +try_loadstring("\27LJ\2\n3\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\npears\frequire\0", "config", "pears.nvim") +time([[Config for pears.nvim]], false) +if should_profile then save_profiles() end + +end) + +if not no_errors then + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end