main
 1{
 2  den,
 3  inputs,
 4  self,
 5  lib,
 6  ...
 7}: let
 8  allHosts = lib.mergeAttrsList (lib.attrValues den.hosts);
 9  deployableHosts =
10    lib.filterAttrs (_: host: host.settings.core.openssh.server.enable) allHosts;
11in {
12  flake-file.inputs.deploy-rs = {
13    url = "github:serokell/deploy-rs";
14    inputs.nixpkgs.follows = "nixpkgs";
15    inputs.flake-compat.follows = "flake-compat";
16  };
17
18  flake.deploy.nodes =
19    lib.mapAttrs (name: host: {
20      hostname = host.hostName;
21      profilesOrder = ["system"];
22      profiles.system = {
23        path =
24          inputs.deploy-rs.lib.${host.system}.activate.${host.class}
25          self."${host.class}Configurations".${name};
26        sshUser = "root";
27        user = "root";
28      };
29    })
30    deployableHosts;
31
32  flake.checks =
33    builtins.mapAttrs (
34      system: deployLib: deployLib.deployChecks self.deploy
35    )
36    inputs.deploy-rs.lib;
37
38  perSystem = {system, ...}: {
39    devshells.default = {
40      commands = [
41        {
42          name = "deploy";
43          package = inputs.deploy-rs.packages.${system}.deploy-rs;
44          help = "Deploy profiles to remote servers";
45        }
46      ];
47    };
48  };
49}