{pkgs, ...}: { environment.variables = {EDITOR = "vim";}; environment.systemPackages = with pkgs; [ # Add python packages required by NeoVim in NixOS (python3.withPackages (ps: [ ps.pygments ])) (neovim.override { vimAlias = true; configure = { packages.myPlugins = with pkgs.vimPlugins; { start = [ deoplete-nvim # an extensible and asynchronous completion framework formatter-nvim # A format runner for neovim fugitive # Vim Git wrapper fzf-vim # Full path fuzzy file, buffer, mru, tag, finder for Vim #haskell-vim # Syntax Highlighting and Indentation for Haskell indentLine # Display thin vertical lines at each indentation level lualine-nvim YouCompleteMe # A code-completion engine for Vim neomake # asynchronously run programs like vim-terraform nerdcommenter # Comment functions so powerful—no comment necessary nerdtree # File system explorer nerdtree-git-plugin # Plugin for nerdtree showing git status nvim-treesitter # configurations and abstraction layer for Neovim. onedarkpro-nvim # Dark and light themes for Neovim supertab # Allows you to use for all your insert completion syntastic # Syntax checking hacks vim-terraform # tab completion, syntax highlighting, indentation vim-terraform-completion vim-cue # Cue filetype plugin for Vim vim-lastplace vim-markdown-toc # Generate table of contents for Markdown files vim-nix # Support for writing Nix expressions in vim vim-numbertoggle # Toggle between relative / absolute line numbers automatically vim-one ]; opt = []; }; # Write a custom Neovim config for NixOS customRC = '' " Preferred global default settings: set mouse= " disable mouse input set nocompatible set backspace=indent,eol,start set number relativenumber " Enable relative line numbers by default set cursorline " Highlight the current line number set smartindent " Automatically insert extra level of indentation set tabstop=4 " Default tabstop set shiftwidth=4 " Default indent spacing set expandtab " Expand [TABS] to spaces syntax on " Enable syntax highlighting set t_Co=256 " Use 265 colors in vim set background=dark " Set the default background scheme colorscheme onedark " Set the default colour scheme "let g:one_allow_italics = 1 " I love italic for comments set spell spelllang=en_au " Defaul spell checking language set spellfile=~/.vim-spell.en.utf-8.add " Add the spellfile hi clear SpellBad " Clear any unwanted default settings hi SpellBad cterm=underline " Set the spell checking highlight style hi SpellBad ctermbg=NONE " Set the spell checking highlight background match ErrorMsg '\s\+$' " nnoremap :Files nnoremap f :Rg set grepprg=rg\ --vimgrep\ --smart-case\ --follow "call togglebg#map("") " Toggle background colour between dark|light set laststatus=2 " Set up the status line so it's coloured and always on " Removes trailing spaces: function! TrimWhiteSpace() %s/\s\+$//e endfunction " Trigger for numbertoggle to switch modes nnoremap :set relativenumber! " Tab settings let g:SuperTabDefaultCompletionType = 'context' let g:SuperTabContextTextOmniPrecedence = ['&omnifunc','&completefunc'] let g:SuperTabRetainCompletionType=2 inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" nnoremap RemoveTrailingWhiteSpace :call TrimWhiteSpace() autocmd FileWritePre * :call TrimWhiteSpace() autocmd FileAppendPre * :call TrimWhiteSpace() autocmd FilterWritePre * :call TrimWhiteSpace() autocmd BufWritePre * :call TrimWhiteSpace() augroup FormatAutogroup autocmd! autocmd BufWritePost * silent! FormatWrite augroup END " FIXME: Currently always set to dark due to issues with Termonad Solarized theme " Light during the day, dark during the night let hour = strftime("%H") if 7 <= hour && hour < 17 "set background=dark hi Normal guibg=NONE ctermbg=NONE " Set a transparent background hi NormalNC guibg=NONE ctermbg=NONE " Set a transparent background else "set background=dark hi Normal guibg=NONE ctermbg=NONE " Set a transparent background hi NormalNC guibg=NONE ctermbg=NONE " Set a transparent background endif " Transparent editing of gpg encrypted files. " By Wouter Hanegraaff augroup encrypted au! " First make sure nothing is written to ~/.viminfo while editing an encrypted file. autocmd BufReadPre,FileReadPre *.gpg set viminfo= " We don't want a swap file, as it writes unencrypted data to disk autocmd BufReadPre,FileReadPre *.gpg set noswapfile " Switch to binary mode to read the encrypted file autocmd BufReadPre,FileReadPre *.gpg set bin autocmd BufReadPre,FileReadPre *.gpg let ch_save = &ch|set ch=2 autocmd BufReadPost,FileReadPost *.gpg '[,']!gpg --decrypt 2> /dev/null " Switch to normal mode for editing autocmd BufReadPost,FileReadPost *.gpg set nobin autocmd BufReadPost,FileReadPost *.gpg let &ch = ch_save|unlet ch_save autocmd BufReadPost,FileReadPost *.gpg execute ":doautocmd BufReadPost " . expand("%:r") " Convert all text to encrypted text before writing autocmd BufWritePre,FileWritePre *.gpg '[,']!gpg --default-key=7E66C3B5CDE94A4A --default-recipient-self -ae 2>/dev/null " Undo the encryption so we are back in the normal text, directly " after the file has been written. autocmd BufWritePost,FileWritePost *.gpg u augroup END " Manage ISO files augroup iso au! " First make sure nothing is written to ~/.viminfo while editing an encrypted file. autocmd BufReadPre,FileReadPre *.iso set viminfo= " We don't want a swap file, as it writes unencrypted data to disk autocmd BufReadPre,FileReadPre *.iso set noswapfile " Switch to binary mode to read the encrypted file autocmd BufReadPre,FileReadPre *.iso set bin autocmd BufReadPre,FileReadPre *.iso let ch_save = &ch|set ch=2 autocmd BufReadPost,FileReadPost *.iso '[,']!gpg --decrypt 2> /dev/null " Switch to normal mode for editing autocmd BufReadPost,FileReadPost *.iso set nobin autocmd BufReadPost,FileReadPost *.iso let &ch = ch_save|unlet ch_save autocmd BufReadPost,FileReadPost *.iso execute ":doautocmd BufReadPost " . expand("%:r") " Convert all text to encrypted text before writing autocmd BufWritePre,FileWritePre *.iso '[,']!gpg --default-key=A4122FF3971B6865 --default-recipient-self -ae 2>/dev/null " Undo the encryption so we are back in the normal text, directly " after the file has been written. autocmd BufWritePost,FileWritePost *.iso u augroup END " Use persistent history. if !isdirectory("/tmp/.vim-undo-dir") call mkdir("/tmp/.vim-undo-dir", "", 0700) endif set undodir=/tmp/.vim-undo-dir set undofile " My Markdown environment function! MarkdownSettings() set textwidth=79 set spell spelllang=en_au endfunction autocmd BufNewFile,BufFilePre,BufRead *.mdwn :call MarkdownSettings() autocmd BufNewFile,BufFilePre,BufRead *.md :call MarkdownSettings() " My ReStructured Text environment function! ReStructuredSettings() set textwidth=79 set spell spelllang=en_au hi clear SpellBad " Clear any unwanted default settings hi SpellBad cterm=underline " Set the spell checking highlight style hi SpellBad ctermbg=NONE " Set the spell checking highlight background endfunction autocmd BufNewFile,BufFilePre,BufRead *.rst :call ReStructuredSettings() autocmd BufNewFile,BufFilePre,BufRead *.txt :call ReStructuredSettings() " My LaTeX environment: function! LaTeXSettings() set textwidth=79 set spell spelllang=en_au endfunction autocmd BufNewFile,BufFilePre,BufRead *.tex :call LaTeXSettings() " Settings for my Haskell environment: function! HaskellSettings() set tabstop=2 set shiftwidth=2 set expandtab set textwidth=79 "let g:haskell_enable_quantification = 1 " to enable highlighting of `forall` "let g:haskell_enable_recursivedo = 1 " to enable highlighting of `mdo` and `rec` "let g:haskell_enable_arrowsyntax = 1 " to enable highlighting of `proc` "let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern` "let g:haskell_enable_typeroles = 1 " to enable highlighting of type roles "let g:haskell_enable_static_pointers = 1 " to enable highlighting of `static` "let g:haskell_backpack = 1 endfunction autocmd BufNewFile,BufFilePre,BufRead *.hs :call HaskellSettings() " Settings for my Nix environment: function! NixSettings() set tabstop=2 set shiftwidth=2 set expandtab set textwidth=79 set filetype=nix endfunction autocmd BufNewFile,BufFilePre,BufRead *.nix :call NixSettings() " Settings for my Cue environment: function! CueSettings() set noexpandtab set tabstop=2 set shiftwidth=2 set textwidth=79 let g:cue_fmt_on_save = 1 endfunction autocmd BufNewFile,BufFilePre,BufRead *.cue :call CueSettings() " Settings for my Rust environment: function! RustSettings() set tabstop=4 set shiftwidth=4 set expandtab set textwidth=79 let g:rustfmt_autosave = 1 endfunction autocmd BufNewFile,BufFilePre,BufRead *.rs :call RustSettings() " Settings for my Crystal environment: function! CrystalSettings() set tabstop=2 set shiftwidth=2 set expandtab set textwidth=79 set filetype=crystal endfunction autocmd BufNewFile,BufFilePre,BufRead *.cr :call CrystalSettings() " Settings for my Golang environment: function! GoSettings() set tabstop=7 set shiftwidth=7 set noexpandtab endfunction autocmd BufNewFile,BufFilePre,BufRead *.go :call GoSettings() " Settings for my Python environment: function! PythonSettings() set tabstop=4 set shiftwidth=4 set expandtab set textwidth=79 set spell! endfunction autocmd BufNewFile,BufFilePre,BufRead *.py :call PythonSettings() " My Mutt environment function! MuttSettings() set textwidth=79 set spell spelllang=en_au hi clear SpellBad " Clear any unwanted default settings hi SpellBad cterm=underline " Set the spell checking highlight style hi SpellBad ctermbg=NONE " Set the spell checking highlight background endfunction autocmd BufNewFile,BufFilePre,BufRead mutt-* :call MuttSettings() autocmd BufNewFile,BufFilePre,BufRead neomutt-* :call MuttSettings() " Settings for my C environment: function! CSettings() set tabstop=2 set shiftwidth=2 set expandtab set textwidth=79 endfunction autocmd BufNewFile,BufFilePre,BufRead *.c :call CSettings() " Settings for my YAML environment: function! YAMLSettings() set tabstop=2 set shiftwidth=2 set expandtab set textwidth=79 set spell spelllang=en_au hi clear SpellBad " Clear any unwanted default settings hi SpellBad cterm=underline " Set the spell checking highlight style hi SpellBad ctermbg=NONE " Set the spell checking highlight background endfunction autocmd BufNewFile,BufFilePre,BufRead *.yaml :call YAMLSettings() autocmd BufNewFile,BufFilePre,BufRead *.yml :call YAMLSettings() " Settings for my Bash environment: function! BashSettings() set tabstop=4 set shiftwidth=4 set expandtab set textwidth=79 set spell! endfunction autocmd BufNewFile,BufFilePre,BufRead *.sh :call BashSettings() lua <