diff --git a/hosts/dionach.nix b/hosts/dionach.nix index e5bf8a1..4eb53df 100644 --- a/hosts/dionach.nix +++ b/hosts/dionach.nix @@ -148,9 +148,6 @@ zip # zip all the zip's zlib zlib.dev - ( - import ../profiles/vim.nix - ) ]; environment.variables = { diff --git a/profiles/host_common.nix b/profiles/host_common.nix index 5933cf5..1453d91 100644 --- a/profiles/host_common.nix +++ b/profiles/host_common.nix @@ -6,6 +6,7 @@ imports = [ ./chrony.nix + ../profiles/neovim.nix ../profiles/logrotate.nix ./tmux.nix ./zsh.nix @@ -94,13 +95,7 @@ ncdu # Disk usage analyzer with an ncurses interface nix-index # A files database for nixpkgs ripgrep # Utility that provides usability of The Silver Searcher with the raw speed of grep - ( - import ../profiles/vim.nix - ) ]; - variables = { - EDITOR = [ "vim"]; # Set the default editor - }; }; # Users common across MIO Ops: diff --git a/profiles/neovim.nix b/profiles/neovim.nix new file mode 100644 index 0000000..657cc05 --- /dev/null +++ b/profiles/neovim.nix @@ -0,0 +1,284 @@ +{ 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 + ctrlp # 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 + supertab # Allows you to use for all your insert completion + syntastic # Syntax checking hacks + vim-addon-nix # Scripts assisting writing .nix files + vim-autoformat # Automatically format code + vim-colorschemes # Collection of ViM colour schemes + vim-cue # Cue filetype plugin for Vim + vim-lastplace + 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 + syntax on " Enable syntax highlighting + set t_Co=256 " Use 265 colors in vim + colorscheme one " Set the default colour scheme + set background=light " Set the default background 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\+$' " + + let g:airline_powerline_fonts = 1 " Use powerline fonts + let g:airline_theme='one' " 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! + + nnoremap RemoveTrailingWhiteSpace :call TrimWhiteSpace() + autocmd FileWritePre * :call TrimWhiteSpace() + autocmd FileAppendPre * :call TrimWhiteSpace() + autocmd FilterWritePre * :call TrimWhiteSpace() + autocmd BufWritePre * :call TrimWhiteSpace() + "autocmd BufWrite * :Autoformat + + " 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=light + "hi Normal ctermbg=none " Set a transparent background + "let g:airline_solarized_bg='dark' " Set the airline background + else + set background=light + "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=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 *.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 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() + ''; + }; + } + )]; +}