main
 1{
 2  lib,
 3  config,
 4  inputs,
 5  self,
 6  ...
 7}: let
 8  prefix = config.flake.meta.host.prefix;
 9  hostsMeta = config.flake.meta.host.hosts;
10  collectHostsModules = modules:
11    lib.filterAttrs
12    (name: _:
13      (lib.hasPrefix prefix name)
14      && (hostsMeta.${lib.removePrefix prefix name}.deploy))
15    modules;
16in {
17  flake.deploy.nodes =
18    lib.pipe
19    (collectHostsModules config.flake.modules.nixos)
20    [
21      (lib.mapAttrs' (
22        name: value: {
23          name = lib.removePrefix prefix name;
24          inherit value;
25        }
26      ))
27      (lib.mapAttrs' (
28        name: _: {
29          inherit name;
30          value = {
31            hostname = name;
32            profiles.system = {
33              user = "root";
34              sshUser = "root";
35              path =
36                inputs.deploy-rs.lib.${hostsMeta.${name}.system}.activate.nixos
37                self.nixosConfigurations.${name};
38            };
39          };
40        }
41      ))
42    ];
43  flake.checks =
44    builtins.mapAttrs (
45      system: deployLib: deployLib.deployChecks self.deploy
46    )
47    inputs.deploy-rs.lib;
48}