| 2 Sep 2022 |
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 |
@yuka:yuka.dev | but nix-instantiate as entry point, not nix build | 21:07:41 |
@yuka:yuka.dev | nix-instantiate -E ... builtins.getFlake .... | 21:07:56 |
@yuka:yuka.dev | * nix-instantiate -E '... builtins.getFlake ....' | 21:08:02 |
Linux Hackerman | aah. I don't think so then. Not sure though. | 21:08:16 |