76 lines
1.8 KiB
Nix
76 lines
1.8 KiB
Nix
/*
|
|
* The contents of this file are adapted from digga
|
|
* https://github.com/divnix/digga
|
|
*
|
|
* Licensed under the MIT license
|
|
*/
|
|
|
|
{ lib, inputs }:
|
|
let
|
|
# https://github.com/serokell/deploy-rs#overall-usage
|
|
system = "x86_64-linux";
|
|
pkgs = import inputs.nixpkgs { inherit system; };
|
|
deployPkgs = import inputs.nixpkgs {
|
|
inherit system;
|
|
overlays = [
|
|
inputs.deploy-rs.overlay
|
|
(self: super: { deploy-rs = { inherit (pkgs) deploy-rs; lib = super.deploy-rs.lib; }; })
|
|
];
|
|
};
|
|
getFqdn = c:
|
|
let
|
|
net = c.config.networking;
|
|
fqdn =
|
|
if (net ? domain) && (net.domain != null)
|
|
then "${net.hostName}.${net.domain}"
|
|
else net.hostName;
|
|
in
|
|
fqdn;
|
|
in
|
|
{
|
|
mkDeployNodes = systemConfigurations: extraConfig:
|
|
/*
|
|
*
|
|
Synopsis: mkNodes _systemConfigurations_ _extraConfig_
|
|
|
|
Generate the `nodes` attribute expected by deploy-rs
|
|
where _systemConfigurations_ are `nodes`.
|
|
|
|
_systemConfigurations_ should take the form of a flake's
|
|
_nixosConfigurations_. Note that deploy-rs does not currently support
|
|
deploying to darwin hosts.
|
|
|
|
_extraConfig_, if specified, will be merged into each of the
|
|
nodes' configurations.
|
|
|
|
Example _systemConfigurations_ input:
|
|
|
|
```
|
|
{
|
|
hostname-1 = {
|
|
fastConnection = true;
|
|
sshOpts = [ "-p" "25" ];
|
|
};
|
|
hostname-2 = {
|
|
sshOpts = [ "-p" "19999" ];
|
|
sshUser = "root";
|
|
};
|
|
}
|
|
```
|
|
*
|
|
*/
|
|
lib.recursiveUpdate
|
|
(lib.mapAttrs
|
|
(
|
|
_: c: {
|
|
hostname = getFqdn c;
|
|
profiles.system = {
|
|
user = "root";
|
|
path = deployPkgs.deploy-rs.lib.activate.nixos c;
|
|
};
|
|
}
|
|
)
|
|
systemConfigurations)
|
|
extraConfig;
|
|
}
|