!wfudwzqQUiJYJnqfSY:nixos.org

NixOS Module System

135 Members
26 Servers

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


SenderMessageTime
16 May 2025
@mattsturg:matrix.orgMatt Sturgeon _Note: stringifying an option will use it's showOption opt.loc location, so you'll automatically get the full option prefix, e.g. "foo.marker_b" 21:07:27
@mattsturg:matrix.orgMatt Sturgeon * Note: stringifying an option will use it's showOption opt.loc location, so you'll automatically get the full option prefix, e.g. "foo.marker_b" 21:07:39
@ss:someonex.netSomeoneSerge (back on matrix)Awe and horror21:41:09
@ss:someonex.netSomeoneSerge (back on matrix) I suspect this works and then gets rejected by some kind of a final type check: error: The option marker_a' was accessed but has no value defined. Try setting the option` 22:04:36
@ss:someonex.netSomeoneSerge (back on matrix) * I suspect this works and then gets rejected by some kind of a final type check: error: The option `marker_a' was accessed but has no value defined. Try setting the option 22:04:51
@ss:someonex.netSomeoneSerge (back on matrix) *

I suspect this works and then gets rejected by some kind of a final type check: error: The option `marker_a' was accessed but has no value defined. Try setting the option

(my attempt: https://gist.github.com/SomeoneSerge/29a9e6e10cdcd3596f865c41c7042610)

22:05:59
@mattsturg:matrix.orgMatt Sturgeon

That's not a type check, that's an "empty value" stub. When an option has no definitions, its value is set to a stub that throws that error.

You're probably reading the value somewhere, e.g. using config.marker_a instead of options.marker_a, or not using removeAttrs when creating __result?

22:06:40
@mattsturg:matrix.orgMatt Sturgeon On line 11 you assign freeformType to a submodule, but freeformType must be an attrsOf type. 22:12:06
@mattsturg:matrix.orgMatt Sturgeon

On line 45 you're defining apply which is meaningless in a module, it's a feature of options.

If you're evaluating these directly with lib.evalModules instead of using a submodule option, you can do the apply manually:

(lib.evalModules { /* ... */ }).config.__result
22:14:08
@ss:someonex.netSomeoneSerge (back on matrix)

On line 45 you're defining apply which is meaningless in a module, it's a feature of options.

Yeah I was wondering if I misunderstood the "freeformType is an option"

22:15:13
@ss:someonex.netSomeoneSerge (back on matrix)Whoops, the snippet is screwed then I guess22:15:50
@mattsturg:matrix.orgMatt Sturgeon

Here's what I meant by freeformType is an option: https://github.com/NixOS/nixpkgs/blob/ec56f7ae8cdc39eebb8a3b4aa7a3a6365c214fb5/lib/modules.nix#L213-L227

You can set it explicitly in a submodule by defining e.g. config._module.freeformType = attrsOf str, but the module system allows a "shorthand" syntax where freeformType can be defined as a top-level attr in a module and it'll do the conversion to assigning the option for you.

22:17:34
@ss:someonex.netSomeoneSerge (back on matrix)

Here's what I meant by freeformType is an option:

Was my second guess. Thanks for walking me through these!

22:19:58
@ss:someonex.netSomeoneSerge (back on matrix) Does work with mkOption indeed: https://gist.github.com/SomeoneSerge/b278317b83e5090fbfa9472c78701703 22:51:20
@mattsturg:matrix.orgMatt Sturgeon

Awesome!

I'd highly recommend checking the marker_a.isDefined && marker_b.isDefined case too, which I assume should be an error?

The else case where neither are defined may need some special handling too: is it an error? Is it still an error if cfg is empty?

22:56:09

Show newer messages


Back to Room ListRoom Version: 10