srid / nixos-unified

Unify NixOS + nix-darwin + home-manager configuration in a single flake, while providing a consistent interface at DX and UX level.
https://nixos-unified.org
MIT License
197 stars 19 forks source link

Regression in latest version #84

Open srid opened 2 hours ago

srid commented 2 hours ago
image

Discussed in https://github.com/srid/nixos-unified/discussions/83

Originally posted by **snglth** October 10, 2024 I ran `nix flake update` recently which fetched following inputs among others: ``` • Updated input 'nixos-unified': 'github:srid/nixos-unified/ed937a03c0949742ff7dcd871957d80596e9f59a' (2024-10-05) → 'github:srid/nixos-unified/4c9a3c503952b256d6989bbfcd3a443b7eb13647' (2024-10-07) • Updated input 'nixpkgs': 'github:nixos/nixpkgs/27e30d177e57d912d614c88c622dcfdb2e6e6515' → 'github:nixos/nixpkgs/5633bcff0c6162b9e4b5f1264264611e950c8ec7' (2024-10-09) ``` Now every build results in following error: ``` <- nix run --show-trace nixos-config-shell-env warning: Git tree '/Users/snglth/Development/ws-flake' is dirty error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:9:12: (source not available) … while evaluating derivation 'activate' whose name attribute is located at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/pkgs/stdenv/generic/make-derivation.nix:336:7 … while evaluating attribute 'buildCommand' of derivation 'activate' at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/pkgs/build-support/trivial-builders/default.nix:59:16: 58| enableParallelBuilding = true; 59| inherit buildCommand name; | ^ 60| passAsFile = [ "buildCommand" ] … while evaluating derivation 'nixos-unified.nu' whose name attribute is located at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/pkgs/stdenv/generic/make-derivation.nix:336:7 … while evaluating attribute 'text' of derivation 'nixos-unified.nu' at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/pkgs/build-support/trivial-builders/default.nix:101:16: 100| ({ 101| inherit text executable checkPhase allowSubstitutes preferLocalBuild; | ^ 102| passAsFile = [ "text" ] … while evaluating derivation 'nixos-unified-activate-data' whose name attribute is located at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/pkgs/stdenv/generic/make-derivation.nix:336:7 … while evaluating attribute 'text' of derivation 'nixos-unified-activate-data' at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/pkgs/build-support/trivial-builders/default.nix:101:16: 100| ({ 101| inherit text executable checkPhase allowSubstitutes preferLocalBuild; | ^ 102| passAsFile = [ "text" ] … while calling anonymous lambda at /nix/store/2sz6la88drv77fxg87hb4li4jl9gxf3w-source/activate/default.nix:11:51: 10| }; 11| nixos-unified-configs = lib.mapAttrs (name: value: value.config.nixos-unified) (self.nixosConfigurations or { } // self.darwinConfigurations or { }); | ^ 12| data = { … from call site at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:254:28: 253| # For definitions that have an associated option 254| declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options; | ^ 255| … while calling 'mapAttrsRecursiveCond' at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/attrsets.nix:1201:5: 1200| f: 1201| set: | ^ 1202| let … from call site at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:246:33: 245| ({ inherit lib options config specialArgs; } // specialArgs); 246| in mergeModules prefix (reverseList collected); | ^ 247| … while calling 'reverseList' at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/lists.nix:1116:17: 1115| */ 1116| reverseList = xs: | ^ 1117| let l = length xs; in genList (n: elemAt xs (l - n - 1)) l; … from call site at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:241:25: 240| merged = 241| let collected = collectModules | ^ 242| class … while calling anonymous lambda at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:452:37: 451| 452| in modulesPath: initialModules: args: | ^ 453| filterModules modulesPath (collectStructuredModules unknownModule "" initialModules args); … from call site at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:453:7: 452| in modulesPath: initialModules: args: 453| filterModules modulesPath (collectStructuredModules unknownModule "" initialModules args); | ^ 454| … while calling 'filterModules' at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:420:36: 419| # modules recursively. It returns the final list of unique-by-key modules 420| filterModules = modulesPath: { disabled, modules }: | ^ 421| let … while calling anonymous lambda at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:446:31: 445| disabledKeys = concatMap ({ file, disabled }: map (moduleKey file) disabled) disabled; 446| keyFilter = filter (attrs: ! elem attrs.key disabledKeys); | ^ 447| in map (attrs: attrs.module) (genericClosure { … from call site at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:407:22: 406| let 407| module = checkModule (loadModule args parentFile "${parentKey}:anon-${toString n}" x); | ^ 408| collectedImports = collectStructuredModules module._file module.key module.imports args; … while calling anonymous lambda at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:366:11: 365| then 366| m: | ^ 367| if m._class != null -> m._class == class … from call site at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:407:35: 406| let 407| module = checkModule (loadModule args parentFile "${parentKey}:anon-${toString n}" x); | ^ 408| collectedImports = collectStructuredModules module._file module.key module.imports args; … while calling 'loadModule' at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:348:53: 347| # Like unifyModuleSyntax, but also imports paths and calls functions if necessary 348| loadModule = args: fallbackFile: fallbackKey: m: | ^ 349| if isFunction m then … from call site at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/modules.nix:349:12: 348| loadModule = args: fallbackFile: fallbackKey: m: 349| if isFunction m then | ^ 350| unifyModuleSyntax fallbackFile fallbackKey (applyModuleArgs fallbackKey m args) … while calling 'isFunction' at /nix/store/60sn02zhawl3kwn0r515zff3h6hg6ydz-source/lib/trivial.nix:1000:16: 999| */ 1000| isFunction = f: builtins.isFunction f || | ^ 1001| (f ? __functor && isFunction (f.__functor f)); … while calling anonymous lambda at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/attrsets.nix:1571:24: 1570| let f = attrPath: 1571| zipAttrsWith (n: values: | ^ 1572| let here = attrPath ++ [n]; in … while calling anonymous lambda at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/types.nix:601:29: 600| merge = loc: defs: 601| zipAttrsWith (name: defs: | ^ 602| let merged = mergeDefinitions (loc ++ [name]) elemType defs; … while calling anonymous lambda at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/modules.nix:836:28: 835| # Process mkMerge and mkIf properties. 836| defs' = concatMap (m: | ^ 837| map (value: { inherit (m) file; inherit value; }) (addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value)) … while evaluating definitions from `/nix/store/2sz6la88drv77fxg87hb4li4jl9gxf3w-source/nix/modules/flake-parts/autowire.nix': … from call site at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/modules.nix:837:128: 836| defs' = concatMap (m: 837| map (value: { inherit (m) file; inherit value; }) (addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value)) | ^ 838| ) defs; … while calling 'dischargeProperties' at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/modules.nix:908:25: 907| */ 908| dischargeProperties = def: | ^ 909| if def._type or "" == "merge" then … from call site at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/attrsets.nix:273:39: 272| then value 273| else { ${elemAt attrPath n} = atDepth (n + 1); }; | ^ 274| in atDepth 0; … while calling 'atDepth' at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/attrsets.nix:270:17: 269| len = length attrPath; 270| atDepth = n: | ^ 271| if n == len … from call site at /nix/store/2sz6la88drv77fxg87hb4li4jl9gxf3w-source/nix/modules/flake-parts/autowire.nix:31:11: 30| darwinModules = 31| forAllNixFiles "${self}/modules/darwin" | ^ 32| (fn: fn); … while calling 'forAllNixFiles' at /nix/store/2sz6la88drv77fxg87hb4li4jl9gxf3w-source/nix/modules/flake-parts/autowire.nix:5:29: 4| let 5| forAllNixFiles = dir: f: | ^ 6| if builtins.pathExists dir then … while calling anonymous lambda at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/trivial.nix:131:30: 130| */ 131| pipe = builtins.foldl' (x: f: f x); | ^ 132| … from call site at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/trivial.nix:131:33: 130| */ 131| pipe = builtins.foldl' (x: f: f x); | ^ 132| … while calling 'mapAttrs'' at /nix/store/x3d704r2qzq7h0m7i04liyzrvnng1pi2-source/attrsets.nix:1057:5: 1056| f: 1057| set: | ^ 1058| listToAttrs (map (attr: f attr set.${attr}) (attrNames set)); error: value is null while a set was expected ```
srid commented 2 hours ago

Culprit: https://github.com/srid/nixos-unified/commit/bf66125e692fbed6aa3abeaf386677b64d080a6b (not the cause, but it triggered the original cause)