| 2 Sep 2022 |
@yuka:yuka.dev | There is still an interface, even if it's at a different level | 18:44:11 |
Linux Hackerman | (aside: an interface that I'd love to see changed, to avoid mixing the nodes with special attrs like defaults and meta!) | 18:45:07 |
Zhaofeng Li | In reply to @yuka:yuka.dev I mean the interface between that expression and my flake That's also poorly defined at the moment, documented mostly as examples. One possibility is to use the NixOS module system to define the schema, which is what NixOps may be heading towards: https://github.com/NixOS/nixops/pull/1508 | 18:47:31 |
Linux Hackerman | nixos modules for that would be great, I think that approach was pioneered by infinisil in nixus | 18:48:21 |
Linux Hackerman | defining modules that have the entire deployment as their scope instead of an individual host is 😘🤌 | 18:49:15 |
@yuka:yuka.dev | definitely, but I'd like to not mix up multiple issues/improvements too much | 18:49:49 |
Linux Hackerman | yeah. I'm also not sure that should be colmena's responsibility. | 18:50:11 |
@yuka:yuka.dev | https://github.com/yu-re-ka/colmena/commit/cd558fee7f4251719d1101f9677dce2581f6f58e | 19:19:20 |
@yuka:yuka.dev | This is enough changes to make it work for me | 19:19:34 |
@yuka:yuka.dev | In my flake, I now do:
outputs = { self, nixpkgs, colmena, ... }@inputs: {
colmenaEval = colmena.evalHive {
# whatever was in outputs.colmena before
};
nixosConfigurations = self.outputs.colmenaEval.nodes;
};
| 20:11:45 |
@yuka:yuka.dev | though somehow it does not like to do pure eval | 20:12:14 |
Zhaofeng Li | Yeah, if the git repo is dirty, nix flake metadata will not return a locked flake URI that's usable in pure evaluation mode. That's one gotcha I encountered when looking into pure eval. | 20:13:32 |
@yuka:yuka.dev | Does the assets wrapper flake solve this? | 20:14:10 |
Zhaofeng Li | Yes, the locked URI of the assets flake encompasses the inputs as well. | 20:16:01 |
Zhaofeng Li | Your solution should work if the git repo is clean | 20:16:35 |
@yuka:yuka.dev | In reply to @zhaofeng:zhaofeng.li Yes, the locked URI of the assets flake encompasses the inputs as well. also if it is a dirty git repo | 20:16:50 |
@yuka:yuka.dev | In reply to @zhaofeng:zhaofeng.li Yes, the locked URI of the assets flake encompasses the inputs as well. * also if one of the inputs is a dirty git repo? | 20:16:56 |
@yuka:yuka.dev | I mean it would be neat if I could also use --override-input etc. with colmena | 20:17:16 |
Zhaofeng Li | * Yeah, if the git repo is dirty, `nix flake metadata` will not return a locked flake URI (with the `narHash` query parameter) that's usable in pure evaluation mode. That's one gotcha I encountered when looking into pure eval. | 20:21:04 |
@yuka:yuka.dev | In reply to @linus:schreibt.jetzt
I'm currently doing a hack like
nixosConfigurations = lib.mapAttrs (name: config: let
nodeNixpkgs = self.outputs.colmena.meta.nodeNixpkgs.${name} or self.outputs.colmena.meta.nixpkgs;
nodeNixos = import (nodeNixpkgs.path + "/nixos/lib/eval-config.nix");
in nodeNixos {
modules = [
self.outputs.colmena.defaults
config
inputs.colmena.nixosModules.deploymentOptions
{
_module.args.name = name;
_module.args.nodes = self.outputs.nixosConfigurations;
nixpkgs.overlays = [ nodeNixpkgs.lib.flakeOverlay (import ./overlay.nix) ];
}
];
inherit (nodeNixpkgs) system;
}
) (builtins.removeAttrs self.outputs.colmena ["meta" "defaults"]);
to be able to get at least an approximation of the configs (enough to be able to build it in hydra, for example)
there is a way easier thing to do this | 20:48:11 |
@yuka:yuka.dev | that doesn't need any changes to colmena | 20:48:20 |
@yuka:yuka.dev |
nixosConfigurations = (import (inputs.colmena + "/src/nix/hive/eval.nix") {
rawFlake = self;
colmenaOptions = import (inputs.colmena + "/src/nix/hive/options.nix");
colmenaModules = import (inputs.colmena + "/src/nix/hive/modules.nix");
}).nodes;
| 20:48:36 |
@yuka:yuka.dev | * nixosConfigurations = (import (inputs.colmena + "/src/nix/hive/eval.nix") {
rawFlake = self;
colmenaOptions = import (inputs.colmena + "/src/nix/hive/options.nix");
colmenaModules = import (inputs.colmena + "/src/nix/hive/modules.nix");
}).nodes;
| 20:48:43 |
@yuka:yuka.dev | And now I don't actually mind that colmena magically adds these expressions, because I will just keep using the colmena binary pinned in my flake inputs, so I know that colmena uses the exact same hive expression as my nixosConfigurations shim | 20:49:34 |
Linux Hackerman | that is nicer. Thanks | 20:50:36 |
@yuka:yuka.dev | Can any of the evaluators take advantage of the eval cache? | 21:05:54 |
Linux Hackerman | the eval cache requires pure evaluation, so AFAIU no currently | 21:06:19 |
Linux Hackerman | but I might have missed something on the development of pure evaluation | 21:06:28 |
Linux Hackerman | if pure evaluation is working, it should use the eval cache as well | 21:06:46 |
@yuka:yuka.dev | colmena does use pure evaluation mode | 21:07:25 |