ALPHA: wire is a tool to deploy nixos systems wire.althaea.zone/
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

implement nodeNixpkgs

authored by

marshmallow and committed by
GitHub
f82db941 b7025821

+73 -17
+4
CHANGELOG.md
··· 7 7 8 8 ## [Unreleased] - yyyy-mm-dd 9 9 10 + ### Added 11 + 12 + - `meta.nodeNixpkgs` was implemented. 13 + 10 14 ## [v1.0.0-alpha.1] - 2025-11-24 11 15 12 16 ### Added
+37 -1
doc/reference/meta.md
··· 14 14 15 15 _Type:_ A path or an instance of `nixpkgs`. 16 16 17 - _Default:_ `inputs.nixpkgs.outPath` 17 + _Default:_ `null` 18 18 19 19 _Examples:_ 20 20 ··· 60 60 }; 61 61 } 62 62 ``` 63 + 64 + ## meta.nodeNixpkgs 65 + 66 + Per-node nixpkgs to override `meta.nixpkgs`. 67 + 68 + See `meta.nixpkgs` examples for possible values. 69 + 70 + _Type:_ attribute set of path or an instance of `nixpkgs` 71 + 72 + _Default:_ `{ }` 73 + 74 + _Example:_ 75 + 76 + ```nix 77 + { 78 + meta = { 79 + nixpkgs = import <nixpkgs> { }; 80 + 81 + nodeNixpkgs = { 82 + node-b = import <special-nixpkgs> { }; 83 + }; 84 + }; 85 + 86 + node-a = 87 + { pkgs, ... }: 88 + { 89 + # uses <nixpkgs> (meta.nixpkgs) 90 + }; 91 + 92 + node-b = 93 + { pkgs, ... }: 94 + { 95 + # uses <special-nixpkgs> (meta.nodeNixpkgs.node-b) 96 + }; 97 + } 98 + ```
+32 -16
runtime/evaluate.nix
··· 31 31 ] 32 32 ) (builtins.filter (name: builtins.hasAttr name hive) (builtins.attrNames mergedHive)); 33 33 34 - resolvedNixpkgs = 34 + resolveNixpkgs = 35 + value: help: 36 + # support `<nixpkgs>` 37 + if builtins.isPath value then 38 + import value { } 39 + # support npins sources passed directly 40 + else if value ? "outPath" then 41 + import value { } 42 + # support `import <nixpkgs> { }` 43 + else if builtins.isAttrs value then 44 + value 45 + else 46 + builtins.abort "${help} was not a path, { outPath, .. }, or attrset. Was type: ${builtins.typeOf value}"; 47 + 48 + hiveGlobalNixpkgs = 35 49 if mergedHive.meta ? "nixpkgs" then 36 - # support `<nixpkgs>` 37 - if builtins.isPath mergedHive.meta.nixpkgs then 38 - import mergedHive.meta.nixpkgs { } 39 - # support npins sources passed directly 40 - else if mergedHive.meta.nixpkgs ? "outPath" then 41 - import mergedHive.meta.nixpkgs { } 42 - # support `import <nixpkgs> { }` 43 - else if builtins.isAttrs mergedHive.meta.nixpkgs then 44 - mergedHive.meta.nixpkgs 45 - else 46 - builtins.abort "meta.nixpkgs was not a path, { outPath, .. }, or attrset. Was type: ${builtins.typeOf mergedHive.meta.nixpkgs}" 50 + (resolveNixpkgs mergedHive.meta.nixpkgs "meta.nixpkgs") 47 51 else 48 52 builtins.abort "makeHive called without meta.nixpkgs specified."; 49 53 50 - isFlake = resolvedNixpkgs.lib.hasSuffix "-source" resolvedNixpkgs.path; 54 + getNodeNixpkgs = 55 + name: 56 + if mergedHive.meta ? "nodeNixpkgs" then 57 + if mergedHive.meta.nodeNixpkgs ? "${name}" then 58 + (resolveNixpkgs mergedHive.meta.nodeNixpkgs.${name} "meta.nodeNixpkgs.${name}") 59 + else 60 + hiveGlobalNixpkgs 61 + else 62 + hiveGlobalNixpkgs; 63 + 64 + nixpkgsIsFlake = nixpkgs: nixpkgs.lib.hasSuffix "-source" nixpkgs.path; 51 65 52 66 evaluateNode = 53 67 name: 54 68 let 55 - evalConfig = import (resolvedNixpkgs.path + "/nixos/lib/eval-config.nix"); 69 + nixpkgs = getNodeNixpkgs name; 70 + evalConfig = import (nixpkgs.path + "/nixos/lib/eval-config.nix"); 56 71 in 57 72 evalConfig { 58 73 modules = [ ··· 61 76 mergedHive.defaults 62 77 mergedHive.${name} 63 78 ] 64 - ++ (resolvedNixpkgs.lib.optional isFlake { 65 - config.nixpkgs.flake.source = resolvedNixpkgs.lib.mkDefault resolvedNixpkgs.path; 79 + ++ (nixpkgs.lib.optional (nixpkgsIsFlake nixpkgs) { 80 + config.nixpkgs.flake.source = nixpkgs.lib.mkDefault nixpkgs.path; 66 81 }); 67 82 system = null; 68 83 specialArgs = { ··· 70 85 } 71 86 // mergedHive.meta.specialArgs or { }; 72 87 }; 88 + 73 89 nodes = builtins.listToAttrs ( 74 90 map (name: { 75 91 inherit name;