{ pkgs, ... }: { environment.variables = { EDITOR = "vim"; }; environment.systemPackages = with pkgs; [ (neovim.override { vimAlias = true; configure = { packages.myPlugins = with pkgs.vimPlugins; { start = [ airline # Lean & mean status/tabline for vim that's light as air dracula-vim # Dracula theme for vim 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 neocomplete-vim # Keyword completion system nerdcommenter # Comment functions so powerful—no comment necessary nerdtree # File system explorer nerdtree-git-plugin # Plugin for nerdtree showing git status #statix # Lints and suggestions for the nix programming language supertab # Allows you to use for all your insert completion syntastic # Syntax checking hacks vim-addon-nix # Scripts assisting writing .nix files 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 = [ ]; }; customRC = '' " Preferred global default settings: 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 packadd! dracula-vim syntax on " Enable syntax highlighting set t_Co=256 " Use 265 colors in vim set background=dark " Set the default background scheme colorscheme dracula " 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 let g:airline_powerline_fonts = 1 " Use powerline fonts let g:airline_theme='dracula' " Set the airline theme "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 ctermbg=none " Set a transparent background "let g:airline_solarized_bg='dark' " Set the airline background else "set background=dark "hi Normal ctermbg=none " Set a transparent background "let g:airline_solarized_bg='dark' " Set the airline 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 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 <