| 1 Feb 2024 |
guangtao | * is it possible to solve your problem through the apply option? I mean you can set the defualt to be {}, use apply instead
| 20:12:13 |
guangtao | * is it possible to solve your problem through the apply option? I mean you can set the defualt to be {}, use apply instead
apply = cfg: lib.recursiveUpdate {<default>} cfg;
| 20:12:42 |
guangtao | Yeah, if I understand your problem correctly. | 20:13:50 |
infinisil | Oh don't use apply, that's generally an anti-pattern | 20:14:12 |
infinisil | I'll take a closer look at the code | 20:14:22 |
@djacu:matrix.org | apply also generally wouldn't work because this module wouldn't necessarily be at the top level. I mean it could work but would be messy. Also, it breaks out of the module ecosystem and isn't very user friendly. | 20:16:08 |
infinisil | Oh so it doesn't work because to the module system, all definitions have the same priority | 20:16:57 |
infinisil | You set them both with out = <attrset>, no mkDefault or so | 20:17:16 |
infinisil | But out = mkDefault config.default wouldn't work because then the entire attribute set gets overridden by the users one, therefore not using any defaults | 20:18:00 |
infinisil | What you need is out = mapAttrs (name: mkDefault) config.default | 20:18:26 |
@djacu:matrix.org | I'm a little lost. Which line would I inject this:
out = mapAttrs (name: mkDefault) config.default
Also doesn't mapAttrs a function of 2 variables?
| 20:21:09 |
infinisil | The line out = config.default; | 20:21:48 |
@djacu:matrix.org | * I'm a little lost. Which line would I inject this:
out = mapAttrs (name: mkDefault) config.default
Also isn't mapAttrs a function of 2 variables?
| 20:22:09 |
infinisil | Currying function arguments :) | 20:22:12 |
guangtao | that makes sense; set all attrts of default to having order. | 20:23:54 |
@djacu:matrix.org | What is this deep magic!? It works | 20:26:24 |
@djacu:matrix.org | Oh did you just apply mkDefault to all the values set in default?? | 20:27:02 |
infinisil | Indeed :) | 20:27:18 |
@djacu:matrix.org | Cool man. Thanks!
What is really nice is that I can use ({...}: {user = {b = 3;};}) and it overrides. Which provides a nice API for end users (i.e. not having to use mkForce).
So this partially makes sense. But why didn't having a user config with ({...}: {user = {b = lib.mkForce 3;};}) work before? It should have a really high priority.
Without your fix, does the config.default have... no priority? What was the failure mechanism before the fix?
| 20:31:17 |