From 3fb059c58ce754c1c1e2cd6db6a4e994911230ba Mon Sep 17 00:00:00 2001 From: Cody Hiar Date: Mon, 6 Sep 2021 13:18:27 -0600 Subject: switch to using lua configuration --- init.lua | 374 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 374 insertions(+) create mode 100644 init.lua (limited to 'init.lua') diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..374aecc --- /dev/null +++ b/init.lua @@ -0,0 +1,374 @@ +--[[ +How to install + +1. Run `PackerSync` +2. Run TSInstall for treesitter grammar +3. LspInfo to check if the language servers are working + +Todo + +https://dev.to/voyeg3r/writing-useful-lua-functions-to-my-neovim-14ki +function to remove whitespace and preserve spot on save +]]-- + +-- Bootstrap packer if not installed +local fn = vim.fn +local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' +if fn.empty(fn.glob(install_path)) > 0 then + fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) + vim.cmd 'packadd packer.nvim' +end + + + +local o = vim.o +local g = vim.g +local cmd = vim.cmd +local map = vim.api.nvim_set_keymap + + +-- https://old.reddit.com/r/neovim/comments/lrz18i/how_to_change_colorscheme_in_lua_without_any/ +g.colors_name = "nord" +g.SuperTabDefaultCompletionType = "" + + +-- Set up spacebar as leader +-- https://icyphox.sh/blog/nvim-lua/ +map('n', '', '', {}) +vim.g.mapleader = ' ' + +-- Set spaces > tabs, 4 as default +o.expandtab = true +o.tabstop = 4 +o.shiftwidth = 0 +o.relativenumber = true + +o.wrap = false +o.history = 1000 +-- Wildmode show list, complete to first result +o.wildignore = "*/app/cache,*/vendor,*/env,*.pyc,*/venv,*/__pycache__,*/venv" +o.splitright = true +o.splitbelow = true +o.spelllang = "en_ca" + + +local highlights = { + "Search ctermfg=166", + "DiffAdd cterm=BOLD ctermfg=NONE ctermbg=22", + "DiffDelete cterm=BOLD ctermfg=NONE ctermbg=52", + "DiffChange cterm=BOLD ctermfg=NONE ctermbg=23", + "DiffText cterm=BOLD ctermfg=NONE ctermbg=23", + "Normal guibg=NONE ctermbg=NONE", + "Search ctermbg=None ctermfg=166", + "PrimaryBlock ctermfg=06 ctermbg=NONE", + "SecondaryBlock ctermfg=06 ctermbg=NONE", + "Blanks ctermfg=07 ctermbg=NONE", + "ColorColumn ctermbg=cyan", + "IndentBlanklineIndent1 ctermbg=234 ctermfg=NONE", + "IndentBlanklineIndent2 ctermbg=235 ctermfg=NONE", +} +for i, highlight in ipairs(highlights) do + cmd('au VimEnter * hi ' .. highlight) +end + +-- Along with the highlight definition for ColorColumn above, these options +-- will set colored marks at certain line lengths +cmd([[au BufEnter *.py let w:m1=matchadd('ColorColumn', '\%81v', 100)]]) +cmd([[au BufEnter *.py let w:m2=matchadd('Error', '\%121v', 100)]]) +cmd([[au BufLeave *.py call clearmatches()"]]) + + + +options = { noremap = true } + +map('n', '', ':noh', options) +map('i', 'jj', '', options) + +-- Visually select last copied text +map('n', 'gp', "`[v`]", options) +map('n', 'ps', 'PackerSync', options) +map('n', 'ff', 'Telescope find_files', options) +map('n', 'fb', 'Telescope buffers', options) +map('n', 'fj', 'Telescope jumplist', options) +map('n', 'f/', 'Telescope live_grep', options) +map('n', 'fa', 'Telescope grep_string', options) +map('n', 'fg', "lua require('telescope.builtin').git_status()", options) + +map('n', 'du', 'diffupdate', options) +map('n', 'dd', 'diffget', options) +map('n', 'df', 'diffput', options) +map('n', '_', '[c', options) +map('n', '=', ']c', options) +-- Visually select line without ending +map('n', 'v', '^v$h', options) + +-- Ledger Shortcuts +-- Copy the last entry +map('n', 'll', 'G{jV}y}p10l', options) +-- Copy the current entry to the bottom, copy date from last entry +map('n', 'lb', '{jV}yGp10l{{jvEy}jvEpl', options) +-- Copy the current entry to the next position +map('n', 'ln', '{jV}y}p10l', options) +-- Jump down from line to replace dollar ammount +map('n', 'ld', 'j^f$lC', options) +-- After searching pull entry to current position +map('n', 'ly', 'vapyp{{jvEy}jvEpl', options) + + +map('n', 'ep', 'ofrom pudb import set_trace; set_trace()', options) + + + + +map('n', 't', "tabnew", options) +map('n', '', 'fT', options) +map('n', '', 'vT', options) +map('n', '', 'vT', options) +map('n', 'ee', 'e!', options) +map('n', ' k', [[(v:count > 1 ? "m'" . v:count : '') . 'k']], options) +map('n', ' j', [[(v:count > 1 ? "m'" . v:count : '') . 'j']], options) + + +map('n', 'co', 'copen', options) +map('n', 'cc', 'cclose', options) + +map('n', 'ew', 'ArgWrap', options) + +map('n', 'gs', 'Git', options) + +map('n', 'm', 'Ranger', options) +map('n', 'n', 'RangerWorkingDirectory', options) + +map('', 's', 'HopChar2', options) +-- Status Line +-- https://icyphox.sh/blog/nvim-lua/ +local mode_map = { + ['n'] = 'normal', + ['no'] = 'n·operator pending', + ['v'] = 'visual', + ['V'] = 'v·line', + [''] = 'v·block', + ['s'] = 'select', + ['S'] = 's·line', + [''] = 's·block', + ['i'] = 'insert', + ['R'] = 'replace', + ['Rv'] = 'v·replace', + ['c'] = 'command', + ['cv'] = 'vim ex', + ['ce'] = 'ex', + ['r'] = 'prompt', + ['rm'] = 'more', + ['r?'] = 'confirm', + ['!'] = 'shell', + ['t'] = 'terminal' +} + +local function mode() + local m = vim.api.nvim_get_mode().mode + if mode_map[m] == nil then return m end + return '[' .. mode_map[m] .. '] ' +end + +local stl = { + '%#PrimaryBlock#', + mode(), + '%#SecondaryBlock#', + '%#Blanks#', + '%f', + '%m', + '%=', + '%#SecondaryBlock#', + '%l,%c ', + '%#PrimaryBlock#', + '%{&filetype}', +} + +o.statusline = table.concat(stl) + + +return require('packer').startup(function() + use 'wbthomason/packer.nvim' + use 'Thornycrackers-Forks/nord-vim' + use 'p00f/nvim-ts-rainbow' + use { + 'nvim-treesitter/nvim-treesitter', + run = ':TSUpdate', + config = function() + require('nvim-treesitter.configs').setup { + ensure_installed = { + "python", + "lua", + "nix", + "json", + "bash", + "html", + }, + highlight = { + enable = true, + }, + indent = { + enable = true, + }, + rainbow = { + enable = true, + -- I use termcolors but this errors if left blank + colors = { + "#000000", + "#000000", + "#000000", + "#000000", + }, + termcolors = { + 'darkblue', + 'magenta', + 'yellow', + 'darkcyan', + } + } + } + end, + } + use { + "neovim/nvim-lspconfig", + config = function() + nvim_lsp = require('lspconfig') + -- Use an on_attach function to only map the following keys + -- after the language server attaches to the current buffer + local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + -- Enable completion triggered by + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + + -- See `:help vim.lsp.*` for documentation on any of the below functions + buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) + buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) + buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) + buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) + buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) + + end + + -- Use a loop to conveniently call 'setup' on multiple servers and + -- map buffer local keybindings when the language server attaches + -- local servers = { 'pyls', 'rust_analyzer', 'tsserver' } + local servers = { 'pyright' } + for _, lsp in ipairs(servers) do + nvim_lsp[lsp].setup { + on_attach = on_attach, + flags = { + debounce_text_changes = 150, + }, + } + end + end, + } + use 'nvim-treesitter/playground' + use 'tpope/vim-commentary' + use 'tpope/vim-surround' + use 'tpope/vim-repeat' + use { + 'nvim-telescope/telescope.nvim', + requires = { {'nvim-lua/plenary.nvim'} }, + config = function() + actions = require("telescope.actions") + require("telescope").setup{ + defaults = { + mappings = { + i = { + [""] = actions.close, + [''] = false, + }, + }, + vimgrep_arguments = { + 'rg', + '--color=never', + '--no-heading', + '--with-filename', + '--line-number', + '--column', + '--smart-case' + }, + prompt_prefix = "> ", + selection_caret = "> ", + entry_prefix = " ", + initial_mode = "insert", + selection_strategy = "reset", + sorting_strategy = "descending", + layout_strategy = "horizontal", + layout_config = { + horizontal = { + mirror = false, + }, + vertical = { + mirror = false, + }, + }, + file_sorter = require'telescope.sorters'.get_fuzzy_file, + file_ignore_patterns = {}, + generic_sorter = require'telescope.sorters'.get_generic_fuzzy_sorter, + winblend = 0, + border = {}, + borderchars = { '─', '│', '─', '│', '╭', '╮', '╯', '╰' }, + color_devicons = true, + use_less = true, + path_display = {}, + set_env = { ['COLORTERM'] = 'truecolor' }, -- default = nil, + file_previewer = require'telescope.previewers'.vim_buffer_cat.new, + grep_previewer = require'telescope.previewers'.vim_buffer_vimgrep.new, + qflist_previewer = require'telescope.previewers'.vim_buffer_qflist.new, + + -- Developer configurations: Not meant for general override + buffer_previewer_maker = require'telescope.previewers'.buffer_previewer_maker + } + } + end, + } + use 'FooSoft/vim-argwrap' + use 'tpope/vim-fugitive' + use { + 'lukas-reineke/indent-blankline.nvim', + config = function() + require("indent_blankline").setup { + char = " ", + char_highlight_list = { + "IndentBlanklineIndent1", + "IndentBlanklineIndent2", + }, + show_trailing_blankline_indent = false, + } + end, + } + use { + 'francoiscabrol/ranger.vim', + -- bclose gets rid of "[Process exited 0]" annoyance + requires = { {'rbgrouleff/bclose.vim'} }, + } + use 'bkad/CamelCaseMotion' + use { + 'phaazon/hop.nvim', + as = 'hop', + config = function() + -- you can configure Hop the way you like here; see :h hop-config + require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' } + end + } + use 'ervandew/supertab' +end) -- cgit v1.2.3