diff options
author | Marc Weber <marco-oweber@gmx.de> | 2013-05-27 18:29:35 +0200 |
---|---|---|
committer | Marc Weber <marco-oweber@gmx.de> | 2013-05-27 22:26:29 +0200 |
commit | 71628d6e356636cef794c6f2fe680cb31f4cab64 (patch) | |
tree | b2b353a13f94415a1783adca76f962d8ce7e7787 /pkgs/misc | |
parent | a22f94b4f27ebfe5142eff7da60b1c5e2e557880 (diff) | |
download | nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.gz nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.bz2 nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.lz nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.xz nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.zst nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.zip |
vim: supporting multiple sources:
- vim-nox: client-server implementation without X - latest: latest mercurial sources (still very stable) - default: latest release vim-plugins: Introduce an area to put vim plugins which are worth adding to nix because they need more effort than just "unpacking". Document that
Diffstat (limited to 'pkgs/misc')
-rw-r--r-- | pkgs/misc/vim-plugins/default.nix | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/pkgs/misc/vim-plugins/default.nix b/pkgs/misc/vim-plugins/default.nix new file mode 100644 index 000000000000..b0c70d958217 --- /dev/null +++ b/pkgs/misc/vim-plugins/default.nix @@ -0,0 +1,129 @@ +{fetchurl, stdenv, python, cmake, vim}: + +/* +About Vim and plugins +===================== +Let me tell you how Vim plugins work, so that you can decide on how to orginize +your setup. + +typical plugin files: + + plugin/P1.vim + autoload/P1.vim + ftplugin/xyz.vim + doc/plugin-documentation.txt + README(.md) (nowadays thanks to github) + +Traditionally plugins were installed into ~/.vim/* so it was your task to keep track +of which files belong to what plugin. Now this problem is "fixed" by nix which +assembles your profile for you. + + +Vim offers the :h rtp setting which works for most plugins. Thus adding adding +this to your .vimrc should make most plugins work: + + set rtp+=~/.nix-profile/vim-plugins/YouCompleteMe + " or for p in ["YouCompleteMe"] | exec 'set rtp+=~/.nix-profile/vim-plugins/'.p | endfor + +Its what +pathogen, vundle, vim-addon-manager (VAM) use. + +VAM's benefits: +- works around after/* directories if they are used in non ~/.vim locations +- allows activating plugins at runtime, eg when you need them. (works around + some au command hooks, eg required for TheNerdTree plugin) +- VAM checkous out all sources (vim.sf.net, git, mercurial, ...) +- runs :helptags on update/installation only. Obviously it cannot do that on + store paths. + +VAM is made up of +- the code loading plugins +- an optional pool (github.com/MarcWeber/vim-addon-manager-known-repositories) + +That pool probably is the best source to automatically derive plugin +information from or to lookup about how to get data from www.vim.org. + +I'm not sure we should package them all. Most of them are not used much. +You need your .vimrc anyway, and then VAM gets the job done ? + +How to install VAM? eg provide such a bash function: + + vim-install-vam () { + mkdir -p ~/.vim/vim-addons && git clone --depth=1 git://github.com/MarcWeber/vim-addon-manager.git ~/.vim/vim-addons/vim-addon-manager && cat >> ~/.vimrc <<EOF + set nocompatible + set hidden + filetype indent plugin on | syn on + fun ActivateAddons() + let g:vim_addon_manager = {} + let g:vim_addon_manager.log_to_buf =1 + set runtimepath+=~/.vim/vim-addons/vim-addon-manager + call vam#ActivateAddons([]) + endf + call ActivateAddons() + EOF + } + +IMHO having no plugins listed might be better than having outdated ones. + +So which plugins to add here according to what Marc Weber thinks is best? +complicated plugins requiring dependencies, such as YouCompleteMe. +Then its best to symlink ~/.nix-profile/vim-plugins/YouCompleteMe to +~/.vim/{vim-addons,bundle} or whatever plugin management solution you use. + +If you feel differently change the comments and proceed. +*/ + +let vimHelptags = path: '' + ${vim}/bin/vim -N -u NONE -i NONE -n -e -s -c "helptags ${path}" +quit! +''; + +in + +{ + + #TODO :helptags should be run + + vimAddonNix = { + # github.com/MarcWeber/vim-addon-nix provides some additional support for + # editing .nix files + + # This is a placeholder, because I think you always should be using latest git version + }; + + YouCompleteMe = stdenv.mkDerivation { + # REGION AUTO UPDATE: { name="youcompleteme"; type="git"; url="git://github.com/Valloric/YouCompleteMe"; } + src = (fetchurl { url = "http://mawercer.de/~nix/repos/youcompleteme-git-97306.tar.bz2"; sha256 = "b9b892f5a723370c2034491dc72a4ca722c6cf1e5de4d60501141bba151bc719"; }); + name = "youcompleteme-git-97306"; + # END + buildInputs = [ python cmake ]; + + configurePhase = ":"; + + buildPhase = '' + set -x + target=$out/vim-plugins/YouCompleteMe + mkdir -p $target + cp -a ./ $target + + mkdir $target/build + cd $target/build + cmake -G "Unix Makefiles" . $target/cpp -DPYTHON_LIBRARIES:PATH=${python}/lib/libpython2.7.so -DPYTHON_INCLUDE_DIR:PATH=${python}/include/python2.7 + make -j -j''${NIX_BUILD_CORES} -l''${NIX_BUILD_CORES}} + + ${vimHelptags "$out/vim-plugins/YouCompleteMe/doc"} + ''; + + # TODO: implement proper install phase rather than keeping everything in store + # TODO: support llvm based C completion, See README of git repository + installPhase = ":"; + + meta = { + description = "fastest non utf-8 aware word and C completion engine for Vim"; + homepage = http://github.com/Valloric/YouCompleteMe; + license = stdenv.lib.licenses.gpl3; + maintainers = [stdenv.lib.maintainers.marcweber]; + platforms = stdenv.lib.platforms.linux; + }; + }; + +} |