From 811706c9fa510776af28a4d4be996fbcd146ad38 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Sun, 11 Jul 2021 15:06:37 -0700 Subject: [PATCH 01/18] initial changes to migrate nvim config to lua --- home.nix | 93 +++--- programs/default.nix | 2 +- programs/neovimlua/init.lua | 301 ++++++++++++++++++ .../neovimlua/settings/salargalaxyline.lua | 188 +++++++++++ 4 files changed, 540 insertions(+), 44 deletions(-) create mode 100644 programs/neovimlua/init.lua create mode 100644 programs/neovimlua/settings/salargalaxyline.lua diff --git a/home.nix b/home.nix index afdd876..d98eb31 100644 --- a/home.nix +++ b/home.nix @@ -161,56 +161,63 @@ end ''; + # Neovim Configuration + xdg.configFile."nvim/lua/salargalaxyline.lua".source = programs/neovimlua/settings/salargalaxyline.lua; + xdg.configFile."nvim/init.lua".source = programs/neovimlua/init.lua; + home.packages = [ - pkgs.awscli - pkgs.pgcli - pkgs.tig - pkgs.ripgrep - pkgs.hugo - pkgs.jansson - pkgs.universal-ctags - pkgs.httpie - pkgs.global - pkgs.fd - pkgs.curlFull - pkgs.wget - pkgs.readline - pkgs.tree - pkgs.exa - pkgs.openssl - pkgs.xz - pkgs.gitAndTools.diff-so-fancy - pkgs.ranger - pkgs.gnupg - pkgs.niv - pkgs.ffmpeg - pkgs.gradle - pkgs.maven - pkgs.procs - pkgs.shellcheck - pkgs.cabal-install - pkgs.hlint - pkgs.ghcid - pkgs.pandoc - pkgs.multimarkdown - pkgs.direnv - pkgs.nixfmt - pkgs.cmake + pkgs.adoptopenjdk-bin pkgs.any-nix-shell pkgs.asciinema - pkgs.ncdu - pkgs.prettyping - pkgs.rnix-lsp pkgs.aspell - pkgs.procs + pkgs.awscli + pkgs.cabal-install + pkgs.cmake + pkgs.coursier + pkgs.curlFull + pkgs.direnv pkgs.dust - pkgs.tokei - pkgs.tealdeer - pkgs.hyperfine + pkgs.exa + pkgs.fd + pkgs.ffmpeg + pkgs.ghcid + pkgs.gitAndTools.diff-so-fancy + pkgs.global + pkgs.gnupg + pkgs.gradle pkgs.graphviz + pkgs.hlint + pkgs.httpie + pkgs.hugo + pkgs.hyperfine + pkgs.jansson + pkgs.maven + pkgs.multimarkdown + pkgs.ncdu pkgs.neofetch - pkgs.adoptopenjdk-openj9-bin-16 - pkgs.vscodium + pkgs.neovim + pkgs.niv pkgs.nixFlakes + pkgs.nixfmt + pkgs.nodePackages.pyright + pkgs.openssl + pkgs.pandoc + pkgs.pgcli + pkgs.prettyping + pkgs.procs + pkgs.procs + pkgs.ranger + pkgs.readline + pkgs.ripgrep + pkgs.rnix-lsp + pkgs.shellcheck + pkgs.tealdeer + pkgs.tig + pkgs.tokei + pkgs.tree + pkgs.universal-ctags + pkgs.vscodium + pkgs.wget + pkgs.xz ]; } diff --git a/programs/default.nix b/programs/default.nix index e087349..47ef687 100644 --- a/programs/default.nix +++ b/programs/default.nix @@ -1,4 +1,4 @@ [ ./git - ./neovim +# ./neovim ] diff --git a/programs/neovimlua/init.lua b/programs/neovimlua/init.lua new file mode 100644 index 0000000..4a66933 --- /dev/null +++ b/programs/neovimlua/init.lua @@ -0,0 +1,301 @@ +local execute = vim.api.nvim_command +local fn = vim.fn + + +local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' + +local function load_plugins() + + local use = require('packer').use + require('packer').startup(function() + use 'wbthomason/packer.nvim' -- Package manager + use 'nvim-treesitter/nvim-treesitter' + use 'folke/which-key.nvim' + use 'tpope/vim-commentary' -- "gc" to comment visual regions/lines + use {'nvim-telescope/telescope.nvim', requires = {{'nvim-lua/popup.nvim'}, {'nvim-lua/plenary.nvim'}} } + use 'folke/tokyonight.nvim' -- Theme + use 'windwp/nvim-autopairs' -- Autopairs + use 'kyazdani42/nvim-tree.lua' -- File explorer + use { 'glepnir/galaxyline.nvim', config = function() require'salargalaxyline' end, requires = {'kyazdani42/nvim-web-devicons'} } + use 'lukas-reineke/indent-blankline.nvim' + use { 'lewis6991/gitsigns.nvim', requires = {'nvim-lua/plenary.nvim'} } + use { 'TimUntersberger/neogit', requires = 'nvim-lua/plenary.nvim' } + use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client + use { 'hrsh7th/nvim-compe', requires = { { 'L3MON4D3/LuaSnip' } } } -- Autocompletion plugin + use 'kevinhwang91/nvim-bqf' + use 'mfussenegger/nvim-dap' + use 'sheerun/vim-polyglot' + use 'scalameta/nvim-metals' + end) +end + +_G.load_config = function() + + require('nvim-autopairs').setup() + require("which-key").setup() + require("salargalaxyline") + + -- Treesitter + require("nvim-treesitter.configs").setup({ + playground = { enable = true }, + query_linter = { + enable = true, + use_virtual_text = true, + lint_events = { "BufWrite", "CursorHold" }, + }, + ensure_installed = "maintained", + highlight = { enable = true }, + }) + + -- neogit + require('neogit').setup({ + integrations = { + diffview = false + } + }) + + --Incremental live completion + vim.o.inccommand = "nosplit" + + --Set highlight on search + vim.o.hlsearch = false + vim.o.incsearch = true + + --Make line numbers default + vim.wo.number = true + + --Do not save when switching buffers + vim.o.hidden = true + + --Enable mouse mode + vim.o.mouse = "a" + + -- clipboard + vim.o.clipboard = 'unnamedplus' + + --Enable break indent + vim.o.breakindent = true + + --Save undo history + vim.cmd[[set undofile]] + + --Case insensitive searching UNLESS /C or capital in search + vim.o.ignorecase = true + vim.o.smartcase = true + + --Decrease update time + vim.o.updatetime = 250 + vim.wo.signcolumn="yes" + + --Set colorscheme (order is important here) + vim.g.tokyonight_style = "night" + vim.g.tokyonight_italic_functions = true + vim.o.termguicolors = true + vim.cmd[[colorscheme tokyonight]] + + + --Remap space as leader key + vim.api.nvim_set_keymap('', '', '', { noremap = true, silent=true}) + vim.g.mapleader = " " + vim.g.maplocalleader = " " + + --Remap for dealing with word wrap + vim.api.nvim_set_keymap('n', 'k', "v:count == 0 ? 'gk' : 'k'", { noremap=true, expr = true, silent = true}) + vim.api.nvim_set_keymap('n', 'j', "v:count == 0 ? 'gj' : 'j'", {noremap= true, expr = true, silent = true}) + + --Remap escape to leave terminal mode + vim.api.nvim_set_keymap('t', '', [[]], {noremap = true}) + + --Add map to enter paste mode + vim.o.pastetoggle="" + + --Map blankline + vim.g.indent_blankline_char = "┊" + vim.g.indent_blankline_filetype_exclude = { 'help', 'packer' } + vim.g.indent_blankline_buftype_exclude = { 'terminal', 'nofile'} + vim.g.indent_blankline_char_highlight = 'LineNr' + + -- Toggle to disable mouse mode and indentlines for easier paste + ToggleMouse = function() + if vim.o.mouse == 'a' then + vim.cmd[[IndentBlanklineDisable]] + vim.wo.signcolumn='no' + vim.o.mouse = 'v' + vim.wo.number = false + print("Mouse disabled") + else + vim.cmd[[IndentBlanklineEnable]] + vim.wo.signcolumn='yes' + vim.o.mouse = 'a' + vim.wo.number = true + print("Mouse enabled") + end + end + + vim.api.nvim_set_keymap('n', '', 'lua ToggleMouse()', { noremap = true }) + + -- Telescope + require('telescope').setup { + defaults = { + mappings = { + i = { + [""] = false, + [""] = false, + }, + }, + generic_sorter = require'telescope.sorters'.get_fzy_sorter, + file_sorter = require'telescope.sorters'.get_fzy_sorter, + } + } + --Add leader shortcuts + vim.api.nvim_set_keymap('n', 'f', [[lua require('telescope.builtin').find_files()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', '', [[lua require('telescope.builtin').buffers()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'l', [[lua require('telescope.builtin').current_buffer_fuzzy_find()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 't', [[lua require('telescope.builtin').tags()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', '?', [[lua require('telescope.builtin').oldfiles()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'sd', [[lua require('telescope.builtin').grep_string()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'sp', [[lua require('telescope.builtin').live_grep()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'o', [[lua require('telescope.builtin').tags{ only_current_buffer = true }]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'gc', [[lua require('telescope.builtin').git_commits()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'gb', [[lua require('telescope.builtin').git_branches()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'gs', [[lua require('telescope.builtin').git_status()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'gp', [[lua require('telescope.builtin').git_bcommits()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'm', [[lua require('nvim-tree').toggle()]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'ng', [[lua require('neogit').open({ kind = "split" })]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'nu', ':PackerUpdate', { noremap = true, silent = true }) + + -- Change preview window location + vim.g.splitbelow = true + + -- Highlight on yank + vim.api.nvim_exec([[ + augroup YankHighlight + autocmd! + autocmd TextYankPost * silent! lua vim.highlight.on_yank() + augroup end + ]], false) + + -- Y yank until the end of line + vim.api.nvim_set_keymap('n', 'Y', 'y$', { noremap = true}) + -- + -- LSP settings + local nvim_lsp = require('lspconfig') + local on_attach = function(_client, bufnr) + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + local opts = { noremap=true, silent=true } + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gm', 'lua vim.lsp.buf.implementation()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + end + + -- Enable the following language servers + local servers = { 'jdtls', 'pyright', 'rnix','sourcekit', 'sqlls' } + for _, lsp in ipairs(servers) do + nvim_lsp[lsp].setup { on_attach = on_attach } + end + + -- metals + vim.opt_global.shortmess:remove("F"):append("c") + metals_config = require("metals").bare_config + metals_config.init_options.statusBarProvider = "on" + vim.cmd [[augroup lsp]] + vim.cmd [[au!]] + vim.cmd [[au FileType scala,sbt lua require("metals").initialize_or_attach(metals_config)]] + vim.cmd [[augroup end]] + + -- Map :Format to vim.lsp.buf.formatting() + vim.cmd([[ command! Format execute 'lua vim.lsp.buf.formatting()' ]]) + + -- Set completeopt to have a better completion experience + vim.o.completeopt="menuone,noinsert" + + -- Compe setup + require'compe'.setup { + enabled = true; + autocomplete = true; + debug = false; + min_length = 1; + preselect = 'enable'; + throttle_time = 80; + source_timeout = 200; + incomplete_delay = 400; + max_abbr_width = 100; + max_kind_width = 100; + max_menu_width = 100; + documentation = true; + + source = { + path = true; + nvim_lsp = { + priority = 1000, + filetypes = { "scala", "sbt", "java" }, + }, + nvim_lua = true, + buffer = true, + luasnip = true, + }; + } + + local t = function(str) + return vim.api.nvim_replace_termcodes(str, true, true, true) + end + + local check_back_space = function() + local col = vim.fn.col('.') - 1 + if col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then + return true + else + return false + end + end + + -- Use (s-)tab to: + --- move to prev/next item in completion menuone + --- jump to prev/next snippet's placeholder + _G.tab_complete = function() + if vim.fn.pumvisible() == 1 then + return t "" + elseif check_back_space() then + return t "" + else + return vim.fn['compe#complete']() + end + end + _G.s_tab_complete = function() + if vim.fn.pumvisible() == 1 then + return t "" + else + return t "" + end + end + + vim.api.nvim_set_keymap("i", "", "v:lua.tab_complete()", {expr = true}) + vim.api.nvim_set_keymap("s", "", "v:lua.tab_complete()", {expr = true}) + vim.api.nvim_set_keymap("i", "", "v:lua.s_tab_complete()", {expr = true}) + vim.api.nvim_set_keymap("s", "", "v:lua.s_tab_complete()", {expr = true}) + +end + +if fn.isdirectory(install_path) == 0 then + fn.system({'git', 'clone', 'https://github.com/wbthomason/packer.nvim', install_path}) + load_plugins() + require('packer').sync() + vim.cmd 'autocmd User PackerComplete ++once lua load_config()' +else + load_plugins() + _G.load_config() +end diff --git a/programs/neovimlua/settings/salargalaxyline.lua b/programs/neovimlua/settings/salargalaxyline.lua new file mode 100644 index 0000000..53826b4 --- /dev/null +++ b/programs/neovimlua/settings/salargalaxyline.lua @@ -0,0 +1,188 @@ +local gl = require('galaxyline') +local gls = gl.section +gl.short_line_list = {'LuaTree','vista','dbui'} + +local colors = { + bg = '#282c34', + yellow = '#fabd2f', + cyan = '#008080', + darkblue = '#081633', + green = '#afd700', + orange = '#FF8800', + purple = '#5d4d7a', + magenta = '#d16d9e', + grey = '#c0c0c0', + blue = '#0087d7', + red = '#ec5f67' +} + +local buffer_not_empty = function() + if vim.fn.empty(vim.fn.expand('%:t')) ~= 1 then + return true + end + return false +end + +gls.left[1] = { + FirstElement = { + provider = function() return '▋' end, + highlight = {colors.blue,colors.yellow} + }, +} +gls.left[2] = { + ViMode = { + provider = function() + local alias = {n = 'NORMAL',i = 'INSERT',c= 'COMMAND',v= 'VISUAL',V= 'VISUAL LINE', [''] = 'VISUAL BLOCK'} + return alias[vim.fn.mode()] + end, + separator = '', + separator_highlight = {colors.purple,function() + if not buffer_not_empty() then + return colors.purple + end + return colors.darkblue + end}, + highlight = {colors.darkblue,colors.purple,'bold'}, + }, +} +gls.left[3] ={ + FileIcon = { + provider = 'FileIcon', + condition = buffer_not_empty, + highlight = {require('galaxyline.provider_fileinfo').get_file_icon_color,colors.darkblue}, + }, +} +gls.left[4] = { + FileName = { + provider = {'FileName','FileSize'}, + condition = buffer_not_empty, + separator = '', + separator_highlight = {colors.purple,colors.darkblue}, + highlight = {colors.magenta,colors.darkblue} + } +} + +gls.left[5] = { + GitIcon = { + provider = function() return '  ' end, + condition = buffer_not_empty, + highlight = {colors.orange,colors.purple}, + } +} +gls.left[6] = { + GitBranch = { + provider = 'GitBranch', + condition = buffer_not_empty, + highlight = {colors.grey,colors.purple}, + } +} + +local checkwidth = function() + local squeeze_width = vim.fn.winwidth(0) / 2 + if squeeze_width > 40 then + return true + end + return false +end + +gls.left[7] = { + DiffAdd = { + provider = 'DiffAdd', + condition = checkwidth, + icon = ' ', + highlight = {colors.green,colors.purple}, + } +} +gls.left[8] = { + DiffModified = { + provider = 'DiffModified', + condition = checkwidth, + icon = ' ', + highlight = {colors.orange,colors.purple}, + } +} +gls.left[9] = { + DiffRemove = { + provider = 'DiffRemove', + condition = checkwidth, + icon = ' ', + highlight = {colors.red,colors.purple}, + } +} +gls.left[10] = { + LeftEnd = { + provider = function() return '' end, + separator = '', + separator_highlight = {colors.purple,colors.bg}, + highlight = {colors.purple,colors.purple} + } +} +gls.left[11] = { + DiagnosticError = { + provider = 'DiagnosticError', + icon = '  ', + highlight = {colors.red,colors.bg} + } +} +gls.left[12] = { + Space = { + provider = function () return ' ' end + } +} +gls.left[13] = { + DiagnosticWarn = { + provider = 'DiagnosticWarn', + icon = '  ', + highlight = {colors.blue,colors.bg}, + } +} +gls.right[1]= { + FileFormat = { + provider = 'FileFormat', + separator = '', + separator_highlight = {colors.bg,colors.purple}, + highlight = {colors.grey,colors.purple}, + } +} +gls.right[2] = { + LineInfo = { + provider = 'LineColumn', + separator = ' | ', + separator_highlight = {colors.darkblue,colors.purple}, + highlight = {colors.grey,colors.purple}, + }, +} +gls.right[3] = { + PerCent = { + provider = 'LinePercent', + separator = '', + separator_highlight = {colors.darkblue,colors.purple}, + highlight = {colors.grey,colors.darkblue}, + } +} +gls.right[4] = { + ScrollBar = { + provider = 'ScrollBar', + highlight = {colors.yellow,colors.purple}, + } +} + +gls.short_line_left[1] = { + BufferType = { + provider = 'FileTypeName', + separator = '', + separator_highlight = {colors.purple,colors.bg}, + highlight = {colors.grey,colors.purple} + } +} + + +gls.short_line_right[1] = { + BufferIcon = { + provider= 'BufferIcon', + separator = '', + separator_highlight = {colors.purple,colors.bg}, + highlight = {colors.grey,colors.purple} + } +} + From 49c5fb4a8d4366c3c944cd38182602b6a45cf134 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Sun, 11 Jul 2021 15:25:20 -0700 Subject: [PATCH 02/18] Remove old nvim/vim settings --- home.nix | 4 +- programs/neovim/coc-settings.nix | 8 - programs/neovim/coc.vim | 138 ---------------- programs/neovim/config.vim | 151 ------------------ programs/neovim/custom-plugins.nix | 12 -- programs/neovim/default.nix | 58 ------- programs/{neovimlua => neovim}/init.lua | 6 +- .../settings/salargalaxyline.lua | 0 8 files changed, 5 insertions(+), 372 deletions(-) delete mode 100644 programs/neovim/coc-settings.nix delete mode 100644 programs/neovim/coc.vim delete mode 100644 programs/neovim/config.vim delete mode 100644 programs/neovim/custom-plugins.nix delete mode 100644 programs/neovim/default.nix rename programs/{neovimlua => neovim}/init.lua (97%) rename programs/{neovimlua => neovim}/settings/salargalaxyline.lua (100%) diff --git a/home.nix b/home.nix index d98eb31..4fa96d0 100644 --- a/home.nix +++ b/home.nix @@ -162,8 +162,8 @@ ''; # Neovim Configuration - xdg.configFile."nvim/lua/salargalaxyline.lua".source = programs/neovimlua/settings/salargalaxyline.lua; - xdg.configFile."nvim/init.lua".source = programs/neovimlua/init.lua; + xdg.configFile."nvim/lua/salargalaxyline.lua".source = programs/neovim/settings/salargalaxyline.lua; + xdg.configFile."nvim/init.lua".source = programs/neovim/init.lua; home.packages = [ pkgs.adoptopenjdk-bin diff --git a/programs/neovim/coc-settings.nix b/programs/neovim/coc-settings.nix deleted file mode 100644 index 358d3cf..0000000 --- a/programs/neovim/coc-settings.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - "languageserver" = { - "nix" = { - "command" = "rnix-lsp"; - "filetypes" = [ "nix" ]; - }; - }; -} diff --git a/programs/neovim/coc.vim b/programs/neovim/coc.vim deleted file mode 100644 index 1428def..0000000 --- a/programs/neovim/coc.vim +++ /dev/null @@ -1,138 +0,0 @@ -" START Configuration for coc.nvim -" -------------------------------- -" Better display for messages -set cmdheight=2 - -" You will have bad experience for diagnostic messages when it's default 4000. -set updatetime=300 - -" don't give |ins-completion-menu| messages. -set shortmess+=c - -" always show signcolumns -set signcolumn=yes - -" Use tab for trigger completion with characters ahead and navigate. -" Use command ':verbose imap ' to make sure tab is not mapped by other plugin. -inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() -inoremap pumvisible() ? "\" : "\" - -function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' -endfunction - -" Use to trigger completion. -inoremap coc#refresh() - -" Use to confirm completion, `u` means break undo chain at current position. -" Coc only does snippet and additional edit on confirm. -inoremap pumvisible() ? "\" : "\u\" -" Or use `complete_info` if your vim support it, like: -" inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" - -" Use `[g` and `]g` to navigate diagnostics -nmap [g (coc-diagnostic-prev) -nmap ]g (coc-diagnostic-next) - -" Remap keys for gotos -nmap gd (coc-definition) -nmap gy (coc-type-definition) -nmap gi (coc-implementation) -nmap gr (coc-references) - -" Use K to show documentation in preview window -nnoremap K :call show_documentation() - -function! s:show_documentation() - if (index(['vim','help'], &filetype) >= 0) - execute 'h '.expand('') - else - call CocAction('doHover') - endif -endfunction - -" Highlight symbol under cursor on CursorHold -autocmd CursorHold * silent call CocActionAsync('highlight') - -" Remap for rename current word -nmap rn (coc-rename) - -" Remap for format selected region -xmap l (coc-format-selected) -nmap l (coc-format-selected) - -augroup mygroup - autocmd! - " Setup formatexpr specified filetype(s). - autocmd FileType typescript,json,scala setl formatexpr=CocAction('formatSelected') - " Update signature help on jump placeholder - autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') -augroup end - -" Remap for do codeAction of selected region, ex: `aap` for current paragraph -xmap a (coc-codeaction-selected) -nmap a (coc-codeaction-selected) - -" Remap for do codeAction of current line -nmap ac (coc-codeaction) -" Fix autofix problem of current line -nmap qf (coc-fix-current) - -" Create mappings for function text object, requires document symbols feature of languageserver. -xmap if (coc-funcobj-i) -xmap af (coc-funcobj-a) -omap if (coc-funcobj-i) -omap af (coc-funcobj-a) - -" Use for select selections ranges, needs server support, like: coc-tsserver, coc-python -nmap (coc-range-select) -xmap (coc-range-select) - -" Use `:Format` to format current buffer -command! -nargs=0 Format :call CocAction('format') - -" Use `:Fold` to fold current buffer -command! -nargs=? Fold :call CocAction('fold', ) - -" use `:OR` for organize import of current buffer -command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') - -" Using CocList -" Show all diagnostics -nnoremap a :CocList diagnostics -" Manage extensions -nnoremap e :CocList extensions -" Show commands -nnoremap c :CocList commands -" Find symbol of current document -nnoremap o :CocList outline -" Search workspace symbols -nnoremap s :CocList -I symbols -" Do default action for next item. -nnoremap j :CocNext -" Do default action for previous item. -nnoremap k :CocPrev -" Resume latest coc list -nnoremap p :CocListResume - -" Notify coc.nvim that has been pressed. -" Currently used for the formatOnType feature. -inoremap pumvisible() ? coc#_select_confirm() - \: "\u\\=coc#on_enter()\" - -" Toggle panel with Tree Views -nnoremap t :CocCommand metals.tvp -" Toggle Tree View 'metalsBuild' -nnoremap tb :CocCommand metals.tvp metalsBuild -" Toggle Tree View 'metalsCompile' -nnoremap tc :CocCommand metals.tvp metalsCompile -" Reveal current current class (trait or object) in Tree View 'metalsBuild' -nnoremap tf :CocCommand metals.revealInTreeView metalsBuild - -nmap ws (coc-metals-expand-decoration) - - diff --git a/programs/neovim/config.vim b/programs/neovim/config.vim deleted file mode 100644 index 884378d..0000000 --- a/programs/neovim/config.vim +++ /dev/null @@ -1,151 +0,0 @@ -set directory=$HOME/.vim/swapfiles/swap// -set undodir=~/.vim/swapfiles/undo// -set backupdir=~/.vim/swapfiles/backup// -" Make those folders automatically if they don't already exist. -if !isdirectory(expand(&undodir)) - call mkdir(expand(&undodir), "p") -endif -if !isdirectory(expand(&backupdir)) - call mkdir(expand(&backupdir), "p") -endif -if !isdirectory(expand(&directory)) - call mkdir(expand(&directory), "p") -endif -set t_Co=256 -set encoding=utf-8 -syntax on -set expandtab -set hidden -set showmatch -set colorcolumn=120 -set cursorcolumn -set cursorline -set cmdheight=2 -set smarttab -set linebreak -set hlsearch -set ignorecase -set incsearch -set guifont=SF\ Mono:h12 -set termguicolors -let g:clipboard = { - \ 'name': 'pbcopy', - \ 'copy': { - \ '+': 'pbcopy', - \ '*': 'pbcopy', - \ }, - \ 'paste': { - \ '+': 'pbpaste', - \ '*': 'pbpaste', - \ }, - \ 'cache_enabled': 0, - \ } -set clipboard=unnamed -let $NVIM_TUI_ENABLE_TRUE_COLOR=1 -let $NVIM_TUI_ENABLE_CURSOR_SHAPE=1 -let g:seoul256_background = 233 -let g:seoul256_srgb = 1 -colorscheme seoul256 -set background=dark -set number -let g:netrw_banner=0 " disable annoying banner -let g:netrw_browse_split=4 " open in prior window -let g:netrw_altv=1 " open splits to the right -let g:netrw_liststyle=3 " tree view -let g:netrw_list_hide=netrw_gitignore#Hide() -let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' -let g:netrw_list_hide= '.*\.pyc$' -au BufRead,BufNewFile *.sbt set filetype=scala -if executable("rg") - set grepprg=rg\ --vimgrep\ --no-heading - set grepformat=%f:%l:%c:%m,%f:%l:%m -endif -let g:ackprg='rg --vimgrep --no-heading' -set grepprg=rg\ --vimgrep -let g:rg_command = 'rg --vimgrep -S' -let mapleader = "\" -map! jj -" FZF -set rtp+=/Users/salar/.nix-profile/bin/fzf -imap (fzf-complete-line) -map b :Buffers -map f :Files -map g :GFiles -map y :Tags -autocmd! FileType fzf tnoremap q -nnoremap :FZF - -let g:rainbow_active = 1 -let g:rainbow_conf = { - \ 'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick'], - \ 'ctermfgs': ['lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'], - \ 'operators': '_,_', - \ 'parentheses': ['start=/(/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/{/ end=/}/ fold'], - \ 'separately': { - \ '*': {}, - \ 'tex': { - \ 'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/'], - \ }, - \ 'lisp': { - \ 'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick', 'darkorchid3'], - \ }, - \ 'vim': { - \ 'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/', 'start=/{/ end=/}/ fold', 'start=/(/ end=/)/ containedin=vimFuncBody', 'start=/\[/ end=/\]/ containedin=vimFuncBody', 'start=/{/ end=/}/ fold containedin=vimFuncBody'], - \ }, - \ 'html': { - \ 'parentheses': ['start=/\v\<((area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)[ >])@!\z([-_:a-zA-Z0-9]+)(\s+[-_:a-zA-Z0-9]+(\=("[^"]*"|'."'".'[^'."'".']*'."'".'|[^ '."'".'"><=`]*))?)*\>/ end=## fold'], - \ }, - \ 'css': 0, - \ } - \} - let g:lightline = { - \ 'colorscheme': 'seoul256', - \ 'active': { - \ 'left': [ [ 'mode', 'paste' ], - \ [ 'gitbranch', 'readonly', 'filename', 'modified' ] ] - \ }, - \ 'component_function': { - \ 'gitbranch': 'FugitiveHead' - \ }, - \ } - -" Nerdtree Configuration -let NERDTreeIgnore=['\.pyc$', '\~$', 'target'] "ignore files in NERDTree -let NERDTreeRespectWildIgnore=1 -let NERDTreeQuitOnOpen=1 -map m :NERDTreeToggle -" jump back to nerdtree -map n :NERDTree -" reveal in side bar -map e :NERDTreeFind -let NERDTreeShowHidden=1 -"nerdtree-git-plugin -let g:NERDTreeGitStatusIndicatorMapCustom= { - \ "Modified" : "✹", - \ "Staged" : "✚", - \ "Untracked" : "✭", - \ "Renamed" : "➜", - \ "Unmerged" : "═", - \ "Deleted" : "✖", - \ "Dirty" : "✗", - \ "Clean" : "✔︎", - \ "Unknown" : "?" - \ } - -" Switch to previous buffer mapped to tab -function SwitchBuffer() - b# -endfunction - -nmap :call SwitchBuffer() - -" split-term -let g:split_term_default_shell = "fish" -let g:split_term_vertical = 1 - -let g:polyglot_disabled = ['markdown'] - -" vimwiki -let g:vimwiki_list = [{'path': '~/Documents/Notes/', - \ 'syntax': 'markdown', 'ext': '.md'}] - diff --git a/programs/neovim/custom-plugins.nix b/programs/neovim/custom-plugins.nix deleted file mode 100644 index e2001ff..0000000 --- a/programs/neovim/custom-plugins.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ buildVimPlugin }: - -{ - asyncrun-vim = buildVimPlugin { - name = "asyncrun-vim"; - src = builtins.fetchTarball { - name = "AsyncRun-Vim-v2.7.5"; - url = "https://github.com/skywind3000/asyncrun.vim/archive/2.7.5.tar.gz"; - sha256 = "02fiqf4rcrxbcgvj02mpd78wkxsrnbi54aciwh9fv5mnz5ka249m"; - }; - }; -} diff --git a/programs/neovim/default.nix b/programs/neovim/default.nix deleted file mode 100644 index 8e074cf..0000000 --- a/programs/neovim/default.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ config, lib, pkgs, ... }: - -let - custom-plugins = pkgs.callPackage ./custom-plugins.nix { - inherit (pkgs.vimUtils) buildVimPlugin; - }; - - plugins = pkgs.vimPlugins // custom-plugins; - - overriddenPlugins = with pkgs; []; - - myVimPlugins = with plugins; [ - asyncrun-vim - ack-vim - coc-nvim - coc-java - coc-json - coc-metals - coc-pairs - coc-python - coc-tabnine - fzf-vim - git-messenger-vim - lightline-vim - nerdtree - nerdtree-git-plugin - rainbow - seoul256-vim - split-term-vim - vim-fugitive - vim-gitgutter - vim-polyglot - vimwiki - ] ++ overriddenPlugins; - - baseConfig = builtins.readFile ./config.vim; - cocConfig = builtins.readFile ./coc.vim; - cocSettings = builtins.toJSON (import ./coc-settings.nix); - vimConfig = baseConfig + cocConfig; - -in -{ - programs.neovim = { - enable = true; - extraConfig = vimConfig; - plugins = myVimPlugins; - viAlias = true; - vimAlias = true; - vimdiffAlias = true; - withNodeJs = true; # for coc.nvim - withPython3 = true; # for plugins - }; - - xdg.configFile = { - "nvim/coc-settings.json".text = cocSettings; - }; -} - diff --git a/programs/neovimlua/init.lua b/programs/neovim/init.lua similarity index 97% rename from programs/neovimlua/init.lua rename to programs/neovim/init.lua index 4a66933..35d0efa 100644 --- a/programs/neovimlua/init.lua +++ b/programs/neovim/init.lua @@ -16,12 +16,12 @@ local function load_plugins() use 'folke/tokyonight.nvim' -- Theme use 'windwp/nvim-autopairs' -- Autopairs use 'kyazdani42/nvim-tree.lua' -- File explorer - use { 'glepnir/galaxyline.nvim', config = function() require'salargalaxyline' end, requires = {'kyazdani42/nvim-web-devicons'} } + use { 'glepnir/galaxyline.nvim', config = function() require'salargalaxyline' end, requires = 'kyazdani42/nvim-web-devicons' } use 'lukas-reineke/indent-blankline.nvim' - use { 'lewis6991/gitsigns.nvim', requires = {'nvim-lua/plenary.nvim'} } + use { 'lewis6991/gitsigns.nvim', requires = 'nvim-lua/plenary.nvim' } use { 'TimUntersberger/neogit', requires = 'nvim-lua/plenary.nvim' } use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client - use { 'hrsh7th/nvim-compe', requires = { { 'L3MON4D3/LuaSnip' } } } -- Autocompletion plugin + use { 'hrsh7th/nvim-compe', requires = 'L3MON4D3/LuaSnip' } -- Autocompletion plugin use 'kevinhwang91/nvim-bqf' use 'mfussenegger/nvim-dap' use 'sheerun/vim-polyglot' diff --git a/programs/neovimlua/settings/salargalaxyline.lua b/programs/neovim/settings/salargalaxyline.lua similarity index 100% rename from programs/neovimlua/settings/salargalaxyline.lua rename to programs/neovim/settings/salargalaxyline.lua From 69c7fdda242dce71cde65df3ffe2b24652289e52 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Sun, 11 Jul 2021 22:50:49 -0700 Subject: [PATCH 03/18] add lua language server using overlays --- home.nix | 5 +++ .../sumneko-lua-language-server/default.nix | 38 +++++++++++++++++++ programs/neovim/init.lua | 37 ++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 overlays/sumneko-lua-language-server/default.nix diff --git a/home.nix b/home.nix index 4fa96d0..2c9a539 100644 --- a/home.nix +++ b/home.nix @@ -6,6 +6,10 @@ imports = (import ./programs); + nixpkgs.overlays = [ + (import ./overlays/sumneko-lua-language-server) + ]; + home = { username = "salar"; homeDirectory = "/Users/salar"; @@ -211,6 +215,7 @@ pkgs.ripgrep pkgs.rnix-lsp pkgs.shellcheck + pkgs.sumneko-lua-language-server pkgs.tealdeer pkgs.tig pkgs.tokei diff --git a/overlays/sumneko-lua-language-server/default.nix b/overlays/sumneko-lua-language-server/default.nix new file mode 100644 index 0000000..6efa0bf --- /dev/null +++ b/overlays/sumneko-lua-language-server/default.nix @@ -0,0 +1,38 @@ +self: super: { + sumneko-lua-language-server = super.sumneko-lua-language-server.overrideAttrs ( + o: rec { + version = "2.2.3"; + + src = builtins.fetchurl { + url = "https://github.com/sumneko/vscode-lua/releases/download/v${version}/lua-${version}.vsix"; + sha256 = "16rpi6p7rslpdfi37ndy5g9qmvh22qljfk9w15kdrr668hfwp7nm"; + }; + + unpackPhase = '' + ${super.pkgs.unzip}/bin/unzip $src + ''; + + platform = if super.stdenv.isDarwin then "macOS" else "Linux"; + + preBuild = ""; + postBuild = ""; + nativeBuildInputs = [ + super.makeWrapper + ]; + + installPhase = '' + mkdir -p $out + cp -r extension $out/extras + chmod a+x $out/extras/server/bin/$platform/lua-language-server + makeWrapper $out/extras/server/bin/$platform/lua-language-server \ + $out/bin/lua-language-server \ + --add-flags "-E -e LANG=en $out/extras/server/main.lua \ + --logpath='~/.cache/sumneko_lua/log' \ + --metapath='~/.cache/sumneko_lua/meta'" + ''; + + meta.platforms = super.lib.platforms.all; + } + ); +} + diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index 35d0efa..9e62ef8 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -33,6 +33,7 @@ _G.load_config = function() require('nvim-autopairs').setup() require("which-key").setup() + require('gitsigns').setup() require("salargalaxyline") -- Treesitter @@ -208,6 +209,42 @@ _G.load_config = function() nvim_lsp[lsp].setup { on_attach = on_attach } end + +-- lua language server +local sumneko_binary = vim.fn.getenv("HOME").."/.nix-profile/bin/lua-language-server" +local runtime_path = vim.split(package.path, ';') +table.insert(runtime_path, 'lua/?.lua') +table.insert(runtime_path, 'lua/?/init.lua') + +require('lspconfig').sumneko_lua.setup { + cmd = { sumneko_binary }, + on_attach = on_attach, + capabilities = capabilities, + settings = { + Lua = { + runtime = { + -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) + version = 'LuaJIT', + -- Setup your lua path + path = runtime_path, + }, + diagnostics = { + -- Get the language server to recognize the `vim` global + globals = { 'vim' }, + }, + workspace = { + -- Make the server aware of Neovim runtime files + library = vim.api.nvim_get_runtime_file('', true), + }, + -- Do not send telemetry data containing a randomized but unique identifier + telemetry = { + enable = false, + }, + }, + }, +} + + -- metals vim.opt_global.shortmess:remove("F"):append("c") metals_config = require("metals").bare_config From 3f3d67042c3845517f513cff049e3f1522bbccb8 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Sun, 11 Jul 2021 23:16:57 -0700 Subject: [PATCH 04/18] enable diffview for neogit --- programs/neovim/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index 9e62ef8..e7827c3 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -19,7 +19,7 @@ local function load_plugins() use { 'glepnir/galaxyline.nvim', config = function() require'salargalaxyline' end, requires = 'kyazdani42/nvim-web-devicons' } use 'lukas-reineke/indent-blankline.nvim' use { 'lewis6991/gitsigns.nvim', requires = 'nvim-lua/plenary.nvim' } - use { 'TimUntersberger/neogit', requires = 'nvim-lua/plenary.nvim' } + use { 'TimUntersberger/neogit', requires = {{'nvim-lua/plenary.nvim'}, {'sindrets/diffview.nvim'}} } use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client use { 'hrsh7th/nvim-compe', requires = 'L3MON4D3/LuaSnip' } -- Autocompletion plugin use 'kevinhwang91/nvim-bqf' @@ -51,7 +51,7 @@ _G.load_config = function() -- neogit require('neogit').setup({ integrations = { - diffview = false + diffview = true } }) From 8b96d874c97e80a1c7c28e38df344f45a557756b Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Wed, 14 Jul 2021 08:05:03 -0700 Subject: [PATCH 05/18] Corrections --- programs/neovim/init.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index e7827c3..ccc6f16 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -32,7 +32,7 @@ end _G.load_config = function() require('nvim-autopairs').setup() - require("which-key").setup() + require('which-key').setup() require('gitsigns').setup() require("salargalaxyline") @@ -209,9 +209,8 @@ _G.load_config = function() nvim_lsp[lsp].setup { on_attach = on_attach } end - -- lua language server -local sumneko_binary = vim.fn.getenv("HOME").."/.nix-profile/bin/lua-language-server" +local sumneko_binary = vim.fn.getenv("HOME").."/.nix-profile/bin/lua-language-server" local runtime_path = vim.split(package.path, ';') table.insert(runtime_path, 'lua/?.lua') table.insert(runtime_path, 'lua/?/init.lua') @@ -219,7 +218,6 @@ table.insert(runtime_path, 'lua/?/init.lua') require('lspconfig').sumneko_lua.setup { cmd = { sumneko_binary }, on_attach = on_attach, - capabilities = capabilities, settings = { Lua = { runtime = { From a5607a5b361db9ef7dd6d8216e306ef2c528bd5e Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Wed, 14 Jul 2021 08:43:08 -0700 Subject: [PATCH 06/18] add trouble and lsp signature plugins --- programs/neovim/init.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index ccc6f16..1426456 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -26,6 +26,8 @@ local function load_plugins() use 'mfussenegger/nvim-dap' use 'sheerun/vim-polyglot' use 'scalameta/nvim-metals' + use 'ray-x/lsp_signature.nvim' + use { 'folke/trouble.nvim', requires = 'kyazdani42/nvim-web-devicons' } end) end @@ -33,6 +35,7 @@ _G.load_config = function() require('nvim-autopairs').setup() require('which-key').setup() + require('trouble').setup() require('gitsigns').setup() require("salargalaxyline") @@ -182,6 +185,8 @@ _G.load_config = function() -- LSP settings local nvim_lsp = require('lspconfig') local on_attach = function(_client, bufnr) + require('lsp_signature').on_attach() + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') local opts = { noremap=true, silent=true } From 5e3f643d51b8835ddbe32119e9d86800840cfa6a Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Wed, 14 Jul 2021 22:46:35 -0700 Subject: [PATCH 07/18] Configure jdt.ls java lsp --- home.nix | 6 ++++++ programs/neovim/init.lua | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/home.nix b/home.nix index 2c9a539..f9b3628 100644 --- a/home.nix +++ b/home.nix @@ -111,6 +111,12 @@ set -xg JAVA_HOME /Users/salar/.nix-profile/bin + set -xg JDTLS_CONFIG /Users/salar/.config/nixpkgs/jdt-language-server/config_mac + + set -xg JAR /Users/salar/.config/nixpkgs/jdt-language-server/plugins/org.eclipse.equinox.launcher_1.6.200.v20210416-2027.jar + + set -xg WORKSPACE /Users/salar/Projects + set -xg NIX_PATH $HOME/.nix-defexpr/channels $NIX_PATH set -xg FZF_DEFAULT_OPTS "--preview='bat {} --color=always'" \n diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index 1426456..7309e11 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -209,7 +209,7 @@ _G.load_config = function() end -- Enable the following language servers - local servers = { 'jdtls', 'pyright', 'rnix','sourcekit', 'sqlls' } + local servers = { 'jdtls', 'pyright', 'rnix','sourcekit' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach } end From 74475c8793005ca65c42fc341c902a38921ec2c2 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Wed, 14 Jul 2021 22:49:03 -0700 Subject: [PATCH 08/18] Update path to jdt.ls --- home.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.nix b/home.nix index f9b3628..f46f743 100644 --- a/home.nix +++ b/home.nix @@ -111,9 +111,9 @@ set -xg JAVA_HOME /Users/salar/.nix-profile/bin - set -xg JDTLS_CONFIG /Users/salar/.config/nixpkgs/jdt-language-server/config_mac + set -xg JDTLS_CONFIG /Users/salar/.config/jdt-language-server/config_mac - set -xg JAR /Users/salar/.config/nixpkgs/jdt-language-server/plugins/org.eclipse.equinox.launcher_1.6.200.v20210416-2027.jar + set -xg JAR /Users/salar/.config/jdt-language-server/plugins/org.eclipse.equinox.launcher_1.6.200.v20210416-2027.jar set -xg WORKSPACE /Users/salar/Projects From bf88d45a5807b4f877c4449d1e63625166edf5f8 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Wed, 14 Jul 2021 23:28:30 -0700 Subject: [PATCH 09/18] Add config for treesitter extensions & setup playground --- programs/neovim/init.lua | 69 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index 7309e11..ef8f125 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -10,6 +10,7 @@ local function load_plugins() require('packer').startup(function() use 'wbthomason/packer.nvim' -- Package manager use 'nvim-treesitter/nvim-treesitter' + use 'nvim-treesitter/nvim-treesitter-textobjects' use 'folke/which-key.nvim' use 'tpope/vim-commentary' -- "gc" to comment visual regions/lines use {'nvim-telescope/telescope.nvim', requires = {{'nvim-lua/popup.nvim'}, {'nvim-lua/plenary.nvim'}} } @@ -28,6 +29,7 @@ local function load_plugins() use 'scalameta/nvim-metals' use 'ray-x/lsp_signature.nvim' use { 'folke/trouble.nvim', requires = 'kyazdani42/nvim-web-devicons' } + use 'nvim-treesitter/playground' end) end @@ -40,7 +42,7 @@ _G.load_config = function() require("salargalaxyline") -- Treesitter - require("nvim-treesitter.configs").setup({ + require('nvim-treesitter.configs').setup { playground = { enable = true }, query_linter = { enable = true, @@ -49,7 +51,70 @@ _G.load_config = function() }, ensure_installed = "maintained", highlight = { enable = true }, - }) + incremental_selection = { + enable = true, + keymaps = { + init_selection = 'gnn', + node_incremental = 'grn', + scope_incremental = 'grc', + node_decremental = 'grm', + }, + }, + indent = { + enable = true, + }, + textobjects = { + select = { + enable = true, + lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ['af'] = '@function.outer', + ['if'] = '@function.inner', + ['ac'] = '@class.outer', + ['ic'] = '@class.inner', + }, + }, + move = { + enable = true, + set_jumps = true, -- whether to set jumps in the jumplist + goto_next_start = { + [']m'] = '@function.outer', + [']]'] = '@class.outer', + }, + goto_next_end = { + [']M'] = '@function.outer', + [']['] = '@class.outer', + }, + goto_previous_start = { + ['[m'] = '@function.outer', + ['[['] = '@class.outer', + }, + goto_previous_end = { + ['[M'] = '@function.outer', + ['[]'] = '@class.outer', + }, + }, + }, + playground = { + enable = true, + disable = {}, + updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code + persist_queries = false, -- Whether the query persists across vim sessions + keybindings = { + toggle_query_editor = 'o', + toggle_hl_groups = 'i', + toggle_injected_languages = 't', + toggle_anonymous_nodes = 'a', + toggle_language_display = 'I', + focus_language = 'f', + unfocus_language = 'F', + update = 'R', + goto_node = '', + show_help = '?', + }, + } + } -- neogit require('neogit').setup({ From c1cd430caeb990886d2712d620f2fa4fa1b3c2f5 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Thu, 15 Jul 2021 07:48:18 -0700 Subject: [PATCH 10/18] replace vim-commentary with kommentary --- programs/neovim/init.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index ef8f125..52303da 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -12,7 +12,6 @@ local function load_plugins() use 'nvim-treesitter/nvim-treesitter' use 'nvim-treesitter/nvim-treesitter-textobjects' use 'folke/which-key.nvim' - use 'tpope/vim-commentary' -- "gc" to comment visual regions/lines use {'nvim-telescope/telescope.nvim', requires = {{'nvim-lua/popup.nvim'}, {'nvim-lua/plenary.nvim'}} } use 'folke/tokyonight.nvim' -- Theme use 'windwp/nvim-autopairs' -- Autopairs @@ -30,6 +29,7 @@ local function load_plugins() use 'ray-x/lsp_signature.nvim' use { 'folke/trouble.nvim', requires = 'kyazdani42/nvim-web-devicons' } use 'nvim-treesitter/playground' + use 'b3nj5m1n/kommentary' end) end @@ -40,10 +40,11 @@ _G.load_config = function() require('trouble').setup() require('gitsigns').setup() require("salargalaxyline") + require('kommentary.config').use_extended_mappings() + -- Treesitter require('nvim-treesitter.configs').setup { - playground = { enable = true }, query_linter = { enable = true, use_virtual_text = true, From c11d9351a68c802710120ba7d319ec7c1b385030 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Thu, 15 Jul 2021 08:19:22 -0700 Subject: [PATCH 11/18] Added stylua and reformated lua files --- .stylua.toml | 7 + home.nix | 1 + programs/neovim/init.lua | 280 ++++++++++--------- programs/neovim/settings/salargalaxyline.lua | 133 +++++---- 4 files changed, 224 insertions(+), 197 deletions(-) create mode 100644 .stylua.toml diff --git a/.stylua.toml b/.stylua.toml new file mode 100644 index 0000000..b315925 --- /dev/null +++ b/.stylua.toml @@ -0,0 +1,7 @@ +column_width = 160 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferSingle" +no_call_parentheses = true + diff --git a/home.nix b/home.nix index f46f743..74dcdda 100644 --- a/home.nix +++ b/home.nix @@ -221,6 +221,7 @@ pkgs.ripgrep pkgs.rnix-lsp pkgs.shellcheck + pkgs.stylua pkgs.sumneko-lua-language-server pkgs.tealdeer pkgs.tig diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index 52303da..49d8492 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -1,27 +1,31 @@ local execute = vim.api.nvim_command local fn = vim.fn - -local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' +local install_path = fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' local function load_plugins() - local use = require('packer').use require('packer').startup(function() - use 'wbthomason/packer.nvim' -- Package manager + use 'wbthomason/packer.nvim' -- Package manager use 'nvim-treesitter/nvim-treesitter' use 'nvim-treesitter/nvim-treesitter-textobjects' use 'folke/which-key.nvim' - use {'nvim-telescope/telescope.nvim', requires = {{'nvim-lua/popup.nvim'}, {'nvim-lua/plenary.nvim'}} } - use 'folke/tokyonight.nvim' -- Theme - use 'windwp/nvim-autopairs' -- Autopairs + use { 'nvim-telescope/telescope.nvim', requires = { { 'nvim-lua/popup.nvim' }, { 'nvim-lua/plenary.nvim' } } } + use 'folke/tokyonight.nvim' -- Theme + use 'windwp/nvim-autopairs' -- Autopairs use 'kyazdani42/nvim-tree.lua' -- File explorer - use { 'glepnir/galaxyline.nvim', config = function() require'salargalaxyline' end, requires = 'kyazdani42/nvim-web-devicons' } + use { + 'glepnir/galaxyline.nvim', + config = function() + require 'salargalaxyline' + end, + requires = 'kyazdani42/nvim-web-devicons', + } use 'lukas-reineke/indent-blankline.nvim' use { 'lewis6991/gitsigns.nvim', requires = 'nvim-lua/plenary.nvim' } - use { 'TimUntersberger/neogit', requires = {{'nvim-lua/plenary.nvim'}, {'sindrets/diffview.nvim'}} } - use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client - use { 'hrsh7th/nvim-compe', requires = 'L3MON4D3/LuaSnip' } -- Autocompletion plugin + use { 'TimUntersberger/neogit', requires = { { 'nvim-lua/plenary.nvim' }, { 'sindrets/diffview.nvim' } } } + use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client + use { 'hrsh7th/nvim-compe', requires = 'L3MON4D3/LuaSnip' } -- Autocompletion plugin use 'kevinhwang91/nvim-bqf' use 'mfussenegger/nvim-dap' use 'sheerun/vim-polyglot' @@ -30,27 +34,26 @@ local function load_plugins() use { 'folke/trouble.nvim', requires = 'kyazdani42/nvim-web-devicons' } use 'nvim-treesitter/playground' use 'b3nj5m1n/kommentary' + use 'ckipp01/stylua-nvim' end) end _G.load_config = function() - require('nvim-autopairs').setup() require('which-key').setup() require('trouble').setup() require('gitsigns').setup() - require("salargalaxyline") + require 'salargalaxyline' require('kommentary.config').use_extended_mappings() - -- Treesitter require('nvim-treesitter.configs').setup { query_linter = { enable = true, use_virtual_text = true, - lint_events = { "BufWrite", "CursorHold" }, + lint_events = { 'BufWrite', 'CursorHold' }, }, - ensure_installed = "maintained", + ensure_installed = 'maintained', highlight = { enable = true }, incremental_selection = { enable = true, @@ -114,18 +117,18 @@ _G.load_config = function() goto_node = '', show_help = '?', }, - } + }, } -- neogit - require('neogit').setup({ + require('neogit').setup { integrations = { - diffview = true - } - }) + diffview = true, + }, + } --Incremental live completion - vim.o.inccommand = "nosplit" + vim.o.inccommand = 'nosplit' --Set highlight on search vim.o.hlsearch = false @@ -138,7 +141,7 @@ _G.load_config = function() vim.o.hidden = true --Enable mouse mode - vim.o.mouse = "a" + vim.o.mouse = 'a' -- clipboard vim.o.clipboard = 'unnamedplus' @@ -147,7 +150,7 @@ _G.load_config = function() vim.o.breakindent = true --Save undo history - vim.cmd[[set undofile]] + vim.cmd [[set undofile]] --Case insensitive searching UNLESS /C or capital in search vim.o.ignorecase = true @@ -155,50 +158,49 @@ _G.load_config = function() --Decrease update time vim.o.updatetime = 250 - vim.wo.signcolumn="yes" + vim.wo.signcolumn = 'yes' --Set colorscheme (order is important here) - vim.g.tokyonight_style = "night" + vim.g.tokyonight_style = 'night' vim.g.tokyonight_italic_functions = true vim.o.termguicolors = true - vim.cmd[[colorscheme tokyonight]] - + vim.cmd [[colorscheme tokyonight]] --Remap space as leader key - vim.api.nvim_set_keymap('', '', '', { noremap = true, silent=true}) - vim.g.mapleader = " " - vim.g.maplocalleader = " " + vim.api.nvim_set_keymap('', '', '', { noremap = true, silent = true }) + vim.g.mapleader = ' ' + vim.g.maplocalleader = ' ' --Remap for dealing with word wrap - vim.api.nvim_set_keymap('n', 'k', "v:count == 0 ? 'gk' : 'k'", { noremap=true, expr = true, silent = true}) - vim.api.nvim_set_keymap('n', 'j', "v:count == 0 ? 'gj' : 'j'", {noremap= true, expr = true, silent = true}) + vim.api.nvim_set_keymap('n', 'k', "v:count == 0 ? 'gk' : 'k'", { noremap = true, expr = true, silent = true }) + vim.api.nvim_set_keymap('n', 'j', "v:count == 0 ? 'gj' : 'j'", { noremap = true, expr = true, silent = true }) --Remap escape to leave terminal mode - vim.api.nvim_set_keymap('t', '', [[]], {noremap = true}) + vim.api.nvim_set_keymap('t', '', [[]], { noremap = true }) --Add map to enter paste mode - vim.o.pastetoggle="" + vim.o.pastetoggle = '' --Map blankline - vim.g.indent_blankline_char = "┊" + vim.g.indent_blankline_char = '┊' vim.g.indent_blankline_filetype_exclude = { 'help', 'packer' } - vim.g.indent_blankline_buftype_exclude = { 'terminal', 'nofile'} + vim.g.indent_blankline_buftype_exclude = { 'terminal', 'nofile' } vim.g.indent_blankline_char_highlight = 'LineNr' -- Toggle to disable mouse mode and indentlines for easier paste ToggleMouse = function() if vim.o.mouse == 'a' then - vim.cmd[[IndentBlanklineDisable]] - vim.wo.signcolumn='no' + vim.cmd [[IndentBlanklineDisable]] + vim.wo.signcolumn = 'no' vim.o.mouse = 'v' vim.wo.number = false - print("Mouse disabled") + print 'Mouse disabled' else - vim.cmd[[IndentBlanklineEnable]] - vim.wo.signcolumn='yes' + vim.cmd [[IndentBlanklineEnable]] + vim.wo.signcolumn = 'yes' vim.o.mouse = 'a' vim.wo.number = true - print("Mouse enabled") + print 'Mouse enabled' end end @@ -209,53 +211,56 @@ _G.load_config = function() defaults = { mappings = { i = { - [""] = false, - [""] = false, + [''] = false, + [''] = false, }, }, - generic_sorter = require'telescope.sorters'.get_fzy_sorter, - file_sorter = require'telescope.sorters'.get_fzy_sorter, - } + generic_sorter = require('telescope.sorters').get_fzy_sorter, + file_sorter = require('telescope.sorters').get_fzy_sorter, + }, } --Add leader shortcuts - vim.api.nvim_set_keymap('n', 'f', [[lua require('telescope.builtin').find_files()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', '', [[lua require('telescope.builtin').buffers()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'l', [[lua require('telescope.builtin').current_buffer_fuzzy_find()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 't', [[lua require('telescope.builtin').tags()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', '?', [[lua require('telescope.builtin').oldfiles()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'sd', [[lua require('telescope.builtin').grep_string()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'sp', [[lua require('telescope.builtin').live_grep()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'o', [[lua require('telescope.builtin').tags{ only_current_buffer = true }]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'gc', [[lua require('telescope.builtin').git_commits()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'gb', [[lua require('telescope.builtin').git_branches()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'gs', [[lua require('telescope.builtin').git_status()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'gp', [[lua require('telescope.builtin').git_bcommits()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'm', [[lua require('nvim-tree').toggle()]], { noremap = true, silent = true}) - vim.api.nvim_set_keymap('n', 'ng', [[lua require('neogit').open({ kind = "split" })]], { noremap = true, silent = true}) + vim.api.nvim_set_keymap('n', 'f', [[lua require('telescope.builtin').find_files()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', '', [[lua require('telescope.builtin').buffers()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'l', [[lua require('telescope.builtin').current_buffer_fuzzy_find()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 't', [[lua require('telescope.builtin').tags()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', '?', [[lua require('telescope.builtin').oldfiles()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'sd', [[lua require('telescope.builtin').grep_string()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'sp', [[lua require('telescope.builtin').live_grep()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'o', [[lua require('telescope.builtin').tags{ only_current_buffer = true }]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'gc', [[lua require('telescope.builtin').git_commits()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'gb', [[lua require('telescope.builtin').git_branches()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'gs', [[lua require('telescope.builtin').git_status()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'gp', [[lua require('telescope.builtin').git_bcommits()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'm', [[lua require('nvim-tree').toggle()]], { noremap = true, silent = true }) + vim.api.nvim_set_keymap('n', 'ng', [[lua require('neogit').open({ kind = "split" })]], { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'nu', ':PackerUpdate', { noremap = true, silent = true }) -- Change preview window location vim.g.splitbelow = true -- Highlight on yank - vim.api.nvim_exec([[ + vim.api.nvim_exec( + [[ augroup YankHighlight autocmd! autocmd TextYankPost * silent! lua vim.highlight.on_yank() augroup end - ]], false) + ]], + false + ) -- Y yank until the end of line - vim.api.nvim_set_keymap('n', 'Y', 'y$', { noremap = true}) + vim.api.nvim_set_keymap('n', 'Y', 'y$', { noremap = true }) -- -- LSP settings - local nvim_lsp = require('lspconfig') + local nvim_lsp = require 'lspconfig' local on_attach = function(_client, bufnr) require('lsp_signature').on_attach() vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') - local opts = { noremap=true, silent=true } + local opts = { noremap = true, silent = true } vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) @@ -275,85 +280,91 @@ _G.load_config = function() end -- Enable the following language servers - local servers = { 'jdtls', 'pyright', 'rnix','sourcekit' } + local servers = { 'jdtls', 'pyright', 'rnix', 'sourcekit' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach } end --- lua language server -local sumneko_binary = vim.fn.getenv("HOME").."/.nix-profile/bin/lua-language-server" -local runtime_path = vim.split(package.path, ';') -table.insert(runtime_path, 'lua/?.lua') -table.insert(runtime_path, 'lua/?/init.lua') + -- lua language server + local sumneko_binary = vim.fn.getenv 'HOME' .. '/.nix-profile/bin/lua-language-server' + local runtime_path = vim.split(package.path, ';') + table.insert(runtime_path, 'lua/?.lua') + table.insert(runtime_path, 'lua/?/init.lua') -require('lspconfig').sumneko_lua.setup { - cmd = { sumneko_binary }, - on_attach = on_attach, - settings = { - Lua = { - runtime = { - -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) - version = 'LuaJIT', - -- Setup your lua path - path = runtime_path, - }, - diagnostics = { - -- Get the language server to recognize the `vim` global - globals = { 'vim' }, - }, - workspace = { - -- Make the server aware of Neovim runtime files - library = vim.api.nvim_get_runtime_file('', true), - }, - -- Do not send telemetry data containing a randomized but unique identifier - telemetry = { - enable = false, + require('lspconfig').sumneko_lua.setup { + cmd = { sumneko_binary }, + commands = { + Format = { + function() + require('stylua-nvim').format_file() + end, }, }, - }, -} - + on_attach = on_attach, + settings = { + Lua = { + runtime = { + -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) + version = 'LuaJIT', + -- Setup your lua path + path = runtime_path, + }, + diagnostics = { + -- Get the language server to recognize the `vim` global + globals = { 'vim' }, + }, + workspace = { + -- Make the server aware of Neovim runtime files + library = vim.api.nvim_get_runtime_file('', true), + }, + -- Do not send telemetry data containing a randomized but unique identifier + telemetry = { + enable = false, + }, + }, + }, + } -- metals - vim.opt_global.shortmess:remove("F"):append("c") - metals_config = require("metals").bare_config - metals_config.init_options.statusBarProvider = "on" + vim.opt_global.shortmess:remove('F'):append 'c' + metals_config = require('metals').bare_config + metals_config.init_options.statusBarProvider = 'on' vim.cmd [[augroup lsp]] vim.cmd [[au!]] vim.cmd [[au FileType scala,sbt lua require("metals").initialize_or_attach(metals_config)]] vim.cmd [[augroup end]] -- Map :Format to vim.lsp.buf.formatting() - vim.cmd([[ command! Format execute 'lua vim.lsp.buf.formatting()' ]]) + vim.cmd [[ command! Format execute 'lua vim.lsp.buf.formatting()' ]] -- Set completeopt to have a better completion experience - vim.o.completeopt="menuone,noinsert" + vim.o.completeopt = 'menuone,noinsert' -- Compe setup - require'compe'.setup { - enabled = true; - autocomplete = true; - debug = false; - min_length = 1; - preselect = 'enable'; - throttle_time = 80; - source_timeout = 200; - incomplete_delay = 400; - max_abbr_width = 100; - max_kind_width = 100; - max_menu_width = 100; - documentation = true; + require('compe').setup { + enabled = true, + autocomplete = true, + debug = false, + min_length = 1, + preselect = 'enable', + throttle_time = 80, + source_timeout = 200, + incomplete_delay = 400, + max_abbr_width = 100, + max_kind_width = 100, + max_menu_width = 100, + documentation = true, source = { - path = true; + path = true, nvim_lsp = { priority = 1000, - filetypes = { "scala", "sbt", "java" }, + filetypes = { 'scala', 'sbt', 'java' }, }, nvim_lua = true, buffer = true, luasnip = true, - }; + }, } local t = function(str) @@ -361,12 +372,12 @@ require('lspconfig').sumneko_lua.setup { end local check_back_space = function() - local col = vim.fn.col('.') - 1 - if col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then - return true - else - return false - end + local col = vim.fn.col '.' - 1 + if col == 0 or vim.fn.getline('.'):sub(col, col):match '%s' then + return true + else + return false + end end -- Use (s-)tab to: @@ -374,30 +385,29 @@ require('lspconfig').sumneko_lua.setup { --- jump to prev/next snippet's placeholder _G.tab_complete = function() if vim.fn.pumvisible() == 1 then - return t "" + return t '' elseif check_back_space() then - return t "" + return t '' else return vim.fn['compe#complete']() end end _G.s_tab_complete = function() if vim.fn.pumvisible() == 1 then - return t "" + return t '' else - return t "" + return t '' end end - vim.api.nvim_set_keymap("i", "", "v:lua.tab_complete()", {expr = true}) - vim.api.nvim_set_keymap("s", "", "v:lua.tab_complete()", {expr = true}) - vim.api.nvim_set_keymap("i", "", "v:lua.s_tab_complete()", {expr = true}) - vim.api.nvim_set_keymap("s", "", "v:lua.s_tab_complete()", {expr = true}) - + vim.api.nvim_set_keymap('i', '', 'v:lua.tab_complete()', { expr = true }) + vim.api.nvim_set_keymap('s', '', 'v:lua.tab_complete()', { expr = true }) + vim.api.nvim_set_keymap('i', '', 'v:lua.s_tab_complete()', { expr = true }) + vim.api.nvim_set_keymap('s', '', 'v:lua.s_tab_complete()', { expr = true }) end if fn.isdirectory(install_path) == 0 then - fn.system({'git', 'clone', 'https://github.com/wbthomason/packer.nvim', install_path}) + fn.system { 'git', 'clone', 'https://github.com/wbthomason/packer.nvim', install_path } load_plugins() require('packer').sync() vim.cmd 'autocmd User PackerComplete ++once lua load_config()' diff --git a/programs/neovim/settings/salargalaxyline.lua b/programs/neovim/settings/salargalaxyline.lua index 53826b4..1903b73 100644 --- a/programs/neovim/settings/salargalaxyline.lua +++ b/programs/neovim/settings/salargalaxyline.lua @@ -1,6 +1,6 @@ -local gl = require('galaxyline') +local gl = require 'galaxyline' local gls = gl.section -gl.short_line_list = {'LuaTree','vista','dbui'} +gl.short_line_list = { 'LuaTree', 'vista', 'dbui' } local colors = { bg = '#282c34', @@ -13,11 +13,11 @@ local colors = { magenta = '#d16d9e', grey = '#c0c0c0', blue = '#0087d7', - red = '#ec5f67' + red = '#ec5f67', } local buffer_not_empty = function() - if vim.fn.empty(vim.fn.expand('%:t')) ~= 1 then + if vim.fn.empty(vim.fn.expand '%:t') ~= 1 then return true end return false @@ -25,60 +25,67 @@ end gls.left[1] = { FirstElement = { - provider = function() return '▋' end, - highlight = {colors.blue,colors.yellow} + provider = function() + return '▋' + end, + highlight = { colors.blue, colors.yellow }, }, } gls.left[2] = { ViMode = { provider = function() - local alias = {n = 'NORMAL',i = 'INSERT',c= 'COMMAND',v= 'VISUAL',V= 'VISUAL LINE', [''] = 'VISUAL BLOCK'} + local alias = { n = 'NORMAL', i = 'INSERT', c = 'COMMAND', v = 'VISUAL', V = 'VISUAL LINE', [''] = 'VISUAL BLOCK' } return alias[vim.fn.mode()] end, separator = '', - separator_highlight = {colors.purple,function() - if not buffer_not_empty() then - return colors.purple - end - return colors.darkblue - end}, - highlight = {colors.darkblue,colors.purple,'bold'}, + separator_highlight = { + colors.purple, + function() + if not buffer_not_empty() then + return colors.purple + end + return colors.darkblue + end, + }, + highlight = { colors.darkblue, colors.purple, 'bold' }, }, } -gls.left[3] ={ +gls.left[3] = { FileIcon = { provider = 'FileIcon', condition = buffer_not_empty, - highlight = {require('galaxyline.provider_fileinfo').get_file_icon_color,colors.darkblue}, + highlight = { require('galaxyline.provider_fileinfo').get_file_icon_color, colors.darkblue }, }, } gls.left[4] = { FileName = { - provider = {'FileName','FileSize'}, + provider = { 'FileName', 'FileSize' }, condition = buffer_not_empty, separator = '', - separator_highlight = {colors.purple,colors.darkblue}, - highlight = {colors.magenta,colors.darkblue} - } + separator_highlight = { colors.purple, colors.darkblue }, + highlight = { colors.magenta, colors.darkblue }, + }, } gls.left[5] = { GitIcon = { - provider = function() return '  ' end, + provider = function() + return '  ' + end, condition = buffer_not_empty, - highlight = {colors.orange,colors.purple}, - } + highlight = { colors.orange, colors.purple }, + }, } gls.left[6] = { GitBranch = { provider = 'GitBranch', condition = buffer_not_empty, - highlight = {colors.grey,colors.purple}, - } + highlight = { colors.grey, colors.purple }, + }, } local checkwidth = function() - local squeeze_width = vim.fn.winwidth(0) / 2 + local squeeze_width = vim.fn.winwidth(0) / 2 if squeeze_width > 40 then return true end @@ -90,99 +97,101 @@ gls.left[7] = { provider = 'DiffAdd', condition = checkwidth, icon = ' ', - highlight = {colors.green,colors.purple}, - } + highlight = { colors.green, colors.purple }, + }, } gls.left[8] = { DiffModified = { provider = 'DiffModified', condition = checkwidth, icon = ' ', - highlight = {colors.orange,colors.purple}, - } + highlight = { colors.orange, colors.purple }, + }, } gls.left[9] = { DiffRemove = { provider = 'DiffRemove', condition = checkwidth, icon = ' ', - highlight = {colors.red,colors.purple}, - } + highlight = { colors.red, colors.purple }, + }, } gls.left[10] = { LeftEnd = { - provider = function() return '' end, + provider = function() + return '' + end, separator = '', - separator_highlight = {colors.purple,colors.bg}, - highlight = {colors.purple,colors.purple} - } + separator_highlight = { colors.purple, colors.bg }, + highlight = { colors.purple, colors.purple }, + }, } gls.left[11] = { DiagnosticError = { provider = 'DiagnosticError', icon = '  ', - highlight = {colors.red,colors.bg} - } + highlight = { colors.red, colors.bg }, + }, } gls.left[12] = { Space = { - provider = function () return ' ' end - } + provider = function() + return ' ' + end, + }, } gls.left[13] = { DiagnosticWarn = { provider = 'DiagnosticWarn', icon = '  ', - highlight = {colors.blue,colors.bg}, - } + highlight = { colors.blue, colors.bg }, + }, } -gls.right[1]= { +gls.right[1] = { FileFormat = { provider = 'FileFormat', separator = '', - separator_highlight = {colors.bg,colors.purple}, - highlight = {colors.grey,colors.purple}, - } + separator_highlight = { colors.bg, colors.purple }, + highlight = { colors.grey, colors.purple }, + }, } gls.right[2] = { LineInfo = { provider = 'LineColumn', separator = ' | ', - separator_highlight = {colors.darkblue,colors.purple}, - highlight = {colors.grey,colors.purple}, + separator_highlight = { colors.darkblue, colors.purple }, + highlight = { colors.grey, colors.purple }, }, } gls.right[3] = { PerCent = { provider = 'LinePercent', separator = '', - separator_highlight = {colors.darkblue,colors.purple}, - highlight = {colors.grey,colors.darkblue}, - } + separator_highlight = { colors.darkblue, colors.purple }, + highlight = { colors.grey, colors.darkblue }, + }, } gls.right[4] = { ScrollBar = { provider = 'ScrollBar', - highlight = {colors.yellow,colors.purple}, - } + highlight = { colors.yellow, colors.purple }, + }, } gls.short_line_left[1] = { BufferType = { provider = 'FileTypeName', separator = '', - separator_highlight = {colors.purple,colors.bg}, - highlight = {colors.grey,colors.purple} - } + separator_highlight = { colors.purple, colors.bg }, + highlight = { colors.grey, colors.purple }, + }, } - gls.short_line_right[1] = { BufferIcon = { - provider= 'BufferIcon', + provider = 'BufferIcon', separator = '', - separator_highlight = {colors.purple,colors.bg}, - highlight = {colors.grey,colors.purple} - } + separator_highlight = { colors.purple, colors.bg }, + highlight = { colors.grey, colors.purple }, + }, } - From 2477fa1ecd625416c024fafd4b34efbeca5ff40d Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Thu, 15 Jul 2021 22:19:17 -0700 Subject: [PATCH 12/18] added lua-dev & json/yaml plugin --- home.nix | 2 ++ programs/neovim/init.lua | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/home.nix b/home.nix index 74dcdda..154f78b 100644 --- a/home.nix +++ b/home.nix @@ -201,6 +201,7 @@ pkgs.hugo pkgs.hyperfine pkgs.jansson + pkgs.jq pkgs.maven pkgs.multimarkdown pkgs.ncdu @@ -231,5 +232,6 @@ pkgs.vscodium pkgs.wget pkgs.xz + pkgs.yq ]; } diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index 49d8492..c1764a5 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -7,11 +7,15 @@ local function load_plugins() local use = require('packer').use require('packer').startup(function() use 'wbthomason/packer.nvim' -- Package manager + use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client use 'nvim-treesitter/nvim-treesitter' use 'nvim-treesitter/nvim-treesitter-textobjects' + use 'nvim-treesitter/playground' use 'folke/which-key.nvim' - use { 'nvim-telescope/telescope.nvim', requires = { { 'nvim-lua/popup.nvim' }, { 'nvim-lua/plenary.nvim' } } } + use 'folke/lua-dev.nvim' use 'folke/tokyonight.nvim' -- Theme + use { 'folke/trouble.nvim', requires = 'kyazdani42/nvim-web-devicons' } + use { 'nvim-telescope/telescope.nvim', requires = { { 'nvim-lua/popup.nvim' }, { 'nvim-lua/plenary.nvim' } } } use 'windwp/nvim-autopairs' -- Autopairs use 'kyazdani42/nvim-tree.lua' -- File explorer use { @@ -24,17 +28,15 @@ local function load_plugins() use 'lukas-reineke/indent-blankline.nvim' use { 'lewis6991/gitsigns.nvim', requires = 'nvim-lua/plenary.nvim' } use { 'TimUntersberger/neogit', requires = { { 'nvim-lua/plenary.nvim' }, { 'sindrets/diffview.nvim' } } } - use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client use { 'hrsh7th/nvim-compe', requires = 'L3MON4D3/LuaSnip' } -- Autocompletion plugin use 'kevinhwang91/nvim-bqf' use 'mfussenegger/nvim-dap' use 'sheerun/vim-polyglot' use 'scalameta/nvim-metals' use 'ray-x/lsp_signature.nvim' - use { 'folke/trouble.nvim', requires = 'kyazdani42/nvim-web-devicons' } - use 'nvim-treesitter/playground' use 'b3nj5m1n/kommentary' use 'ckipp01/stylua-nvim' + use 'gennaro-tedesco/nvim-jqx' end) end @@ -46,6 +48,8 @@ _G.load_config = function() require 'salargalaxyline' require('kommentary.config').use_extended_mappings() + local luadev = require('lua-dev').setup() + -- Treesitter require('nvim-treesitter.configs').setup { query_linter = { @@ -315,7 +319,10 @@ _G.load_config = function() }, workspace = { -- Make the server aware of Neovim runtime files - library = vim.api.nvim_get_runtime_file('', true), + library = { + vim.api.nvim_get_runtime_file('', true), + luadev, + }, }, -- Do not send telemetry data containing a randomized but unique identifier telemetry = { From ca2d83fae0d5d9f486ad38d9f5321c5778251bc9 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Thu, 15 Jul 2021 22:33:10 -0700 Subject: [PATCH 13/18] add Lua --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index 154f78b..9784078 100644 --- a/home.nix +++ b/home.nix @@ -202,6 +202,8 @@ pkgs.hyperfine pkgs.jansson pkgs.jq + pkgs.luajit + pkgs.luajitPackages.luarocks pkgs.maven pkgs.multimarkdown pkgs.ncdu From 962da365db63ad0ad60ed8fab4bcbb59e164f6b8 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Fri, 16 Jul 2021 08:08:29 -0700 Subject: [PATCH 14/18] Added orgmode --- programs/neovim/init.lua | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index c1764a5..bddd746 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -37,19 +37,26 @@ local function load_plugins() use 'b3nj5m1n/kommentary' use 'ckipp01/stylua-nvim' use 'gennaro-tedesco/nvim-jqx' + use 'kristijanhusak/orgmode.nvim' end) end _G.load_config = function() - require('nvim-autopairs').setup() - require('which-key').setup() - require('trouble').setup() require('gitsigns').setup() - require 'salargalaxyline' require('kommentary.config').use_extended_mappings() + require('nvim-autopairs').setup() + require 'salargalaxyline' + require('trouble').setup() + require('which-key').setup() local luadev = require('lua-dev').setup() + -- orgmode.nvim + require('orgmode').setup({ + org_agenda_files = {'~/Documents/org'}, + org_default_notes_file = '~/Documents/org/notes.org' + }) + -- Treesitter require('nvim-treesitter.configs').setup { query_linter = { @@ -371,6 +378,7 @@ _G.load_config = function() nvim_lua = true, buffer = true, luasnip = true, + orgmode = true, }, } From 4fdbefc713fb4608d5f880b8b8856305a6ab7af1 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Sat, 17 Jul 2021 07:59:37 -0700 Subject: [PATCH 15/18] No need to add jq as package --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index 9784078..c93d3a7 100644 --- a/home.nix +++ b/home.nix @@ -201,7 +201,6 @@ pkgs.hugo pkgs.hyperfine pkgs.jansson - pkgs.jq pkgs.luajit pkgs.luajitPackages.luarocks pkgs.maven From 2a8cdbc0fae333f300f7f9bb7b30e35faee361f3 Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Tue, 20 Jul 2021 21:16:57 -0700 Subject: [PATCH 16/18] added rainbow plugin --- programs/neovim/init.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index bddd746..f3e3029 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -38,6 +38,7 @@ local function load_plugins() use 'ckipp01/stylua-nvim' use 'gennaro-tedesco/nvim-jqx' use 'kristijanhusak/orgmode.nvim' + use 'p00f/nvim-ts-rainbow' end) end @@ -129,6 +130,11 @@ _G.load_config = function() show_help = '?', }, }, + rainbow = { + enable = true, + extended_mode = true, + max_file_lines = 1000, + }, } -- neogit From f6813cdefb501d10c43e334583ba828136fdcc4c Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Thu, 22 Jul 2021 23:38:39 -0700 Subject: [PATCH 17/18] Updates --- programs/neovim/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index f3e3029..88bc5ee 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -347,8 +347,8 @@ _G.load_config = function() -- metals vim.opt_global.shortmess:remove('F'):append 'c' - metals_config = require('metals').bare_config - metals_config.init_options.statusBarProvider = 'on' + Metals_config = require('metals').bare_config + Metals_config.init_options.statusBarProvider = 'on' vim.cmd [[augroup lsp]] vim.cmd [[au!]] vim.cmd [[au FileType scala,sbt lua require("metals").initialize_or_attach(metals_config)]] @@ -379,7 +379,7 @@ _G.load_config = function() path = true, nvim_lsp = { priority = 1000, - filetypes = { 'scala', 'sbt', 'java' }, + filetypes = { 'scala', 'sbt', 'java', 'python' }, }, nvim_lua = true, buffer = true, From ce9e000a796cbd5ce364c6e4b2b0902ffcc4231a Mon Sep 17 00:00:00 2001 From: Salar Rahmanian Date: Sat, 24 Jul 2021 10:52:19 -0700 Subject: [PATCH 18/18] Cleanup --- programs/neovim/init.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/programs/neovim/init.lua b/programs/neovim/init.lua index 88bc5ee..e4d66b7 100644 --- a/programs/neovim/init.lua +++ b/programs/neovim/init.lua @@ -1,4 +1,3 @@ -local execute = vim.api.nvim_command local fn = vim.fn local install_path = fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim'