Description
The full trace is included at the bottom. I am trying to use flake-compat as a shim to generate a configuration.nix
for nixos-install
since the installer seems to be broken in many weird ways.
I tried to debug the installer, but the issue is fundamentally with the output of the flake, and it doesn't seem to set up a new system correctly. For example, writing the ISO's fstab
to /mnt/etc
rather than the one generated by my flake's activation script.
I have some glue code (bash) around these lines:
cat <<- EOF > "$root_dir/etc/nixos/configuration.nix"
(import (builtins.fetchTarball {
url = "$FLAKE_COMPAT_TARBALL_URL";
sha256 = "$FLAKE_COMPAT_TARBALL_HASH";
}) {src = "$flake_path";}).defaultNix.nixosConfigurations.$host_name.config
EOF
Obviously $root_dir
, $flake_path
, and $host_name
are handled elsewhere in the shell script. The flake is pre-built and sent over to the store at /mnt/nix/store
before running nixos-install
(on $root_dir
which is /mnt
).
I have attempted to follow the trace myself to determine if I can do something about it -- alas I am not experienced enough. I feel that it is worth note that I perform an explicit import of nixpkgs (that is a link to my flake.nix
).
I would like to know if I am using the wrong attribute path (in configuration.nix
) or something, and if the issue is that nixpkgs.pkgs
is not being evaluated properly. If it is being evaluated correctly by flake-compat
, I would like to know what wants nixpkgs.pkgs
, I do not see any occurrence in my code.
Thanks.
When running nixos-install
, I see the following:
error: The option `nixpkgs.pkgs' is used but not defined.
… while evaluating the attribute 'mergedValue'
at /mnt/nix/store/x20avpqcrk6my01n6h1blfslb6l4imw2-source/lib/modules.nix:747:5:
746| £ Type-check the remaining definitions, and merge them. Or throw if no definitions.
747| mergedValue =
| ^
748| if isDefined then
… while evaluating the option `nixpkgs.pkgs':
… while evaluating the attribute 'value'
at /mnt/nix/store/x20avpqcrk6my01n6h1blfslb6l4imw2-source/lib/modules.nix:712:9:
711| in warnDeprecation opt //
712| { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
| ^
713| inherit (res.defsFinal') highestPrio;
… while evaluating anonymous lambda
at /mnt/nix/store/x20avpqcrk6my01n6h1blfslb6l4imw2-source/lib/modules.nix:265:72:
264| £ For definitions that have an associated option
265| declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
| ^
266|
… from call site
at /mnt/nix/store/x20avpqcrk6my01n6h1blfslb6l4imw2-source/lib/attrsets.nix:401:20:
400| then recurse (path ++ [name]) value
401| else f (path ++ [name]) value;
| ^
402| in mapAttrs g;
… while evaluating 'g'
at /mnt/nix/store/x20avpqcrk6my01n6h1blfslb6l4imw2-source/lib/attrsets.nix:398:19:
397| g =
398| name: value:
| ^
399| if isAttrs value && cond value
… from call site
… while evaluating the attribute 'value'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:581:44:
580| defnsByName' = byName "config" (module: value:
581| [{ inherit (module) file; inherit value; }]
| ^
582| ) configs;
… while evaluating 'dischargeProperties'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:832:25:
831| */
832| dischargeProperties = def:
| ^
833| if def._type or "" == "merge" then
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:761:137:
760| defs' = concatMap (m:
761| map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
| ^
762| ) defs;
… while evaluating definitions from `/mnt/etc/nixos/configuration.nix':
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:28:
759| £ Process mkMerge and mkIf properties.
760| defs' = concatMap (m:
| ^
761| map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:17:
759| £ Process mkMerge and mkIf properties.
760| defs' = concatMap (m:
| ^
761| map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
… while evaluating the attribute 'values'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:873:7:
872| in {
873| values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
| ^
874| inherit highestPrio;
… while evaluating the attribute 'values'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:774:9:
773| in {
774| values = defs''';
| ^
775| inherit (defs'') highestPrio;
… while evaluating the attribute 'isDefined'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:790:5:
789|
790| isDefined = defsFinal != [];
| ^
791|
… while evaluating the attribute 'pkgs.isDefined'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:750:22:
749| files = map (def: def.file) res.defsFinal;
750| inherit (res) isDefined;
| ^
751| £ This allows options to be correctly displayed using `${options.path.to.it}`
… while evaluating the attribute 'value'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:461:58:
460| £ Push down position info.
461| (map (def: mapAttrs (n: v: { inherit (def) file; value = v; }) def.value) defs);
| ^
462| emptyValue = { value = {}; };
… while evaluating 'dischargeProperties'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:832:25:
831| */
832| dischargeProperties = def:
| ^
833| if def._type or "" == "merge" then
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:761:137:
760| defs' = concatMap (m:
761| map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
| ^
762| ) defs;
… while evaluating definitions from `/nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/misc/nixpkgs.nix':
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:28:
759| £ Process mkMerge and mkIf properties.
760| defs' = concatMap (m:
| ^
761| map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:17:
759| £ Process mkMerge and mkIf properties.
760| defs' = concatMap (m:
| ^
761| map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
… while evaluating the attribute 'values'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:873:7:
872| in {
873| values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
| ^
874| inherit highestPrio;
… while evaluating the attribute 'values'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:774:9:
773| in {
774| values = defs''';
| ^
775| inherit (defs'') highestPrio;
… while evaluating the attribute 'optionalValue.value'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:792:5:
791|
792| optionalValue =
| ^
793| if isDefined then { value = mergedValue; }
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:455:29:
454| merge = loc: defs:
455| zipAttrsWith (name: defs:
| ^
456| let merged = mergeDefinitions (loc ++ [name]) elemType defs;
… from call site
… while evaluating the module argument `pkgs' in "/nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/services/hardware/bluetooth.nix":
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:494:44:
493| context = name: ''while evaluating the module argument `${name}' in "${key}":'';
494| extraArgs = builtins.mapAttrs (name: _:
| ^
495| builtins.addErrorContext (context name)
… from call site
… while evaluating the attribute 'type.getSubModules'
at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/services/hardware/bluetooth.nix:71:9:
70| settings = mkOption {
71| type = cfgFmt.type;
| ^
72| default = { };
… while evaluating 'fixupOptionType'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:893:26:
892| £ TODO: Merge this into mergeOptionDecls
893| fixupOptionType = loc: opt:
| ^
894| if opt.type.getSubModules or null == null
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:609:23:
608| if length optionDecls == length decls then
609| let opt = fixupOptionType loc (mergeOptionDecls loc decls);
| ^
610| in {
… while evaluating 'warnIf'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/trivial.nix:350:18:
349| */
350| warnIf = cond: msg: if cond then warn msg else x: x;
| ^
351|
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:742:9:
741| warnDeprecation =
742| warnIf (opt.type.deprecationMessage != null)
| ^
743| "The type `types.${opt.type.name}' of option `${showOption loc}' defined in ${showFiles opt.declarations} is deprecated. ${opt.type.deprecationMessage}";
… while evaluating 'evalOptionValue'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:717:31:
716| config value. */
717| evalOptionValue = loc: opt: defs:
| ^
718| let
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:611:32:
610| in {
611| matchedOptions = evalOptionValue loc opt defns';
| ^
612| unmatchedDefns = [];
… while evaluating the attribute 'matchedOptions'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:611:15:
610| in {
611| matchedOptions = evalOptionValue loc opt defns';
| ^
612| unmatchedDefns = [];
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:642:37:
641|
642| matchedOptions = mapAttrs (n: v: v.matchedOptions) resultsByName;
| ^
643|
… from call site
… while evaluating 'attrByPath'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:24:35:
23| */
24| attrByPath = attrPath: default: e:
| ^
25| let attr = head attrPath;
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:29:12:
28| else if e ? ${attr}
29| then attrByPath (tail attrPath) default e.${attr}
| ^
30| else default;
… while evaluating 'attrByPath'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:24:35:
23| */
24| attrByPath = attrPath: default: e:
| ^
25| let attr = head attrPath;
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:29:12:
28| else if e ? ${attr}
29| then attrByPath (tail attrPath) default e.${attr}
| ^
30| else default;
… while evaluating 'attrByPath'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:24:35:
23| */
24| attrByPath = attrPath: default: e:
| ^
25| let attr = head attrPath;
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:29:12:
28| else if e ? ${attr}
29| then attrByPath (tail attrPath) default e.${attr}
| ^
30| else default;
… while evaluating 'attrByPath'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:24:35:
23| */
24| attrByPath = attrPath: default: e:
| ^
25| let attr = head attrPath;
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:1160:26:
1159| (abort "Renaming error: option `${showOption to}' does not exist.");
1160| toType = let opt = attrByPath to {} options; in opt.type or (types.submodule {});
| ^
1161| in
… while evaluating 'optionalAttrs'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:453:25:
452| */
453| optionalAttrs = cond: as: if cond then as else {};
| ^
454|
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:1167:12:
1166| apply = x: use (toOf config);
1167| } // optionalAttrs (toType != null) {
| ^
1168| type = toType;
… while evaluating 'atDepth'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:60:17:
59| len = length attrPath;
60| atDepth = n:
| ^
61| if n == len
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:63:39:
62| then value
63| else { ${elemAt attrPath n} = atDepth (n + 1); };
| ^
64| in atDepth 0;
… while evaluating the attribute 'options'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:573:38:
572| declsByName = byName "options" (module: option:
573| [{ inherit (module) _file; options = option; }]
| ^
574| ) options;
… while evaluating 'isType'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:71:18:
70| rec {
71| isType = type: x: (x._type or "") == type;
| ^
72|
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:606:36:
605| defns' = defnsByName'.${name} or [];
606| optionDecls = filter (m: isOption m.options) decls;
| ^
607| in
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:606:33:
605| defns' = defnsByName'.${name} or [];
606| optionDecls = filter (m: isOption m.options) decls;
| ^
607| in
… from call site
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:600:39:
599|
600| resultsByName = mapAttrs (name: decls:
| ^
601| £ We're descending into attribute ‘name’.
… from call site
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:647:22:
646| £ Propagate all unmatched definitions from nested option sets
647| mapAttrs (n: v: v.unmatchedDefns) resultsByName
| ^
648| £ Plus the definitions for the current prefix that don't have a matching option
… from call site
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:661:46:
660| else
661| concatLists (mapAttrsToList (name: defs:
| ^
662| map (def: def // {
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:356:16:
355| mapAttrsToList = f: attrs:
356| map (name: f name attrs.${name}) (attrNames attrs);
| ^
357|
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:356:10:
355| mapAttrsToList = f: attrs:
356| map (name: f name attrs.${name}) (attrNames attrs);
| ^
357|
… from call site
… while evaluating the attribute 'unmatchedDefns'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:654:7:
653| £ Transforms unmatchedDefnsByName into a list of definitions
654| unmatchedDefns =
| ^
655| if configs == []
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:647:22:
646| £ Propagate all unmatched definitions from nested option sets
647| mapAttrs (n: v: v.unmatchedDefns) resultsByName
| ^
648| £ Plus the definitions for the current prefix that don't have a matching option
… from call site
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:661:46:
660| else
661| concatLists (mapAttrsToList (name: defs:
| ^
662| map (def: def // {
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:356:16:
355| mapAttrsToList = f: attrs:
356| map (name: f name attrs.${name}) (attrNames attrs);
| ^
357|
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:356:10:
355| mapAttrsToList = f: attrs:
356| map (name: f name attrs.${name}) (attrNames attrs);
| ^
357|
… from call site
… while evaluating the attribute 'unmatchedDefns'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:654:7:
653| £ Transforms unmatchedDefnsByName into a list of definitions
654| unmatchedDefns =
| ^
655| if configs == []
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:647:22:
646| £ Propagate all unmatched definitions from nested option sets
647| mapAttrs (n: v: v.unmatchedDefns) resultsByName
| ^
648| £ Plus the definitions for the current prefix that don't have a matching option
… from call site
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:661:46:
660| else
661| concatLists (mapAttrsToList (name: defs:
| ^
662| map (def: def // {
… from call site
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:356:16:
355| mapAttrsToList = f: attrs:
356| map (name: f name attrs.${name}) (attrNames attrs);
| ^
357|
… while evaluating anonymous lambda
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:356:10:
355| mapAttrsToList = f: attrs:
356| map (name: f name attrs.${name}) (attrNames attrs);
| ^
357|
… from call site
… while evaluating the attribute 'unmatchedDefns'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:654:7:
653| £ Transforms unmatchedDefnsByName into a list of definitions
654| unmatchedDefns =
| ^
655| if configs == []
… while evaluating the attribute 'config.system.build.toplevel'
at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:363:9:
362| options = checked options;
363| config = checked (removeAttrs config [ "_module" ]);
| ^
364| _module = checked (config._module);