From 27f343029678231f93baa0f87d2e8f84c147549b Mon Sep 17 00:00:00 2001 From: Ching Pei Yang Date: Sun, 22 Dec 2024 23:00:26 +0100 Subject: [PATCH] lib: remove anythingConcatLists --- lib/types/custom.nix | 55 +++---------------------------------------- lib/types/default.nix | 2 +- 2 files changed, 4 insertions(+), 53 deletions(-) diff --git a/lib/types/custom.nix b/lib/types/custom.nix index 3d4a2bcb..c42cd2ce 100644 --- a/lib/types/custom.nix +++ b/lib/types/custom.nix @@ -1,57 +1,8 @@ {lib}: let - inherit (lib.options) showOption showFiles getFiles mergeOneOption mergeEqualOption; - inherit (lib.strings) isString isStringLike; - inherit (lib.types) anything attrsOf listOf mkOptionType; - inherit (lib.nvim.types) anythingConcatLists; - inherit (builtins) typeOf isAttrs any head concatLists stringLength match; + inherit (lib.options) mergeEqualOption; + inherit (lib.strings) isString stringLength match; + inherit (lib.types) listOf mkOptionType; in { - # HACK: Does this break anything in our case? - # A modified version of the nixpkgs anything type that concatenates lists - # This isn't the default because the order in which the lists are concatenated depends on the order in which the modules are imported, - # which makes it non-deterministic - anythingConcatLists = - anything - // { - merge = loc: defs: let - getType = value: - if isAttrs value && isStringLike value - then "stringCoercibleSet" - else typeOf value; - - # Throw an error if not all defs have the same type - checkType = getType (head defs).value; - commonType = - if any (def: getType def.value != checkType) defs - then throw "The option `${showOption loc}' has conflicting option types in ${showFiles (getFiles defs)}" - else checkType; - - mergeFunctions = { - # Recursively merge attribute sets - set = (attrsOf anythingConcatLists).merge; - - # Overridden behavior for lists, that concatenates lists - list = _: defs: concatLists (map (e: e.value) defs); - - # This means it's a package, only accept a single definition - stringCoercibleSet = mergeOneOption; - - # This works by passing the argument to the functions, - # and merging their returns values instead - lambda = loc: defs: arg: - anythingConcatLists.merge - (loc ++ [""]) - (map (def: { - inherit (def) file; - value = def.value arg; - }) - defs); - }; - in - # Merge the defs with the correct function from above, if available - # otherwise only allow equal values - (mergeFunctions.${commonType} or mergeEqualOption) loc defs; - }; - mergelessListOf = elemType: let super = listOf elemType; in diff --git a/lib/types/default.nix b/lib/types/default.nix index 73b35956..c1c16715 100644 --- a/lib/types/default.nix +++ b/lib/types/default.nix @@ -11,5 +11,5 @@ in { inherit (typesDag) dagOf; inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; inherit (typesLanguage) diagnostics mkGrammarOption; - inherit (customTypes) anythingConcatLists char hexColor mergelessListOf; + inherit (customTypes) char hexColor mergelessListOf; }