!wfudwzqQUiJYJnqfSY:nixos.org

NixOS Module System

180 Members
38 Servers

You have reached the beginning of time (for this room).


SenderMessageTime
1 Feb 2024
@gtrunsec:matrix.orgguangtao *

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
@gtrunsec:matrix.orgguangtao *

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
@gtrunsec:matrix.orgguangtaoYeah, if I understand your problem correctly.20:13:50
@infinisil:matrix.orginfinisil Oh don't use apply, that's generally an anti-pattern 20:14:12
@infinisil:matrix.orginfinisilI'll take a closer look at the code20:14:22
@djacu:matrix.org@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:matrix.orginfinisilOh so it doesn't work because to the module system, all definitions have the same priority20:16:57
@infinisil:matrix.orginfinisil You set them both with out = <attrset>, no mkDefault or so 20:17:16
@infinisil:matrix.orginfinisil 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:matrix.orginfinisil What you need is out = mapAttrs (name: mkDefault) config.default 20:18:26
@djacu:matrix.org@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:matrix.orginfinisil The line out = config.default; 20:21:48
@djacu:matrix.org@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:matrix.orginfinisilCurrying function arguments :)20:22:12
@gtrunsec:matrix.orgguangtaothat makes sense; set all attrts of default to having order.20:23:54
@djacu:matrix.org@djacu:matrix.orgWhat is this deep magic!? It works20:26:24
@djacu:matrix.org@djacu:matrix.org Oh did you just apply mkDefault to all the values set in default?? 20:27:02
@infinisil:matrix.orginfinisilIndeed :)20:27:18
@djacu:matrix.org@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

Show newer messages


Back to Room ListRoom Version: 10