| 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 |
| Olaf Krasicki-Freund 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 left the room. | 20:43:44 |
| 18 Mar 2024 |
| Infinidoge 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 |
| Federico Damián Schonborn joined the room. | 00:37:24 |
| SomeoneSerge (migrating synapse) 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 |
hexa | can I like | 23:26:00 |
hexa | bla = mkOption {
} // lib.optionalAttrs (cond) {
default = "bar";
};
| 23:26:37 |