mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-30 01:20:40 +00:00
macvim: add configuration similar to vim_configurable and neovim
vim_configurable and neovim have both supported a mechanism to build them with a custom vimrc that supports plugins from Nix. This updates MacVim to support the same sort of configuration using an expression like macvim.configure { customRC = '' # custom configuration goes here ''; packages.myVimPackage = with pkgs.vimPlugins; { start = [ youcompleteme fugitive ]; opt = [ phpCompletion elm-vim ]; } } Once configured, .override will allow for editing the configuration. Like vim_configurable and neovim, configuring macvim does not require rebuilding it. Also like them, configuring macvim turns off the user vimrc file.
This commit is contained in:
parent
76dbece8e8
commit
72e3217bf1
67
pkgs/applications/editors/vim/macvim-configurable.nix
Normal file
67
pkgs/applications/editors/vim/macvim-configurable.nix
Normal file
|
@ -0,0 +1,67 @@
|
|||
{ stdenv, callPackage, vimUtils, buildEnv, makeWrapper }:
|
||||
|
||||
let
|
||||
macvim = callPackage ./macvim.nix { inherit stdenv; };
|
||||
|
||||
makeCustomizable = macvim: macvim // {
|
||||
# configure expects the same args as vimUtils.vimrcFile.
|
||||
# This is the same as the value given to neovim.override { configure = … }
|
||||
# or the value of vim_configurable.customize { vimrcConfig = … }
|
||||
#
|
||||
# Note: Like neovim and vim_configurable, configuring macvim disables the
|
||||
# sourcing of the user's vimrc. Use `customRC = "source $HOME/.vim/vimrc"`
|
||||
# if you want to preserve that behavior.
|
||||
configure = let
|
||||
inherit (stdenv) lib;
|
||||
doConfig = config: let
|
||||
vimrcConfig = config // {
|
||||
# always source the bundled system vimrc
|
||||
beforePlugins = ''
|
||||
source $VIM/vimrc
|
||||
${config.beforePlugins or ""}
|
||||
'';
|
||||
};
|
||||
in buildEnv {
|
||||
name = macvim.name;
|
||||
paths = [ macvim ];
|
||||
pathsToLink = [
|
||||
"/"
|
||||
"/bin"
|
||||
"/Applications/MacVim.app/Contents/MacOS"
|
||||
"/Applications/MacVim.app/Contents/bin"
|
||||
];
|
||||
buildInputs = [ makeWrapper ];
|
||||
# We need to do surgery on the resulting app. We can't just make a wrapper for vim because this
|
||||
# is a GUI app. We need to copy the actual GUI executable image as AppKit uses the loaded image's
|
||||
# path to locate the bundle. We can use symlinks for other executables and resources though.
|
||||
postBuild = ''
|
||||
# Replace the Contents/MacOS/MacVim symlink with the original file
|
||||
target=$(readlink $out/Applications/MacVim.app/Contents/MacOS/MacVim)
|
||||
rm $out/Applications/MacVim.app/Contents/MacOS/MacVim
|
||||
cp -a -t $out/Applications/MacVim.app/Contents/MacOS "$target"
|
||||
|
||||
# Wrap the Vim binary for our vimrc
|
||||
wrapProgram $out/Applications/MacVim.app/Contents/MacOS/Vim \
|
||||
--add-flags "-u ${vimUtils.vimrcFile vimrcConfig}"
|
||||
|
||||
# Replace each symlink in bin/ with the original. Most of them point at other symlinks
|
||||
# and we need those original symlinks to point into our new app bundle.
|
||||
for prefix in bin Applications/MacVim.app/Contents/bin; do
|
||||
for link in $out/$prefix/*; do
|
||||
target=$(readlink "$link")
|
||||
# don't copy binaries like vimtutor, but we do need mvim
|
||||
[ -L "$target" ] || [ "$(basename "$target")" = mvim ] || continue;
|
||||
rm "$link"
|
||||
cp -a -t $out/$prefix "$target"
|
||||
done
|
||||
done
|
||||
'';
|
||||
meta = macvim.meta;
|
||||
};
|
||||
in lib.makeOverridable (lib.setFunctionArgs doConfig (lib.functionArgs vimUtils.vimrcFile));
|
||||
|
||||
override = f: makeCustomizable (macvim.override f);
|
||||
overrideAttrs = f: makeCustomizable (macvim.overrideAttrs f);
|
||||
};
|
||||
in
|
||||
makeCustomizable macvim
|
|
@ -23812,7 +23812,7 @@ in
|
|||
|
||||
vimiv = callPackage ../applications/graphics/vimiv { };
|
||||
|
||||
macvim = callPackage ../applications/editors/vim/macvim.nix { stdenv = clangStdenv; };
|
||||
macvim = callPackage ../applications/editors/vim/macvim-configurable.nix { stdenv = clangStdenv; };
|
||||
|
||||
vimHugeX = vim_configurable;
|
||||
|
||||
|
|
Loading…
Reference in a new issue