diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..afe99db --- /dev/null +++ b/shell.nix @@ -0,0 +1,151 @@ +let + nixpkgs = import {}; + pkgsSrc = nixpkgs.pkgs.fetchFromGitHub { + owner = "nixos"; + repo = "nixpkgs-channels"; + rev = "b0d07aa894007a52466b06eced06c1eee469ee1c"; + sha256 = "0cnwy3ivjz8z8jd5vvx4m5v76vzwq9hh7vh6gah83x47ggipk7ii"; + }; + pkgs = import pkgsSrc {}; + + mytexlive = (pkgs.texlive.combine { + inherit (pkgs.texlive) scheme-full; + }); + +in pkgs.stdenv.mkDerivation { + name = "msc-thesis"; + shellHook = '' + alias vim-thesis="vim -p --servername VIM -- \ + $PWD/src/docs/thesis.tex \ + $PWD/src/docs/glossary.tex \ + $PWD/src/docs/parts/context/context.tex \ + $PWD/src/docs/parts/research/research.tex \ + " + ''; + buildInputs = [ + pkgs.xdotool + (pkgs.vim_configurable.customize { + name = "vim"; + vimrcConfig = { + # add custom .vimrc lines like this: + customRC = '' + set nocompatible + + " leader + let mapleader = ',' + + set hidden + syntax on + set hlsearch + set number + + " mappings to stop insert mode + imap jjj + imap kkk + imap lll + imap hhh + set scroll=11 + + noremap :tabn + noremap :tabp + let g:ctrlp_map = '' + let g:ctrlp_custom_ignore = { + \ 'dir': '\v[\/]\.(git|hg|svn|)$$', + \ 'file': '\v\.(exe|so|dll|so|swp|zip|aux|log|fdb_latexmk|fdb|dvi|lof|lot|pdf|fls|toc|gz|latexmain)$$', + \ } + + " allways show status line + set ls=2 + set tabstop=4 + set shiftwidth=4 + set softtabstop=4 + set expandtab + "set textwidth=80 + + " sync default register to clipboard { + if has('unnamedplus') + set clipboard=unnamedplus + else + set clipboard=unnamed + endif + " } + + " colored brackets { + let g:rbpt_colorpairs = [ + \ ['brown', 'RoyalBlue3'], + \ ['Darkblue', 'SeaGreen3'], + \ ['darkgray', 'DarkOrchid3'], + \ ['darkgreen', 'firebrick3'], + \ ['darkcyan', 'RoyalBlue3'], + \ ['darkred', 'SeaGreen3'], + \ ['darkmagenta', 'DarkOrchid3'], + \ ['brown', 'firebrick3'], + \ ['gray', 'RoyalBlue3'], + \ ['black', 'SeaGreen3'], + \ ['darkmagenta', 'DarkOrchid3'], + \ ['Darkblue', 'firebrick3'], + \ ['darkgreen', 'RoyalBlue3'], + \ ['darkcyan', 'SeaGreen3'], + \ ['darkred', 'DarkOrchid3'], + \ ['red', 'firebrick3'], + \ ] + let g:rbpt_max = 16 + let g:rbpt_loadcmd_toggle = 0 + + au VimEnter * RainbowParenthesesToggle + au Syntax * RainbowParenthesesLoadRound + au Syntax * RainbowParenthesesLoadSquare + au Syntax * RainbowParenthesesLoadBraces + " } + set backspace=indent,eol,start + colorscheme PaperColor + + " Latex Related {{{ + au BufRead,BufNewFile *.tex,*.md,*.markdown setlocal spell spelllang=en_us + + let g:vimtex_view_method = 'zathura' + + let g:vimtex_complete_enabled = 1 + let g:vimtex_complete_close_braces = 1 + let g:vimtex_complete_recursive_bib = 1 + let g:vimtex_indent_enabled = 1 + let g:vimtex_indent_bib_enabled = 1 + + if !exists('g:ycm_semantic_triggers') + let g:ycm_semantic_triggers = {} + endif + let g:ycm_semantic_triggers.tex = [ + \ 're!\\[A-Za-z]*cite[A-Za-z]*(\[[^]]*\]){0,2}{[^}]*', + \ 're!\\[A-Za-z]*ref({[^}]*|range{([^,{}]*(}{)?))', + \ 're!\\hyperref\[[^]]*', + \ 're!\\includegraphics\*?(\[[^]]*\]){0,2}{[^}]*', + \ 're!\\(include(only)?|input){[^}]*', + \ 're!\\\a*(gls|Gls|GLS)(pl)?\a*(\s*\[[^]]*\]){0,2}\s*\{[^}]*', + \ 're!\\includepdf(\s*\[[^]]*\])?\s*\{[^}]*', + \ 're!\\includestandalone(\s*\[[^]]*\])?\s*\{[^}]*', + \ ] + + function! ViewerCallback() dict + call self.forward_search(self.out) + endfunction + let g:vimtex_view_zathura_hook_callback = 'ViewerCallback' + " }}} + ''; + + vam.knownPlugins = pkgs.vimPlugins; + vam.pluginDictionaries = [ + "youcompleteme" + "vim-airline" + "ctrlp" + "vim-css-color" + "rainbow_parentheses" + "vim-colorschemes" + "vim-signify" + "vimtex" + ]; + }; + }) + mytexlive + pkgs.zathura + ]; +}