From f3ba0c3ab81691dcfb332672c6be34a2c28b58a7 Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 02:51:44 -0800 Subject: [PATCH] Add nvim support --- home.nix | 1 + programs/nvim/default.nix | 74 +++++++++++++++++++++++++++++++++++++++ programs/nvim/init.vim | 67 +++++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 programs/nvim/default.nix create mode 100644 programs/nvim/init.vim diff --git a/home.nix b/home.nix index d5b7845..8540bab 100644 --- a/home.nix +++ b/home.nix @@ -15,6 +15,7 @@ ./programs/fish ./programs/nnn ./programs/rofi + ./programs/nvim ]; home.packages = with pkgs; [ diff --git a/programs/nvim/default.nix b/programs/nvim/default.nix new file mode 100644 index 0000000..bd19ffd --- /dev/null +++ b/programs/nvim/default.nix @@ -0,0 +1,74 @@ +{ config, pkgs, ... }: + +{ + programs.neovim.enable = true; + programs.neovim.extraConfig = '' + ${builtins.readFile ./init.vim} + ''; + programs.neovim.plugins = with pkgs.vimPlugins; [ + { # Personal Wiki + plugin = vimwiki; + config = '' + let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', + \ 'ext': '.md', 'syntax': 'markdown'}] + ''; + } + { # NNN in vim + plugin = nnn-vim; + config = '' + let g:nnn#layout = { 'window': { + \ 'width': 0.35, + \ 'height': 0.5, + \ 'xoffset': 1.0, + \ 'highlight': 'Debug' } } " hover window + let g:nnn#action = { + \ '': 'tab split', + \ '': 'split', + \ '': 'vsplit' } + let g:nnn#command = 'nnn -HoeT v' + let g:nnn#replace_netrw = 1 + ''; + } + { # Fuzzy searches + plugin = fzf-vim; + config = '' + map :Files + map :Ag + ''; + } + { # Auto completions + plugin = coc-nvim; + config = '' + function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' + endfunction + + inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() + inoremap pumvisible() ? "\" : "\" + ''; + } + vim-commentary # multi-line comments + vim-fugitive # Git Plugin + vimtex # Latex support + tagbar # File tagging + + # === LOOK AND FEEL === + { # Status Bar + plugin = vim-airline; + config = '' + let g:airline#extensions#tagbar#flags = 'fs' + ''; + } + { # Rainbow Parenthesis + plugin = rainbow; + config = '' + let g:rainbow_actve = 1 + ''; + } + vim-polyglot # Syntax Highlighting + ]; +} diff --git a/programs/nvim/init.vim b/programs/nvim/init.vim new file mode 100644 index 0000000..a40649a --- /dev/null +++ b/programs/nvim/init.vim @@ -0,0 +1,67 @@ +syntax on +let mapleader =" " +set encoding=utf-8 +set nocompatible +filetype plugin on +set list + +set updatetime=300 + +" Easy Split Navigation +nnoremap +nnoremap +nnoremap +nnoremap + +" Indentation +set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab + +" Searching +set smartcase + +" Backups +set noswapfile +set nobackup +set undodir=~/.config/nvim/undodir +set undofile + +" Right column at 80 lines for good coding practice. +set colorcolumn=80 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" QoL +set showmatch " Show matching Brackets +set number relativenumber " Side numbers + +" Fuzzy finding by allowing searching into subfolders +set path+=** +set wildmenu +" use :find to find, and * to make it fuzzy. +" Also make use of :b. + +" Delete trailing white space and newlines at end of file on save. +autocmd BufWritePre * %s/\s\+$//e +autocmd BufWritePre * %s/\n\+\%$//e + +" Easy copy and pasting to external programs +map "+yy +map "+P + +autocmd BufRead,BufNewFile *.md call WritingMode() +autocmd BufRead,BufNewFile *.tex call WritingMode() +autocmd BufRead,BufNewFile *.svx call WritingMode() + +autocmd BufRead,BufNewFile *.py call PythonMode() + +function! WritingMode() + setlocal textwidth=80 + setlocal wrap linebreak nolist + setlocal whichwrap+=<,>,h,l + nnoremap j gj + nnoremap k gk + setlocal spell spelllang=en_us +endfunction +function! PythonMode() + setlocal foldmethod=indent + setlocal foldlevel=99 +endfunction