!wfudwzqQUiJYJnqfSY:nixos.org

NixOS Module System

133 Members
27 Servers

Load older messages


SenderMessageTime
20 Jul 2025
@n4ch723hr3r:nope.chatn4ch723hr3rfrom what i understand about the module system everything inside attrsOf is a subtype so you have to find a way to put something new into that type14:19:38
@x10an14:matrix.orgx10an14
In reply to @n4ch723hr3r:nope.chat
from what i understand about the module system everything inside attrsOf is a subtype so you have to find a way to put something new into that type
So if my BTW wish is taken into account, the point you're making loses relevance, right?
14:21:04
@x10an14:matrix.orgx10an14
In reply to @n4ch723hr3r:nope.chat
from what i understand about the module system everything inside attrsOf is a subtype so you have to find a way to put something new into that type
I think you're correct about this though
14:21:33
@n4ch723hr3r:nope.chatn4ch723hr3ri was thinking about a general sense. like if you wanted to extend users.users for example.14:23:14
@n4ch723hr3r:nope.chatn4ch723hr3r im not sure about if this is even possible since youd have to overwrite or wrap the binOp functor in .type.functor 14:23:57
@n4ch723hr3r:nope.chatn4ch723hr3ryou can also explore via nix repl ;)14:24:13
@n4ch723hr3r:nope.chatn4ch723hr3rapparently you can 🤔14:27:06
@n4ch723hr3r:nope.chatn4ch723hr3r
    users.users = lib.mkOption {
      type = with lib.types; attrsOf (submodule userOptions);
    };

found this in the openssh module

14:27:27
@n4ch723hr3r:nope.chatn4ch723hr3rthats why if you search for "users.users" on search.nixos.org there are sometimes openssh and sometimes users-groups.nix given as a source14:28:46
@n4ch723hr3r:nope.chatn4ch723hr3r x10an14 so maybe try extending it like openssh does for users.users and see what happens xD 14:29:58
@n4ch723hr3r:nope.chatn4ch723hr3rhttps://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/services/networking/ssh/sshd.nix#L66614:30:20
@x10an14:matrix.orgx10an14 n4ch723hr3r: I think this is the closest I could easily find in that huge file that might answer my question (how to access option values declared elsewhere in another file/option): https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/services/networking/ssh/sshd.nix#L149 14:46:03
@n4ch723hr3r:nope.chatn4ch723hr3raccessing the values can be done over config but i thought you want to extend a module with a new option14:48:01
@x10an14:matrix.orgx10an14Ahhh, no, because they don't use those values inside the submodule, I saw wrong14:48:22
@x10an14:matrix.orgx10an14I want/need both, and it's the 1st of those two that I got stuck on/struggled with14:48:51
@n4ch723hr3r:nope.chatn4ch723hr3r

