lib/binds: improve code, adjust functions to new api

This commit is contained in:
diniamo 2024-08-10 15:06:06 +02:00
parent 75cb9bced7
commit 6cb57e1d26

View file

@ -4,69 +4,68 @@
inherit (lib.types) nullOr str; inherit (lib.types) nullOr str;
inherit (lib.attrsets) isAttrs mapAttrs; inherit (lib.attrsets) isAttrs mapAttrs;
binds = rec { mkLuaBinding = mode: key: action: desc:
mkLuaBinding = key: action: desc: mkIf (key != null) {
mkIf (key != null) { ${key} = {
"${key}" = { inherit mode action desc;
inherit action desc; lua = true;
lua = true; silent = true;
silent = true; };
};
mkExprBinding = mode: key: action: desc:
mkIf (key != null) {
${key} = {
inherit mode action desc;
lua = true;
silent = true;
expr = true;
};
};
mkBinding = mode: key: action: desc:
mkIf (key != null) {
${key} = {
inherit mode action desc;
silent = true;
};
};
mkMappingOption = description: default:
mkOption {
type = nullOr str;
inherit default description;
};
# Utility function that takes two attrsets:
# { someKey = "some_value" } and
# { someKey = { description = "Some Description"; }; }
# and merges them into
# { someKey = { value = "some_value"; description = "Some Description"; }; }
addDescriptionsToMappings = actualMappings: mappingDefinitions:
mapAttrs (name: value: let
isNested = isAttrs value;
returnedValue =
if isNested
then addDescriptionsToMappings actualMappings.${name} mappingDefinitions.${name}
else {
inherit value;
inherit (mappingDefinitions.${name}) description;
}; };
}; in
returnedValue)
actualMappings;
mkExprBinding = key: action: desc: mkSetBinding = mode: binding: action:
mkIf (key != null) { mkBinding mode binding.value action binding.description;
"${key}" = {
inherit action desc;
lua = true;
silent = true;
expr = true;
};
};
mkBinding = key: action: desc: mkSetExprBinding = mode: binding: action:
mkIf (key != null) { mkExprBinding mode binding.value action binding.description;
"${key}" = {
inherit action desc;
silent = true;
};
};
mkMappingOption = description: default: mkSetLuaBinding = mode: binding: action:
mkOption { mkLuaBinding mode binding.value action binding.description;
type = nullOr str;
inherit default description;
};
# Utility function that takes two attrsets: pushDownDefault = attr: mapAttrs (_: mkDefault) attr;
# { someKey = "some_value" } and in {
# { someKey = { description = "Some Description"; }; } inherit mkLuaBinding mkExprBinding mkBinding mkMappingOption addDescriptionsToMappings mkSetBinding mkSetExprBinding mkSetLuaBinding pushDownDefault;
# and merges them into }
# { someKey = { value = "some_value"; description = "Some Description"; }; }
addDescriptionsToMappings = actualMappings: mappingDefinitions:
mapAttrs (name: value: let
isNested = isAttrs value;
returnedValue =
if isNested
then addDescriptionsToMappings actualMappings."${name}" mappingDefinitions."${name}"
else {
inherit value;
inherit (mappingDefinitions."${name}") description;
};
in
returnedValue)
actualMappings;
mkSetBinding = binding: action:
mkBinding binding.value action binding.description;
mkSetExprBinding = binding: action:
mkExprBinding binding.value action binding.description;
mkSetLuaBinding = binding: action:
mkLuaBinding binding.value action binding.description;
pushDownDefault = attr: mapAttrs (_: mkDefault) attr;
};
in
binds