mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 16:39:00 +02:00
54 lines
1.6 KiB
Nix
54 lines
1.6 KiB
Nix
{ lib, ... }:
|
|
with lib;
|
|
rec {
|
|
# vim dictionaries are, in theory, compatible with JSON
|
|
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))
|
|
(filterAttrs (n: v: !isNull v || 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 "";
|
|
|
|
# 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);
|
|
}
|