20 Jul 2025 |
n4ch723hr3r | 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 | 14:19:38 |
x10an14 | 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 | 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 | i was thinking about a general sense. like if you wanted to extend users.users for example. | 14:23:14 |
n4ch723hr3r | 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 | you can also explore via nix repl ;) | 14:24:13 |
n4ch723hr3r | apparently you can 🤔 | 14:27:06 |
n4ch723hr3r | users.users = lib.mkOption {
type = with lib.types; attrsOf (submodule userOptions);
};
found this in the openssh module
| 14:27:27 |
n4ch723hr3r | thats why if you search for "users.users" on search.nixos.org there are sometimes openssh and sometimes users-groups.nix given as a source | 14:28:46 |
n4ch723hr3r | x10an14 so maybe try extending it like openssh does for users.users and see what happens xD | 14:29:58 |
n4ch723hr3r | https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/services/networking/ssh/sshd.nix#L666 | 14:30:20 |
x10an14 | 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 | accessing the values can be done over config but i thought you want to extend a module with a new option | 14:48:01 |
x10an14 | Ahhh, no, because they don't use those values inside the submodule, I saw wrong | 14:48:22 |
x10an14 | I want/need both, and it's the 1st of those two that I got stuck on/struggled with | 14:48:51 |
n4ch723hr3r | 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 | thats at least how i understood this attrsOf extending | 14:50:58 |
x10an14 | 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 | the snowfall scared me xD | 14:52:02 |
x10an14 | Ahh, right, gotten blind to my own code. Thanks, let me try. | 14:52:10 |
x10an14 | Does the same w/me... | 14:52:18 |
n4ch723hr3r | { name, config, ... }: i dont think config exists in that scope, right? | 14:52:46 |
n4ch723hr3r | you probably need to do fooConfs.${name}... | 14:53:26 |
n4ch723hr3r | and afaik fooConfs is often named cfg in nix modules | 14:53:52 |
x10an14 | 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 | you can also do nix repl then enter :lf . | 15:04:06 |
x10an14 | 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 | {
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 | * {
name,
...
}:
let
ihnerit (config.flake.modules.x10.device-config.${name}) username;
in
{
options.homeManager = {
| 15:06:54 |
n4ch723hr3r | how about that? | 15:07:01 |