    buildInputs = [
      python go cmake
    ] ++ stdenv.lib.optional stdenv.isDarwin Cocoa;

    propagatedBuildInputs = stdenv.lib.optional (!stdenv.isDarwin) rustracerd;

    patches = [
      ./patches/youcompleteme/2-ycm-cmake.patch
    ];

    # YCM requires path to external libclang 3.9
    # For explicit use and as env variable for ../third_party/ycmd/build.py
    EXTRA_CMAKE_ARGS="-DEXTERNAL_LIBCLANG_PATH=${llvmPackages.clang.cc}/lib/libclang.${if stdenv.isDarwin then "dylib" else "so"}";

    buildPhase = ''
      patchShebangs .
      substituteInPlace plugin/youcompleteme.vim \
        --replace "'ycm_path_to_python_interpreter', '''" "'ycm_path_to_python_interpreter', '${python}/bin/python'"

      mkdir build
      pushd build
      cmake -G "Unix Makefiles" . ../third_party/ycmd/cpp -DPYTHON_LIBRARIES:PATH=${python}/lib/libpython2.7.so -DPYTHON_INCLUDE_DIR:PATH=${python}/include/python2.7 -DUSE_CLANG_COMPLETER=ON \
        $EXTRA_CMAKE_ARGS
      make ycm_core -j''${NIX_BUILD_CORES} -l''${NIX_BUILD_CORES}}
      ${python}/bin/python ../third_party/ycmd/build.py --gocode-completer --clang-completer
      popd
    '';

    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 = with stdenv.lib.maintainers; [marcweber jagajaga];
      platforms = stdenv.lib.platforms.unix;
    };
