16 Feb 2024 |
mr-qubo | Yeah, I just wanted to bring the topic, maybe someone has some interesting thoughts. | 16:05:23 |
| Philip Taron (UTC-8) joined the room. | 17:49:31 |
20 Feb 2024 |
@djacu:matrix.org | I'm reading through the module system deep dive on nix.dev and am wondering if there is a behavioral difference between setting an options default behavior in the config attribute vs the default attribute in mkOption .
this
{
pkgs,
lib,
config,
...
}: {
options = {
scripts.output = lib.mkOption {
type = lib.types.package;
};
};
config = {
scripts.output = pkgs.writeShellApplication {
name = "map";
runtimeInputs = with pkgs; [curl feh];
text = ''
${./map} ${lib.concatStringsSep " "
config.requestParams} | feh -
'';
};
};
}
vs this
{
pkgs,
lib,
config,
...
}: {
options = {
scripts.output = lib.mkOption {
type = lib.types.package;
default = pkgs.writeShellApplication {
name = "map";
runtimeInputs = with pkgs; [curl feh];
text = ''
${./map} ${lib.concatStringsSep " "
config.requestParams} | feh -
'';
};
};
};
}
| 21:39:27 |
infinisil | djacu: Setting a default with options.foo = lib.mkOption { default = <value>; ... } is equivalent to config.foo = lib.mkOptionDefault <value>; | 23:23:21 |
infinisil | Furthermore, default = <value> (and there's defaultText too) can get rendered in the manual, config.foo = ... can't | 23:24:14 |
@djacu:matrix.org | Right right I forgot about the docs side. I was more focused on merge behavior. So either way they get default priority.
Thanks for the explanation! | 23:48:23 |
21 Feb 2024 |
infinisil | djacu (Well you need mkOptionDefault to get the same priority for config, which is generally not done) | 11:25:22 |
25 Feb 2024 |
| @olafkfreund:matrix.org joined the room. | 22:43:41 |
1 Mar 2024 |
| accelbread joined the room. | 04:27:37 |
7 Mar 2024 |
@djacu:matrix.org | How does the module system handle definitions with no priority?
I've got two modules
{lib, ...}: {
options = {
name = lib.mkOption {
type = lib.types.str;
};
};
config = {
name = lib.mkDefault "foo";
};
}
{...}: {
config = {
name = "bar";
};
}
If I evaluate them together, I get "bar" for the value for name . How does it handle this situation? Is is like using mkForce? Does it bypass the priority system completely?
I imagine the answer is somewhere in this function but I am having trouble working through the logic. https://github.com/hsjobeki/nixpkgs/blob/985fc9b995c07037f6a6273bafa3526f06bb2343/lib/modules.nix#L818
On a side note, this appears to be the place where option declarations with a default attribute value use mkOptionDefault .
| 04:41:32 |
@djacu:matrix.org | After digging some more it seems like it actually might happen in mergeDefinitions which calls filterOverrides' . My reading of it leads me to believe that definitions with no priority get set a priority of defaultOverridePriority which is fairly low (100). | 05:15:44 |
9 Mar 2024 |
| Qyriad joined the room. | 00:39:08 |
14 Mar 2024 |
| NixOS Moderation Botchanged room power levels. | 18:44:27 |
15 Mar 2024 |
| spacesbot - keeps a log of public NixOS channels joined the room. | 04:06:23 |
16 Mar 2024 |
| Jason Odoom joined the room. | 02:12:10 |
| mj joined the room. | 14:00:14 |
17 Mar 2024 |
| @qyriad:matrix.org left the room. | 20:43:44 |
18 Mar 2024 |
| @infinidoge:matrix.org joined the room. | 18:47:27 |
19 Mar 2024 |
| NixOS Moderation Botchanged room power levels. | 00:29:53 |
21 Mar 2024 |
| NixOS Moderation Botchanged room power levels. | 18:02:50 |
22 Mar 2024 |
| chadac joined the room. | 02:03:16 |
| terminalfilth joined the room. | 05:13:35 |
| terminalfilth set a profile picture. | 05:24:39 |
| terminalfilth changed their profile picture. | 05:24:49 |
23 Mar 2024 |
| @federicodschonborn:matrix.org joined the room. | 00:37:24 |
| SomeoneSerge (utc+3) changed their display name from SomeoneSerge (hash-versioned python modules when) to SomeoneSerge (migrating synapse). | 02:11:12 |
27 Mar 2024 |
hexa | is there a way to set an optional option default? | 23:21:25 |
hexa | default = if foo then "bar" else omit;
| 23:21:46 |
hexa | * default = if foo then "bar" else omit; # if not foo, consider the value unset
| 23:22:21 |
hexa | uhhhhhh | 23:25:58 |