/* The contents of this file are adapted from digga https://github.com/divnix/digga Licensed under the MIT license */ { lib, inputs }: let 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 = let system = c.pkgs.system; # Unmodified nixpkgs pkgs = import inputs.nixpkgs { inherit system; }; # nixpkgs with deploy-rs overlay but force the nixpkgs package deployPkgs = import inputs.nixpkgs { inherit system; overlays = [ inputs.deploy-rs.overlay # or deploy-rs.overlays.default (self: super: { deploy-rs = { inherit (pkgs) deploy-rs; lib = super.deploy-rs.lib; }; }) ]; }; in { user = "root"; path = deployPkgs.deploy-rs.lib.activate.nixos c; }; }) systemConfigurations) extraConfig; }