nix-community.nixvim/plugins/helpers.nix

62 lines
1.8 KiB
Nix
Raw Normal View History

{ lib, ... }:
2021-01-02 16:53:38 +00:00
with lib;
rec {
# vim dictionaries are, in theory, compatible with JSON
2021-01-02 16:53:38 +00:00
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))
2021-01-05 11:26:49 +00:00
(filterAttrs (n: v: !isNull v || v == {}) args))) + "}"
2021-01-02 16:53:38 +00:00
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 "";
2021-01-05 16:11:56 +00:00
# Generates maps for a lua config
genMaps = mode: maps: let
normalized = builtins.mapAttrs (key: action:
if builtins.isString action then
{
silent = false;
expr = false;
unique = false;
noremap = true;
script = false;
nowait = false;
action = action;
}
else action) maps;
in builtins.attrValues (builtins.mapAttrs (key: action:
{
action = action.action;
config = lib.filterAttrs (_: v: v) {
inherit (action) silent expr unique noremap script nowait;
};
key = key;
mode = mode;
}) normalized);
# Creates an option with a nullable type that defaults to null.
nullOrOption = type: desc: lib.mkOption {
type = lib.types.nullOr type;
default = null;
description = desc;
};
}