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}