WIP: decrease quadratic operations in modules/programs.nix
This commit is contained in:
parent
9b9273b725
commit
83e48eabad
|
@ -20,6 +20,28 @@ let
|
||||||
;
|
;
|
||||||
inherit (sane-lib) joinAttrsets;
|
inherit (sane-lib) joinAttrsets;
|
||||||
cfg = config.sane.programs;
|
cfg = config.sane.programs;
|
||||||
|
# create a map:
|
||||||
|
# {
|
||||||
|
# "${pkgName}" = {
|
||||||
|
# system = true|false;
|
||||||
|
# users = {
|
||||||
|
# "${name}" = true|false;
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
# for every ${pkgName} in pkgSpecs.
|
||||||
|
# `system = true|false` is a computed expression over all the other programs, as evaluated.
|
||||||
|
solveDefaultEnableFor = pkgSpecs: lib.foldlAttrs (
|
||||||
|
acc: pname: pval: (
|
||||||
|
# add "${enableName}".system |= areSuggestionsEnabled pval
|
||||||
|
# for each `enableName` in pvalsuggestedPackages
|
||||||
|
lib.foldl (acc': enableName: acc' // {
|
||||||
|
"${enableName}".system = (acc'."${enableName}" or { system = false; }).system
|
||||||
|
|| (pval.enableFor.system && pval.enableSuggested);
|
||||||
|
}) acc pval.suggestedPrograms
|
||||||
|
)
|
||||||
|
) {} pkgSpecs;
|
||||||
|
defaultEnables = solveDefaultEnableFor cfg;
|
||||||
pkgSpec = types.submodule ({ config, name, ... }: {
|
pkgSpec = types.submodule ({ config, name, ... }: {
|
||||||
options = {
|
options = {
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
|
@ -51,13 +73,14 @@ let
|
||||||
# then it's just `default = any (pname: cfg."${pname}".enableFor.system) enableMap."${name}";`
|
# then it's just `default = any (pname: cfg."${pname}".enableFor.system) enableMap."${name}";`
|
||||||
enableFor.system = mkOption {
|
enableFor.system = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = any (en: en) (
|
default = (defaultEnables."${name}" or { system = false; }).system;
|
||||||
mapAttrsToList
|
# default = any (en: en) (
|
||||||
(otherName: otherPkg:
|
# mapAttrsToList
|
||||||
otherName != name && elem name otherPkg.suggestedPrograms && otherPkg.enableSuggested && otherPkg.enableFor.system
|
# (otherName: otherPkg:
|
||||||
)
|
# otherName != name && elem name otherPkg.suggestedPrograms && otherPkg.enableSuggested && otherPkg.enableFor.system
|
||||||
cfg
|
# )
|
||||||
);
|
# cfg
|
||||||
|
# );
|
||||||
description = ''
|
description = ''
|
||||||
place this program on the system PATH
|
place this program on the system PATH
|
||||||
'';
|
'';
|
||||||
|
|
Loading…
Reference in New Issue
Block a user