From 88e3a5c36054da4d6b0c093e8ff3f74a32e30e73 Mon Sep 17 00:00:00 2001 From: Julien Malka Date: Wed, 12 Oct 2022 09:53:16 +0200 Subject: [PATCH] Added new neovim config: WIP --- home-manager-modules/neovim/default.nix | 125 ++++++---- home-manager-modules/neovim/default.nix.bak | 214 ++++++++++++++++++ .../neovim/lua/galaxyline.lua | 204 ----------------- home-manager-modules/neovim/lua/lsp.lua | 76 ------- home-manager-modules/neovim/lua/nvim-tree.lua | 60 ----- home-manager-modules/neovim/lua/settings.lua | 96 -------- home-manager-modules/neovim/settings.lua | 76 +++++++ 7 files changed, 371 insertions(+), 480 deletions(-) create mode 100644 home-manager-modules/neovim/default.nix.bak delete mode 100755 home-manager-modules/neovim/lua/galaxyline.lua delete mode 100755 home-manager-modules/neovim/lua/lsp.lua delete mode 100755 home-manager-modules/neovim/lua/nvim-tree.lua delete mode 100644 home-manager-modules/neovim/lua/settings.lua create mode 100644 home-manager-modules/neovim/settings.lua diff --git a/home-manager-modules/neovim/default.nix b/home-manager-modules/neovim/default.nix index 3d12ea2..fcb5328 100644 --- a/home-manager-modules/neovim/default.nix +++ b/home-manager-modules/neovim/default.nix @@ -1,13 +1,25 @@ -{ pkgs, lib, config, ... }: +{ pkgs, home, lib, config, ... }: let cfg = config.luj.programs.neovim; - dusk-vim = pkgs.vimUtils.buildVimPlugin { - name = "dusk-vim"; + onedarker = pkgs.vimUtils.buildVimPlugin { + pname = "onedarker"; + version = "1.0.0"; src = pkgs.fetchFromGitHub { - owner = "notusknot"; - repo = "dusk-vim"; - rev = "8eb71f092ebfa173a6568befbe522a56e8382756"; - sha256 = "09l4hda5jnyigc2hhlirv1rc8hsnsc4zgcv4sa4br8fryi73nf4g"; + owner = "lunarvim"; + repo = "onedarker.nvim"; + rev = "2d02768b6801d0acdef7f6e1ac8db0929581d5bc"; + sha256 = "sha256-admAB4ybJpN/4+MtZd9CEQKZEq8nBZJsLiB6gUUylrc="; + }; + }; + + coc-sql = pkgs.vimUtils.buildVimPlugin { + pname = "coq-sql"; + version = "1.0.0"; + src = pkgs.fetchFromGitHub { + owner = "fannheyward"; + repo = "coc-sql"; + rev = "0ac7d35200bda0abcc1b0f91ad5cb08eb44b1eca"; + sha256 = "sha256-admAB4ybJpN/4+MtZd9CEQKZEq8nBZJsLiB6gUUylrc="; }; }; @@ -19,55 +31,80 @@ with lib; }; config = mkIf cfg.enable { + + home.packages = with pkgs; [ nixfmt git nodejs ripgrep ]; + programs.neovim = { enable = true; - package = pkgs.neovim-unwrapped; - plugins = with pkgs.vimPlugins; [ - # File tree - nvim-web-devicons - nvim-tree-lua + package = pkgs.unstable.neovim-unwrapped; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + + coc = { + enable = true; + settings = { + coc.preferences.formatOnSaveFiletypes = [ "nix" "rust" "sql" ]; + languageserver = { + nix = { + command = "rnix-lsp"; + filetypes = [ + "nix" + ]; + }; + }; + }; + }; + + withPython3 = true; + plugins = with pkgs.unstable.vimPlugins; [ + #theme + onedarker + # LSP nvim-lspconfig - # Languages - vim-nix - # Eyecandy - nvim-treesitter - bufferline-nvim - galaxyline-nvim - nvim-colorizer-lua - pears-nvim - dusk-vim + plenary-nvim - # Lsp and completion - nvim-lspconfig - nvim-compe - - # Telescope + #Telescope telescope-nvim - # Indent lines - #indent-blankline-nvim - ]; - extraPackages = with pkgs; [ - gcc - rnix-lsp - tree-sitter - sumneko-lua-language-server - ripgrep + nvim-web-devicons + + + (nvim-treesitter.withPlugins (ps: with ps; [ + tree-sitter-nix + tree-sitter-python + ])) + + + bufferline-nvim + nvim-colorizer-lua + pears-nvim + nvim-tree-lua + + vim-lastplace + vim-nix + vim-nixhash + vim-yaml + vim-toml + vim-airline + vim-devicons + zig-vim + vim-scriptease + semshi + coc-sql + coc-prettier + coc-rust-analyzer + rust-vim ]; + + extraPackages = with pkgs; [ rust-analyzer rnix-lsp ]; + extraConfig = '' - luafile ${./lua}/lsp.lua - luafile ${./lua}/nvim-tree.lua - luafile ${./lua}/galaxyline.lua - luafile ${./lua}/settings.lua + luafile ${./settings.lua} ''; }; }; - } - - - - diff --git a/home-manager-modules/neovim/default.nix.bak b/home-manager-modules/neovim/default.nix.bak new file mode 100644 index 0000000..328b908 --- /dev/null +++ b/home-manager-modules/neovim/default.nix.bak @@ -0,0 +1,214 @@ +{ pkgs, home, ... }: +{ + home.sessionVariables = { EDITOR = "vim"; }; + + home.packages = with pkgs; [ nixfmt git ]; + + programs.neovim = { + enable = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + + coc.enable = true; + + withPython3 = true; + plugins = with pkgs.vimPlugins; [ + #theme + dracula-vim + + # LSP + nvim-lspconfig + plenary-nvim + + #Telescope + telescope-nvim + + nvim-web-devicons + + + (nvim-treesitter.withPlugins (ps: with ps; [ + tree-sitter-nix + tree-sitter-python + tree-sitter-svelte + ])) + + + bufferline-nvim + galaxyline-nvim + nvim-colorizer-lua + pears-nvim +# dusk-vim + nvim-tree-lua + + vim-lastplace + vim-nix + lean-nvim + vim-nixhash + vim-yaml + vim-toml + vim-airline + vim-devicons + zig-vim + vim-scriptease + semshi + coc-nvim + coc-rust-analyzer + rust-vim + ]; + + extraPackages = with pkgs; [ rust-analyzer ]; + + extraConfig = '' + syntax on + " This has to be defined at the top of the file + let maplocalleader = "\\" + let mapleader = "\" + + colorscheme dracula + + set scrolloff=4 + + " noswapfile + " nobackup + " undodir=~/.vim/undodir + " undofile + " spell + + " Search case sensitivity + set smartcase + set ignorecase + + " No error bells + set noerrorbells + + + " GoTo code navigation. + 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() + " Flex + nnoremap gg0G$yG$r Go0"_Dp$pgg$p + + " Correct my typos + command W :w + command Wq :wq + command WQ :wq + + " Move text arround + vnoremap J :m '>+1gv=gv + vnoremap K :m '<-2gv=gv + inoremap :m .+1==i + inoremap :m .-2==i + nnoremap j :m .+1== + nnoremap k :m .-2== + + " Completion + set wildmenu + set completeopt=longest,menuone + + " Completion in command bar + set wmnu + set wildmode=list:longest,list:full + set wildignore=*.o + + " Command bar + set history=2000 + + " Search + set incsearch + set nohlsearch + + " No mouse + " set mouse= + + " Encoding + set encoding=utf-8 + set fileencoding=utf-8 + + " Make neovim more powerfull + set nocompatible + + " Allow backspace in insert mode + set backspace=indent,eol,start + + " Highlight the current line + set cursorline + hi CursorLine term=bold cterm=bold ctermbg=darkgrey + + " Line numbers + set number + set relativenumber + + " Tabs vs spaces + set tabstop=2 + set softtabstop=2 + set shiftwidth=2 + set expandtab + + " Auto indent + set smartindent + set autoindent + + " Ctrl-T for new tab + nnoremap :tabnew + + " Delete tralling whitespace on save + autocmd BufWritePre * %s/\s\+$//e + + " Spell-check + map :setlocal spell! spelllang=en_us + map :setlocal spell! spelllang=fr + + " Line and word count + map :!wc % + + " Lean + lua< + 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 + require("nvim-tree").setup() + local builtin = require('telescope.builtin') + vim.keymap.set('n', 'ff', builtin.find_files, {}) + vim.keymap.set('n', 'fg', builtin.live_grep, {}) + vim.keymap.set('n', 'fb', builtin.buffers, {}) + vim.keymap.set('n', 'fh', builtin.help_tags, {}) + + require'nvim-web-devicons'.setup() + + EOF + ''; + }; +} + diff --git a/home-manager-modules/neovim/lua/galaxyline.lua b/home-manager-modules/neovim/lua/galaxyline.lua deleted file mode 100755 index 06f6eb0..0000000 --- a/home-manager-modules/neovim/lua/galaxyline.lua +++ /dev/null @@ -1,204 +0,0 @@ - -- This file configures galaxyline, a fast and small statusline for nvim. - -- The configuration was taken from github.com/siduck76/neovim-dotfiles/ - -- All I did was change the colors. Full credit goes to siduck76 - -local gl = require("galaxyline") -local gls = gl.section - -gl.short_line_list = {" "} -- keeping this table { } as empty will show inactive statuslines - -local colors = { - bg = "#2e303e", - line_bg = "#2e303e", - fg = "#e3e6ee", - green = "#29d398", - orange = "#efb993", - red = "#e95678", - lightbg = "#2e303e", - lightbasdfg = "#393b4d", - nord = "#9699b7", - greenYel = "#efb993" -} - -gls.left[1] = { - leftRounded = { - provider = function() - return " " - end, - highlight = {colors.nord, colors.bg} - } -} - -gls.left[2] = { - statusIcon = { - provider = function() - return "  " - end, - highlight = {colors.fg, colors.bg}, - separator = " ", - separator_highlight = {colors.lightbg, colors.lightbg} - } -} - -gls.left[3] = { - FileIcon = { - provider = "FileIcon", - condition = buffer_not_empty, - highlight = {require("galaxyline.provider_fileinfo").get_file_icon_color, colors.lightbg} - } -} - -gls.left[4] = { - FileName = { - provider = {"FileName", "FileSize"}, - condition = buffer_not_empty, - highlight = {colors.fg, colors.lightbg} - } -} - -gls.left[5] = { - teech = { - provider = function() - return " " - end, - separator = " ", - highlight = {colors.lightbg, colors.bg} - } -} - -local checkwidth = function() - local squeeze_width = vim.fn.winwidth(0) / 2 - if squeeze_width > 40 then - return true - end - return false -end - -gls.left[6] = { - DiffAdd = { - provider = "DiffAdd", - condition = checkwidth, - icon = "  ", - highlight = {colors.greenYel, colors.line_bg} - } -} - -gls.left[7] = { - DiffModified = { - provider = "DiffModified", - condition = checkwidth, - icon = " ", - highlight = {colors.orange, colors.line_bg} - } -} - -gls.left[8] = { - DiffRemove = { - provider = "DiffRemove", - condition = checkwidth, - icon = " ", - highlight = {colors.lightbg, colors.line_bg} - } -} - -gls.left[9] = { - LeftEnd = { - provider = function() - return " " - end, - separator = " ", - separator_highlight = {colors.line_bg, colors.line_bg}, - highlight = {colors.line_bg, colors.line_bg} - } -} - -gls.left[10] = { - DiagnosticError = { - provider = "DiagnosticError", - icon = "  ", - highlight = {colors.red, colors.bg} - } -} - -gls.left[11] = { - Space = { - provider = function() - return " " - end, - highlight = {colors.line_bg, colors.line_bg} - } -} - -gls.left[12] = { - DiagnosticWarn = { - provider = "DiagnosticWarn", - icon = "  ", - highlight = {colors.red, colors.bg} - } -} - -gls.right[1] = { - GitIcon = { - provider = function() - return "  " - end, - condition = require("galaxyline.provider_vcs").check_git_workspace, - highlight = {colors.green, colors.line_bg} - } -} - -gls.right[2] = { - GitBranch = { - provider = "GitBranch", - condition = require("galaxyline.provider_vcs").check_git_workspace, - highlight = {colors.green, colors.line_bg} - } -} - -gls.right[3] = { - right_LeftRounded = { - provider = function() - return " " - end, - separator = " ", - separator_highlight = {colors.bg, colors.bg}, - highlight = {colors.lightbg, colors.bg} - } -} - -gls.right[4] = { - ViMode = { - provider = function() - local alias = { - n = "NORMAL", - i = "INSERT", - c = "COMMAND", - V = "VISUAL", - [""] = "VISUAL", - v = "VISUAL", - R = "REPLACE" - } - return alias[vim.fn.mode()] - end, - highlight = {colors.fg, colors.lightbg} - } -} - -gls.right[5] = { - PerCent = { - provider = "LinePercent", - separator = " ", - separator_highlight = {colors.lightbg, colors.lightbg}, - highlight = {colors.fg, colors.lightbg} - } -} - -gls.right[6] = { - rightRounded = { - provider = function() - return " " - end, - highlight = {colors.lightbg, colors.bg} - } -} - diff --git a/home-manager-modules/neovim/lua/lsp.lua b/home-manager-modules/neovim/lua/lsp.lua deleted file mode 100755 index 5978580..0000000 --- a/home-manager-modules/neovim/lua/lsp.lua +++ /dev/null @@ -1,76 +0,0 @@ --- This file sets up autocompletion for neovim's native lsp - --- This enables all the language servers I want on my system --- Change these to whatever languages you use - -require'lspconfig'.rnix.setup{} -require'lspconfig'.sumneko_lua.setup{} -vim.o.completeopt = "menuone,noselect" - --- Autocompletion 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 = false; - source = { - path = true; - buffer = true; - nvim_lsp = true; - treesitter = true; - }; -} - --- Set tab to accept the autocompletion -local t = function(str) - return vim.api.nvim_replace_termcodes(str, true, true, true) -end -_G.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}) - - --- set the path to the sumneko installation; if you previously installed via the now deprecated :LspInstall, use -local sumneko_root_path = vim.fn.stdpath('cache')..'/lspconfig/sumneko_lua/lua-language-server' -local sumneko_binary = "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, "-E", sumneko_root_path .. "/main.lua"}; - settings = { - Lua = { - runtime = { - version = 'LuaJIT', - path = runtime_path, - }, - diagnostics = { - globals = {'vim'}, - }, - workspace = { - library = vim.api.nvim_get_runtime_file("", true), - preloadFileSize = 120 - }, - telemetry = { - enable = false, - }, - }, - }, -} diff --git a/home-manager-modules/neovim/lua/nvim-tree.lua b/home-manager-modules/neovim/lua/nvim-tree.lua deleted file mode 100755 index 6cb44f0..0000000 --- a/home-manager-modules/neovim/lua/nvim-tree.lua +++ /dev/null @@ -1,60 +0,0 @@ --- following options are the default --- each of these are documented in `:help nvim-tree.OPTION_NAME` -require'nvim-tree'.setup { - disable_netrw = true, - hijack_netrw = true, - open_on_setup = false, - ignore_ft_on_setup = {}, - auto_close = false, - open_on_tab = false, - hijack_cursor = false, - update_cwd = false, - update_to_buf_dir = { - enable = true, - auto_open = true, - }, - diagnostics = { - enable = false, - icons = { - hint = "", - info = "", - warning = "", - error = "", - } - }, - update_focused_file = { - enable = false, - update_cwd = false, - ignore_list = {} - }, - system_open = { - cmd = nil, - args = {} - }, - filters = { - dotfiles = false, - custom = {} - }, - git = { - enable = true, - ignore = true, - timeout = 500, - }, - view = { - width = 30, - height = 30, - hide_root_folder = false, - side = 'left', - auto_resize = false, - mappings = { - custom_only = false, - list = {} - }, - number = false, - relativenumber = false - }, - trash = { - cmd = "trash", - require_confirm = true - } -} diff --git a/home-manager-modules/neovim/lua/settings.lua b/home-manager-modules/neovim/lua/settings.lua deleted file mode 100644 index 45b2a56..0000000 --- a/home-manager-modules/neovim/lua/settings.lua +++ /dev/null @@ -1,96 +0,0 @@ --- Lazy load everything! --- --- ---dofile("lsp.lua") ---dofile("galaxyline.lua") ---dofile("nvim-tree.lua") -local opt = vim.opt -local g = vim.g - - -vim.cmd [[ - set nowrap - set nobackup - set nowritebackup - set noerrorbells - set noswapfile - - colorscheme dusk - function! Preserve(command) - let w = winsaveview() - execute a:command - call winrestview(w) - endfunction - autocmd FileType nix map u :call Preserve("%!update-nix-fetchgit --location=" . line(".") . ":" . col(".")) - autocmd BufWinEnter NvimTree setlocal nonumber - map ; : - highlight IndentBlanklineChar guifg = #393b4d - -]] - --- Enable plugins -require('bufferline').setup{} -require('pears').setup() -require('colorizer').setup() - --- Treesitter settings -require'nvim-treesitter.configs'.setup { - ensure_installed = "all", -- one of "all", "maintained" (parsers with maintainers), or a list of languages - highlight = { - enable = true - }, -} - -local map = vim.api.nvim_set_keymap -options = { noremap = true } -map('n', '', ':NvimTreeToggle ', options) -map('n', '', ':Telescope find_files ', options) -map('n', '', ':Telescope live_grep ', options) -map('n', '', ':noh ', options) -map('n', '', ':!xclip -sel c -o | pygmentize -f html | xclip -sel c ', options) -vim.api.nvim_set_keymap('n', '0', "getline('.')[0 : col('.') - 2] =~# '^\\s\\+$' ? '0' : '^'", {silent = true, noremap = true, expr = true}) -g.mapleader = ' ' - --- Indent line -g.indent_blankline_char = '▏' - --- Performance -opt.lazyredraw = true; -opt.shell = "zsh" -opt.shadafile = "NONE" - --- Colors -opt.termguicolors = true - --- Undo files -opt.undofile = true - --- Indentation -opt.smartindent = true -opt.tabstop = 4 -opt.shiftwidth = 4 -opt.shiftround = true -opt.expandtab = true -opt.scrolloff = 3 - --- Set clipboard to use system clipboard -opt.clipboard = "unnamedplus" - --- Use mouse -opt.mouse = "a" - --- Nicer UI settings -opt.cursorline = true -opt.relativenumber = true -opt.number = true - --- Get rid of annoying viminfo file -opt.viminfo = "" -opt.viminfofile = "NONE" - --- Miscellaneous quality of life -opt.ignorecase = true -opt.ttimeoutlen = 5 -opt.compatible = false -opt.hidden = true -opt.shortmess = "atI" diff --git a/home-manager-modules/neovim/settings.lua b/home-manager-modules/neovim/settings.lua new file mode 100644 index 0000000..b55423c --- /dev/null +++ b/home-manager-modules/neovim/settings.lua @@ -0,0 +1,76 @@ +local opt = vim.opt +local g = vim.g +local keyset = vim.keymap.set + +opt.backup = false +opt.writebackup = false +opt.updatetime = 300 +opt.signcolumn = "yes" + +function _G.check_back_space() + local col = vim.fn.col('.') - 1 + return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') +end + +local opts = {silent = true, noremap = true, expr = true} +keyset("i", "", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "" : coc#refresh()', opts) +keyset("i", "", [[coc#pum#visible() ? coc#pum#prev(1) : "\"]], opts) +keyset("i", "", [[coc#pum#visible() ? coc#pum#confirm() : "\u\\=coc#on_enter()\"]], opts) + + +keyset("n", "gd", "(coc-definition)", {silent = true}) +keyset("n", "gy", "(coc-type-definition)", {silent = true}) +keyset("n", "gi", "(coc-implementation)", {silent = true}) +keyset("n", "gr", "(coc-references)", {silent = true}) + +function _G.show_docs() + local cw = vim.fn.expand('') + if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then + vim.api.nvim_command('h ' .. cw) + elseif vim.api.nvim_eval('coc#rpc#ready()') then + vim.fn.CocActionAsync('doHover') + else + vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw) + end +end +keyset("n", "K", 'lua _G.show_docs()', {silent = true}) + + + +vim.cmd [[ + syntax on + set scrolloff=4 + set nocompatible + set encoding=utf-8 + set fileencoding=utf-8 + + set smartindent + set autoindent + set number + set relativenumber + + colorscheme onedarker +]] + + +require("nvim-tree").setup() +local builtin = require('telescope.builtin') +vim.keymap.set('n', 'ff', builtin.find_files, {}) +vim.keymap.set('n', 'fg', builtin.live_grep, {}) +vim.keymap.set('n', 'fb', builtin.buffers, {}) +vim.keymap.set('n', 'fh', builtin.help_tags, {}) + +require'nvim-web-devicons'.setup() + +vim.opt.termguicolors = true +require("bufferline").setup{} + +require('colorizer').setup() + +-- Treesitter settings +require'nvim-treesitter.configs'.setup { + ensure_installed = "", -- one of "all", "maintained" (parsers with maintainers), or a list of languages + highlight = { + enable = true + }, +}