From 9d775bad0717d9a1fad749edabf3b37fcaa94bf3 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Thu, 10 Dec 2020 22:30:16 +0100 Subject: [PATCH] neovim: mark plugins as optional (possibly) (#1559) can be loaded with packadd! --- modules/programs/neovim.nix | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/modules/programs/neovim.nix b/modules/programs/neovim.nix index c0ee24cf1..4752100ea 100644 --- a/modules/programs/neovim.nix +++ b/modules/programs/neovim.nix @@ -24,15 +24,20 @@ let pluginWithConfigType = types.submodule { options = { - plugin = mkOption { - type = types.package; - description = "vim plugin"; - }; config = mkOption { type = types.lines; description = "vimscript for this plugin to be placed in init.vim"; default = ""; }; + + optional = mkEnableOption "optional" // { + description = "Don't load by default (load with :packadd)"; + }; + + plugin = mkOption { + type = types.package; + description = "vim plugin"; + }; }; }; @@ -49,8 +54,15 @@ let || (lib.filter (hasAttr "config") cfg.plugins) != [ ]) { customRC = cfg.extraConfig + pkgs.lib.concatMapStrings pluginConfig cfg.plugins; - } // optionalAttrs (cfg.plugins != [ ]) { - packages.home-manager.start = map (x: x.plugin or x) cfg.plugins; + + packages.home-manager = { + start = filter (f: f != null) (map (x: + if x ? plugin && x.optional == true then null else (x.plugin or x)) + cfg.plugins); + opt = filter (f: f != null) + (map (x: if x ? plugin && x.optional == true then x.plugin else null) + cfg.plugins); + }; }; extraMakeWrapperArgs = lib.optionalString (cfg.extraPackages != [ ]) ''--prefix PATH : "${lib.makeBinPath cfg.extraPackages}"'';