lib: start moving top-level binds to binds

This commit is contained in:
NotAShelf 2024-02-26 07:28:07 +03:00
parent 460ba8c7b6
commit bf1118eb28
No known key found for this signature in database
GPG key ID: 02D1DD3FA08B6B29
3 changed files with 74 additions and 2 deletions

70
lib/binds.nix Normal file
View file

@ -0,0 +1,70 @@
{lib}: let
inherit (lib.options) mkOption;
inherit (lib.modules) mkIf;
inherit (lib.types) nullOr str;
inherit (lib.attrsets) isAttrs mapAttrs;
binds = rec {
mkLuaBinding = key: action: desc:
mkIf (key != null) {
"${key}" = {
inherit action desc;
lua = true;
silent = true;
};
};
mkExprBinding = key: action: desc:
mkIf (key != null) {
"${key}" = {
inherit action desc;
lua = true;
silent = true;
expr = true;
};
};
mkBinding = key: action: desc:
mkIf (key != null) {
"${key}" = {
inherit 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;
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;
};
in
binds

View file

@ -1,6 +1,8 @@
{lib}: { {lib}: {
dag = import ./dag.nix {inherit lib;};
types = import ./types {inherit lib;}; types = import ./types {inherit lib;};
binds = import ./binds.nix {inherit lib;};
dag = import ./dag.nix {inherit lib;};
languages = import ./languages.nix {inherit lib;}; languages = import ./languages.nix {inherit lib;};
lua = import ./lua.nix {inherit lib;}; lua = import ./lua.nix {inherit lib;};
vim = import ./vim.nix {inherit lib;}; vim = import ./vim.nix {inherit lib;};

View file

@ -1,4 +1,4 @@
{lib}: let let
inherit (builtins) isInt isBool toJSON; inherit (builtins) isInt isBool toJSON;
in rec { in rec {
# yes? no. # yes? no.