From 31ebe341c3039855a790d557c145fffedefe0cb0 Mon Sep 17 00:00:00 2001 From: Shadow Cat Date: Tue, 2 Aug 2022 16:36:22 -0400 Subject: [PATCH] initial commit --- .gitignore | 1 + init.lua | 8 ++++++ lua/config/general.lua | 27 +++++++++++++++++++++ lua/config/mappings/cmp.lua | 10 ++++++++ lua/config/mappings/colemak.lua | 22 +++++++++++++++++ lua/config/mappings/general.lua | 28 +++++++++++++++++++++ lua/config/mappings/lsp.lua | 23 ++++++++++++++++++ lua/config/plugins/config.lua | 43 +++++++++++++++++++++++++++++++++ lua/config/plugins/init.lua | 4 +++ lua/config/plugins/lsps.lua | 35 +++++++++++++++++++++++++++ lua/config/plugins/plugins.lua | 38 +++++++++++++++++++++++++++++ lua/config/reload.lua | 20 +++++++++++++++ lua/config/theme.lua | 19 +++++++++++++++ 13 files changed, 278 insertions(+) create mode 100644 .gitignore create mode 100644 init.lua create mode 100644 lua/config/general.lua create mode 100644 lua/config/mappings/cmp.lua create mode 100644 lua/config/mappings/colemak.lua create mode 100644 lua/config/mappings/general.lua create mode 100644 lua/config/mappings/lsp.lua create mode 100644 lua/config/plugins/config.lua create mode 100644 lua/config/plugins/init.lua create mode 100644 lua/config/plugins/lsps.lua create mode 100644 lua/config/plugins/plugins.lua create mode 100644 lua/config/reload.lua create mode 100644 lua/config/theme.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8cb205e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +plugin diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..ecfdf1c --- /dev/null +++ b/init.lua @@ -0,0 +1,8 @@ +for _, name in ipairs({ + 'mappings/colemak', + 'reload', + 'general', + 'plugins', + 'mappings/general', + 'theme', +}) do require('config.' .. name) end diff --git a/lua/config/general.lua b/lua/config/general.lua new file mode 100644 index 0000000..bf49392 --- /dev/null +++ b/lua/config/general.lua @@ -0,0 +1,27 @@ +-- basic stuff +vim.o.number = true +vim.cmd('filetype plugin on') +vim.cmd('syntax on') +vim.o.cmdheight = 2 +vim.g.mapleader = ' ' + +-- line break (wrapping) settings +vim.o.linebreak = true +vim.o.breakindent = true +vim.o.showbreak = '\\ ' + +-- lines after end of file empty instead of ~ (fillchars) +vim.o.fcs = 'eob: ' + +-- tab +vim.o.expandtab = true +vim.o.softtabstop = 4 +vim.o.shiftwidth = 4 + +-- turn of gui colors if in tty +if os.getenv('TERM') ~= 'linux' then + vim.o.termguicolors = true +else + vim.o.termguicolors = false +end + diff --git a/lua/config/mappings/cmp.lua b/lua/config/mappings/cmp.lua new file mode 100644 index 0000000..db7b194 --- /dev/null +++ b/lua/config/mappings/cmp.lua @@ -0,0 +1,10 @@ +return function(cmp) + return 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 }), + [''] = cmp.mapping.select_next_item(), + }) +end diff --git a/lua/config/mappings/colemak.lua b/lua/config/mappings/colemak.lua new file mode 100644 index 0000000..0d6bf02 --- /dev/null +++ b/lua/config/mappings/colemak.lua @@ -0,0 +1,22 @@ +local map = function(from, to) + vim.keymap.set('n', from, to, { noremap = true, silent = true }) + vim.keymap.set('x', from, to, { noremap = true, silent = true }) +end + +local swap = function(a, b) + map(a, b) + map(b, a) +end + +swap('n', 'h') +swap('e', 'j') +swap('i', 'k') +swap('o', 'l') + +swap('n', 'h') +swap('e', 'j') +swap('i', 'k') +swap('o', 'l') + +swap('N', 'H') +swap('O', 'L') diff --git a/lua/config/mappings/general.lua b/lua/config/mappings/general.lua new file mode 100644 index 0000000..5e33ecd --- /dev/null +++ b/lua/config/mappings/general.lua @@ -0,0 +1,28 @@ +local opts = { noremap = true, silent = true } + +local map = vim.keymap.set +local nmap = function(from, to) map('n', from, to, opts) end +local cmd = function(content) return '' .. content .. '' end + +-- terminal +map('t', '', '', opts) +nmap('tm', ':belowright 7sp:termA') + +-- off search highlight when escape is pressed +nmap('', ':noh') + +-- telescope +nmap('ff', cmd('Telescope find_files')) +nmap('fg', cmd('Telescope live_grep')) +nmap('fb', cmd('Telescope buffers')) +nmap('fh', cmd('Telescope help_tags')) + +-- explorer +nmap('e', cmd('Neotree toggle')) + +-- lsp (universal) +nmap('E', vim.diagnostic.open_float) +nmap('[d', vim.diagnostic.goto_prev) +nmap(']d', vim.diagnostic.goto_next) +nmap('q', vim.diagnostic.setloclist) + diff --git a/lua/config/mappings/lsp.lua b/lua/config/mappings/lsp.lua new file mode 100644 index 0000000..6915590 --- /dev/null +++ b/lua/config/mappings/lsp.lua @@ -0,0 +1,23 @@ +return function(bufnr) + local map = function(from, to) + vim.keymap.set('n', from, to, { noremap = true, silent = true, buffer = bufnr }) + end + + map('gd', vim.lsp.buf.definition) + map('gr', vim.lsp.buf.references) + map('gi', vim.lsp.buf.implementation) + map('gD', vim.lsp.buf.declaration) + + map('K', vim.lsp.buf.hover) + map('', vim.lsp.buf.signature_help) + + map('wa', vim.lsp.buf.add_workspace_folder) + map('wr', vim.lsp.buf.remove_workspace_folder) + map('wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end) + map('D', vim.lsp.buf.type_definition) + map('rn', vim.lsp.buf.rename) + map('ca', vim.lsp.buf.code_action) + map('fm', vim.lsp.buf.formatting) +end diff --git a/lua/config/plugins/config.lua b/lua/config/plugins/config.lua new file mode 100644 index 0000000..284cff3 --- /dev/null +++ b/lua/config/plugins/config.lua @@ -0,0 +1,43 @@ +require 'telescope'.load_extension('ui-select') + +vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) +require 'neo-tree'.setup { + filesystem = { + filtered_items = { + visible = true, + } + }, + window = { + width = 30, + }, +} + +require 'nvim-treesitter.configs'.setup { + highlight = { enable = true } +} + +require 'lualine'.setup() + +local cmp = require 'cmp' +cmp.setup({ + snippet = { + expand = function(args) + require('luasnip').lsp_expand(args.body) + end + }, + mapping = require 'config.mappings.cmp' (cmp), + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'path' }, + }), +}) + +require 'nvim-autopairs'.setup {} + +if vim.o.termguicolors then + require 'colorizer'.setup() +end + +require('gitsigns').setup() + diff --git a/lua/config/plugins/init.lua b/lua/config/plugins/init.lua new file mode 100644 index 0000000..16ff752 --- /dev/null +++ b/lua/config/plugins/init.lua @@ -0,0 +1,4 @@ +require 'config.plugins.plugins' +require 'config.plugins.config' +require 'config.plugins.lsps' + diff --git a/lua/config/plugins/lsps.lua b/lua/config/plugins/lsps.lua new file mode 100644 index 0000000..e074847 --- /dev/null +++ b/lua/config/plugins/lsps.lua @@ -0,0 +1,35 @@ +local on_attach = function(_, bufnr) + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + vim.o.signcolumn = 'yes' + require 'config.mappings.lsp' (bufnr) +end + +local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()) + +require 'lspconfig'.sumneko_lua.setup { + on_attach = on_attach, + capabilities = capabilities, + settings = { + Lua = { + diagnostics = { + globals = { 'vim' }, + }, + }, + }, +} + +require 'rust-tools'.setup { + server = { + on_attach = on_attach, + capabilities = capabilities, + } +} + +vim.g.markdown_fenced_languages = { + "ts=typescript" +} +require'lspconfig'.denols.setup{ + on_attach = on_attach, + capabilities = capabilities, +} + diff --git a/lua/config/plugins/plugins.lua b/lua/config/plugins/plugins.lua new file mode 100644 index 0000000..01f2bb1 --- /dev/null +++ b/lua/config/plugins/plugins.lua @@ -0,0 +1,38 @@ +local packer = require('packer') +packer.startup(function(use) + use 'wbthomason/packer.nvim' + -- files + use 'nvim-lua/plenary.nvim' + use { 'nvim-telescope/telescope.nvim', tag = '0.1.0' } + use { + 'nvim-telescope/telescope-fzf-native.nvim', + run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' + } + use 'nvim-telescope/telescope-ui-select.nvim' + use { 'nvim-neo-tree/neo-tree.nvim', branch = "v2.x", } + use 'MunifTanjim/nui.nvim' + -- syntax highlighting + use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' } + -- autocomplete / snippits + use 'hrsh7th/cmp-nvim-lsp' + use 'hrsh7th/cmp-buffer' + use 'hrsh7th/cmp-path' + use 'hrsh7th/cmp-cmdline' + use 'hrsh7th/nvim-cmp' + use 'L3MON4D3/LuaSnip' + use 'saadparwaiz1/cmp_luasnip' + -- auto pairs + use 'windwp/nvim-autopairs' + -- lsp + use 'neovim/nvim-lspconfig' + use 'simrat39/rust-tools.nvim' + use 'mfussenegger/nvim-dap' + use 'nvim-lua/completion-nvim' + use 'tjdevries/nlua.nvim' + -- visual + use 'kyazdani42/nvim-web-devicons' + use 'navarasu/onedark.nvim' + use 'norcalli/nvim-colorizer.lua' + use 'nvim-lualine/lualine.nvim' + use 'lewis6991/gitsigns.nvim' +end) diff --git a/lua/config/reload.lua b/lua/config/reload.lua new file mode 100644 index 0000000..428a18d --- /dev/null +++ b/lua/config/reload.lua @@ -0,0 +1,20 @@ +local group = vim.api.nvim_create_augroup("reload", {}) + +local post_write = function(path, cmd) + vim.api.nvim_create_autocmd("BufWritePost", { + group = group, + pattern = "**/lua/bryan/" .. path, + command = cmd, + }) +end + +for _, path in ipairs({ + "general.lua", + "theme.lua", + "mappings/*.lua", + "neovide.lua", +}) do post_write(path, "source ") end + +-- allows you to install and clean plugins after writing to the file +post_write("plugins/plugins.lua", "source | PackerCompile") + diff --git a/lua/config/theme.lua b/lua/config/theme.lua new file mode 100644 index 0000000..87d5869 --- /dev/null +++ b/lua/config/theme.lua @@ -0,0 +1,19 @@ +-- color scheme +vim.g.onedark_config = { style = 'darker' } +vim.cmd('colorscheme onedark') + +-- highlight extra white space with red +vim.api.nvim_set_hl(0, 'TrailingWhitespace', { ctermbg = 'red', bg = '#ff5555' }) +vim.cmd([[match TrailingWhitespace /\s\+$/]]) + +-- diagnostics +local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " } +for type, icon in pairs(signs) do + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl }) +end + +vim.diagnostic.config({ + virtual_text = { prefix = '●' }; +}) +