diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..b771e51 --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,5 @@ +require "hmsy.plugins" +require "hmsy.cmp" +require "hmsy.lsp" +require "hmsy.keymaps" +require "hmsy.hmsy" diff --git a/nvim/lua/hmsy/cmp.lua b/nvim/lua/hmsy/cmp.lua new file mode 100644 index 0000000..9664265 --- /dev/null +++ b/nvim/lua/hmsy/cmp.lua @@ -0,0 +1,51 @@ +local luasnip = require("luasnip") +local cmp = require('cmp') + +local has_words_before = function() + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + +cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = { + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.abort(), + [''] = cmp.mapping.confirm({ select = true }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }, + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + }, { + { name = 'buffer' }, + }), + expreimental = { + ghost_text = true, + }, +} diff --git a/nvim/lua/hmsy/hmsy.lua b/nvim/lua/hmsy/hmsy.lua new file mode 100644 index 0000000..1b4e5e9 --- /dev/null +++ b/nvim/lua/hmsy/hmsy.lua @@ -0,0 +1,2 @@ +vim.cmd "set iskeyword+=-" +vim.opt.termguicolors = true diff --git a/nvim/lua/hmsy/keymaps.lua b/nvim/lua/hmsy/keymaps.lua new file mode 100644 index 0000000..e361e61 --- /dev/null +++ b/nvim/lua/hmsy/keymaps.lua @@ -0,0 +1,50 @@ +local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) +end + +require('gitsigns').setup{ + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + -- Navigation + map('n', ']c', function() + if vim.wo.diff then return ']c' end + vim.schedule(function() gs.next_hunk() end) + return '' + end, {expr=true}) + + map('n', '[c', function() + if vim.wo.diff then return '[c' end + vim.schedule(function() gs.prev_hunk() end) + return '' + end, {expr=true}) + + -- Actions + map({'n', 'v'}, 'hs', ':Gitsigns stage_hunk') + map({'n', 'v'}, 'hr', ':Gitsigns reset_hunk') + map('n', 'hS', gs.stage_buffer) + map('n', 'hu', gs.undo_stage_hunk) + map('n', 'hR', gs.reset_buffer) + map('n', 'hp', gs.preview_hunk) + map('n', 'hb', function() gs.blame_line{full=true} end) + map('n', 'tb', gs.toggle_current_line_blame) + map('n', 'hd', gs.diffthis) + map('n', 'hD', function() gs.diffthis('~') end) + map('n', 'td', gs.toggle_deleted) + + -- Text object + map({'o', 'x'}, 'ih', ':Gitsigns select_hunk') + end +} + +-- formatter +map('n', 'F', vim.lsp.buf.format, {}) + +-- telescope +local builtin = require('telescope.builtin') +vim.keymap.set('n', 'ff', builtin.find_files, {}) +vim.keymap.set('n', 'fg', builtin.live_grep, {}) +vim.keymap.set('n', 'fb', builtin.buffers, {}) +vim.keymap.set('n', 'fh', builtin.help_tags, {}) diff --git a/nvim/lua/hmsy/lsp/formatter.lua b/nvim/lua/hmsy/lsp/formatter.lua new file mode 100644 index 0000000..2c41a28 --- /dev/null +++ b/nvim/lua/hmsy/lsp/formatter.lua @@ -0,0 +1,8 @@ +local null_ls = require("null-ls") + +null_ls.setup({ + sources = { + null_ls.builtins.formatting.prettier, + null_ls.builtins.formatting.autopep8, + }, +}) diff --git a/nvim/lua/hmsy/lsp/init.lua b/nvim/lua/hmsy/lsp/init.lua new file mode 100644 index 0000000..03b3b85 --- /dev/null +++ b/nvim/lua/hmsy/lsp/init.lua @@ -0,0 +1,13 @@ +require("mason").setup() +require("mason-lspconfig").setup() + +require("mason-lspconfig").setup_handlers { + function(server_name) + require("lspconfig")[server_name].setup {} + end, + ["rust_analyzer"] = function () + require("rust-tools").setup {} + end +} + +require('hmsy.lsp.formatter') diff --git a/nvim/lua/hmsy/plugins.lua b/nvim/lua/hmsy/plugins.lua new file mode 100644 index 0000000..309285d --- /dev/null +++ b/nvim/lua/hmsy/plugins.lua @@ -0,0 +1,23 @@ +local packer = require('packer') +packer.startup(function(use) + use 'wbthomason/packer.nvim' + use 'lewis6991/gitsigns.nvim' + use 'preservim/nerdtree' + use 'vim-airline/vim-airline' + use 'vim-airline/vim-airline-themes' + use({ "L3MON4D3/LuaSnip", tag = "v.*" }) + use 'hrsh7th/nvim-cmp' + use 'hrsh7th/cmp-buffer' + use 'neovim/nvim-lspconfig' + use 'hrsh7th/cmp-nvim-lsp' + use "jose-elias-alvarez/null-ls.nvim" + use "nvim-lua/plenary.nvim" + use 'williamboman/mason.nvim' + use "williamboman/mason-lspconfig.nvim" + use { + 'nvim-telescope/telescope.nvim', tag = '0.1.0', + -- or , branch = '0.1.x', + requires = { { 'nvim-lua/plenary.nvim' } } + } + use "simrat39/rust-tools.nvim" +end)