main
1{
2 den,
3 inputs,
4 self,
5 lib,
6 ...
7}: let
8 # TODO: Standalone Home Manager deploy profile
9 allHosts = lib.mergeAttrsList (lib.attrValues den.hosts);
10 deployableHosts =
11 lib.filterAttrs
12 (
13 n: v:
14 v.hasAspect den.aspects.core.openssh.access
15 && !(v.hasAspect den.aspects.core.installer)
16 )
17 allHosts;
18in {
19 flake-file.inputs.deploy-rs = {
20 url = "github:serokell/deploy-rs";
21 inputs.nixpkgs.follows = "nixpkgs";
22 inputs.flake-compat.follows = "flake-compat";
23 };
24
25 flake.deploy.nodes =
26 lib.mapAttrs (name: host: {
27 hostname = host.hostName;
28 profilesOrder = ["system"];
29 profiles.system = {
30 path =
31 inputs.deploy-rs.lib.${host.system}.activate.${host.class}
32 self."${host.class}Configurations".${name};
33 sshUser = "hpcesia";
34 user = "root";
35 interactiveSudo = true;
36 };
37 })
38 deployableHosts;
39
40 flake.checks =
41 builtins.mapAttrs (
42 system: deployLib: deployLib.deployChecks self.deploy
43 )
44 inputs.deploy-rs.lib;
45
46 den.schema.flake-parts.includes = [
47 {
48 devshell = {system, ...}: {
49 commands = [
50 {
51 name = "deploy";
52 package = inputs.deploy-rs.packages.${system}.deploy-rs;
53 help = "Deploy profiles to remote servers";
54 }
55 ];
56 };
57 }
58 ];
59}