so in the second file you do:

  options.flake.modules.foo = lib.mkOption {
    type =
      with lib.types;
      attrsOf (
        submodule (
          { name, ... }:
          {
            options = {
              home-manager = lib.mkOption {
......
14:50:09
@n4ch723hr3r:nope.chatn4ch723hr3rthats at least how i understood this attrsOf extending14:50:58
@x10an14:matrix.orgx10an14

the inherits in the let ... in block in the 2nd file error out for me, no such value/attrs present:

2025-07-20 15:50:27+02:00 ~/Doc/sr./nix-parts-conf w/❄️nix-shell-envtook 17s
x10an14@home-desktop ❯ : nix eval --json .#modules.x10.home-manager | from json
warning: Git tree '/home/x10an14/Documents/sr.ht/nix-parts-conf' is dirty
error:
       … while evaluating the attribute 'root.result'
         at «flakes-internal»/call-flake.nix:98:7:
           97|     {
           98|       result =
             |       ^
           99|         if node.flake or true then

       … in the left operand of the update (//) operator
         at «flakes-internal»/call-flake.nix:85:9:
           84|         # This is shadowed in the next //
           85|         // sourceInfo
             |         ^
           86|         // {

       … while evaluating the option `flake':

       (stack trace truncated; use '--show-trace' to show the full, detailed trace)

       error: The option `flake.modules.x10.device-configs' in module `/nix/store/6rgggbp9175wyswk9d2pl66v22vn4c3b-source/device-configs/default.nix' would be a parent of the following options, but its type `attribute set of (submodule)' does not support nested options.
        - option(s) with prefix `flake.modules.x10.device-configs.home-manager' in module `/nix/store/6rgggbp9175wyswk9d2pl66v22vn4c3b-source/device-configs/home-manager.nix'


14:51:34
@n4ch723hr3r:nope.chatn4ch723hr3rthe snowfall scared me xD14:52:02
@x10an14:matrix.orgx10an14Ahh, right, gotten blind to my own code. Thanks, let me try.14:52:10
@x10an14:matrix.orgx10an14Does the same w/me...14:52:18
@n4ch723hr3r:nope.chatn4ch723hr3r { name, config, ... }:
i dont think config exists in that scope, right?
14:52:46
@n4ch723hr3r:nope.chatn4ch723hr3r you probably need to do fooConfs.${name}... 14:53:26
@n4ch723hr3r:nope.chatn4ch723hr3rand afaik fooConfs is often named cfg in nix modules14:53:52
@x10an14:matrix.orgx10an14

Nah, sorry, there's something I'm messing up/not getting 😅
See this paste: https://paste.sr.ht/~x10an14/653ed23dd63ba7166d4da89b315c9cce3c4f92c8
And see the comment.
Here's the error when I try to nix eval .#modules.x10.device-configs:

x10an14@home-desktop ❯ : nix eval .#modules.x10.device-configs
warning: Git tree '/home/x10an14/Documents/sr.ht/nix-parts-conf' is dirty
{ "x10an14@home-desktop" = { homeManager = { entryPoint = «error: attribute 'username' missing»; homeDirectory = «error: attribute 'system' missing»; toplevelBuild = «error: The option `flake.modules.x10.device-configs."x10an14@home-desktop".homeManager.toplevelBuild' was accessed but has no value defined. Try setting the option.»; }; hostname = "home-desktop"; system = "x86_64-linux"; username = "x10an14"; }; "x10an14@nav-x10an14-t14" = { homeManager = { entryPoint = «error: attribute 'username' missing»; homeDirectory = «error: attribute 'system' missing»; toplevelBuild = «error: The option `flake.modules.x10.device-configs."x10an14@nav-x10an14-t14".homeManager.toplevelBuild' was accessed but has no value defined. Try setting the option.»; }; hostname = "nav-x10an14-t14"; system = "x86_64-linux"; username = "x10an14"; }; }

See the errors reporting missing attributes?

15:03:15
@n4ch723hr3r:nope.chatn4ch723hr3r you can also do nix repl then enter :lf . 15:04:06
@x10an14:matrix.orgx10an14

I know that, but again, I'm asking here because I don't know what I should be exploring. There's something missing in my mental model, and I'm here asking for a nudge in the right direction^^

Answering your suggestion on using the nix repl directly, how can I in the repl explore what the config attribute w/the comments look like? I only know how to explore evaluated configs/outputs in the repl

15:06:31
@n4ch723hr3r:nope.chatn4ch723hr3r
          {
            name,
            username, # <- I want access to these, that live under `config.flake.modules.x10.device-configs.<a device>,`
            hostname, # <- I want access to these, that live under `config.flake.modules.x10.device-configs.<a device>,`
            system, # <- I want access to these, that live under `config.flake.modules.x10.device-configs.<a device>,`
            ...
          }:
let
  ihnerit (config.flake.modules.x10.device-config.${name}) username;
in
          {
            options.homeManager = {
15:06:44
@n4ch723hr3r:nope.chatn4ch723hr3r *
          {
            name,
            ...
          }:
let
  ihnerit (config.flake.modules.x10.device-config.${name}) username;
in
          {
            options.homeManager = {
15:06:54
@n4ch723hr3r:nope.chatn4ch723hr3rhow about that?15:07:01

Show newer messages


Back to Room ListRoom Version: 10