diff --git a/nixvim.nix b/nixvim.nix index e75b5f7a..e37dfe28 100644 --- a/nixvim.nix +++ b/nixvim.nix @@ -35,7 +35,7 @@ in extraPlugins = mkOption { type = with types; listOf (either package pluginWithConfigType); - default = [ ]; + default = []; description = "List of vim plugins to install."; }; diff --git a/plugins/helpers.nix b/plugins/helpers.nix index 989b7bcb..9cc2b725 100644 --- a/plugins/helpers.nix +++ b/plugins/helpers.nix @@ -1,6 +1,30 @@ { lib, ... }: -{ +with lib; +rec { # vim dictionaries are, in theory, compatible with JSON - toVimDict = args: builtins.toJSON - (lib.filterAttrs (n: v: !builtins.isNull v) args); + toVimDict = args: toJSON + (lib.filterAttrs (n: v: !isNull v) args); + + # Black functional magic that converts a bunch of different Nix types to their + # lua equivalents! + toLuaObject = args: + if builtins.isAttrs args then + "{" + (concatStringsSep "," + (mapAttrsToList + (n: v: "[${toLuaObject n}] = " + (toLuaObject v)) + args)) + "}" + else if builtins.isList args then + "{" + concatMapStringsSep "," toLuaObject args + "}" + else if builtins.isString args then + # This should be enough! + escapeShellArg args + else if builtins.isBool args then + "${ boolToString args }" + else if builtins.isFloat args then + "${ toString args }" + else if builtins.isInt args then + "${ toString args }" + else if isNull args then + "nil" + else ""; }