{ source ? "default", callPackage, lib, stdenv, ncurses, pkg-config, gettext, writeText, config, glib, gtk2-x11, gtk3-x11, lua, python3, perl, tcl, ruby, libX11, libXext, libSM, libXpm, libXt, libXaw, libXau, libXmu, libsodium, libICE, vimPlugins, makeWrapper, wrapGAppsHook3, # apple frameworks CoreServices, CoreData, Cocoa, Foundation, libobjc, features ? "huge", # One of tiny, small, normal, big or huge wrapPythonDrv ? false, guiSupport ? config.vim.gui or (if stdenv.hostPlatform.isDarwin then "gtk2" else "gtk3"), luaSupport ? config.vim.lua or true, perlSupport ? config.vim.perl or false, # Perl interpreter pythonSupport ? config.vim.python or true, # Python interpreter rubySupport ? config.vim.ruby or true, # Ruby interpreter nlsSupport ? config.vim.nls or false, # Enable NLS (gettext()) tclSupport ? config.vim.tcl or false, # Include Tcl interpreter multibyteSupport ? config.vim.multibyte or false, # Enable multibyte editing support cscopeSupport ? config.vim.cscope or true, # Enable cscope interface netbeansSupport ? config.netbeans or true, # Enable NetBeans integration support. ximSupport ? config.vim.xim or true, # less than 15KB, needed for deadkeys darwinSupport ? config.vim.darwin or false, # Enable Darwin support ftNixSupport ? config.vim.ftNix or true, # Add nix indentation support from vim-nix (not needed for basic syntax highlighting) sodiumSupport ? config.vim.sodium or true, # Enable sodium based encryption }: let nixosRuntimepath = writeText "nixos-vimrc" '' set nocompatible syntax on function! NixosPluginPath() let seen = {} for p in reverse(split($NIX_PROFILES)) for d in split(glob(p . '/share/vim-plugins/*')) let pluginname = substitute(d, ".*/", "", "") if !has_key(seen, pluginname) exec 'set runtimepath^='.d let after = d."/after" if isdirectory(after) exec 'set runtimepath^='.after endif let seen[pluginname] = 1 endif endfor endfor endfunction execute NixosPluginPath() if filereadable("/etc/vimrc") source /etc/vimrc elseif filereadable("/etc/vim/vimrc") source /etc/vim/vimrc endif ''; common = callPackage ./common.nix { }; in stdenv.mkDerivation { pname = "vim-full"; inherit (common) version outputs postPatch hardeningDisable enableParallelBuilding meta ; src = builtins.getAttr source { default = common.src; # latest release }; patches = [ ./cflags-prune.diff ]; configureFlags = [ "--with-features=${features}" "--disable-xsmp" # XSMP session management "--disable-xsmp_interact" # XSMP interaction "--disable-workshop" # Sun Visual Workshop support "--disable-sniff" # Sniff interface "--disable-hangulinput" # Hangul input support "--disable-fontset" # X fontset output support "--disable-acl" # ACL support "--disable-gpm" # GPM (Linux mouse daemon) "--disable-mzschemeinterp" "--disable-gtk_check" "--disable-gtk2_check" "--disable-gnome_check" "--disable-motif_check" "--disable-athena_check" "--disable-nextaf_check" "--disable-carbon_check" "--disable-gtktest" ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ "vim_cv_toupper_broken=no" "--with-tlib=ncurses" "vim_cv_terminfo=yes" "vim_cv_tgetent=zero" # it does on native anyway "vim_cv_tty_group=tty" "vim_cv_tty_mode=0660" "vim_cv_getcwd_broken=no" "vim_cv_stat_ignores_slash=yes" "vim_cv_memmove_handles_overlap=yes" ] ++ lib.optional (guiSupport == "gtk2" || guiSupport == "gtk3") "--enable-gui=${guiSupport}" ++ lib.optional stdenv.hostPlatform.isDarwin ( if darwinSupport then "--enable-darwin" else "--disable-darwin" ) ++ lib.optionals luaSupport [ "--with-lua-prefix=${lua}" "--enable-luainterp" ] ++ lib.optionals lua.pkgs.isLuaJIT [ "--with-luajit" ] ++ lib.optionals pythonSupport [ "--enable-python3interp=yes" "--with-python3-config-dir=${python3}/lib" # Disables Python 2 "--disable-pythoninterp" ] ++ lib.optional nlsSupport "--enable-nls" ++ lib.optional perlSupport "--enable-perlinterp" ++ lib.optional rubySupport "--enable-rubyinterp" ++ lib.optional tclSupport "--enable-tclinterp" ++ lib.optional multibyteSupport "--enable-multibyte" ++ lib.optional cscopeSupport "--enable-cscope" ++ lib.optional netbeansSupport "--enable-netbeans" ++ lib.optional ximSupport "--enable-xim" ++ lib.optional sodiumSupport "--enable-sodium"; nativeBuildInputs = [ pkg-config ] ++ lib.optional wrapPythonDrv makeWrapper ++ lib.optional nlsSupport gettext ++ lib.optional perlSupport perl ++ lib.optional (guiSupport == "gtk3") wrapGAppsHook3; buildInputs = [ ncurses glib ] # All X related dependencies ++ lib.optionals (guiSupport == "gtk2" || guiSupport == "gtk3") [ libSM libICE libX11 libXext libXpm libXt libXaw libXau libXmu ] ++ lib.optional (guiSupport == "gtk2") gtk2-x11 ++ lib.optional (guiSupport == "gtk3") gtk3-x11 ++ lib.optionals darwinSupport [ CoreServices CoreData Cocoa Foundation libobjc ] ++ lib.optional luaSupport lua ++ lib.optional pythonSupport python3 ++ lib.optional tclSupport tcl ++ lib.optional rubySupport ruby ++ lib.optional sodiumSupport libsodium; # error: '__declspec' attributes are not enabled; use '-fdeclspec' or '-fms-extensions' to enable support for __declspec attributes env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-fdeclspec"; preConfigure = lib.optionalString ftNixSupport '' cp ${vimPlugins.vim-nix.src}/ftplugin/nix.vim runtime/ftplugin/nix.vim cp ${vimPlugins.vim-nix.src}/indent/nix.vim runtime/indent/nix.vim ''; preInstall = '' mkdir -p $out/share/applications $out/share/icons/{hicolor,locolor}/{16x16,32x32,48x48}/apps ''; postInstall = '' ln -s $out/bin/vim $out/bin/vi '' + lib.optionalString stdenv.hostPlatform.isLinux '' ln -sfn '${nixosRuntimepath}' "$out"/share/vim/vimrc ''; postFixup = common.postFixup + lib.optionalString wrapPythonDrv '' wrapProgram "$out/bin/vim" --prefix PATH : "${python3}/bin" \ --set NIX_PYTHONPATH "${python3}/${python3.sitePackages}" ''; dontStrip = true; }