| # SPDX-FileCopyrightText: 2024 Auxolotl Infrastructure Contributors |
| # SPDX-FileCopyrightText: 2024 Clicks Codes |
| # |
| # SPDX-License-Identifier: GPL-3.0-only |
| |
| { lib, inputs }: |
| let |
| inherit (inputs) deploy-rs; |
| in |
| { |
| ## Create deployment configuration for use with deploy-rs. |
| ## |
| ## ```nix |
| ## mkDeploy { |
| ## inherit self; |
| ## overrides = { |
| ## my-host.system.sudo = "doas -u"; |
| ## }; |
| ## } |
| ## ``` |
| ## |
| #@ { self: Flake, overrides: Attrs ? {} } -> Attrs |
| deploy = { |
| mkDeploy = |
| { |
| self, |
| overrides ? { }, |
| }: |
| let |
| hosts = self.nixosConfigurations or { }; |
| names = builtins.attrNames hosts; |
| nodes = lib.foldl ( |
| result: name: |
| let |
| host = hosts.${name}; |
| user = host.config.users.infra or null; |
| inherit (host.pkgs) system; |
| in |
| result |
| // { |
| ${name} = (overrides.${name} or { }) // { |
| hostname = overrides.${name}.hostname or "${name}"; |
| profiles = (overrides.${name}.profiles or { }) // { |
| system = |
| (overrides.${name}.profiles.system or { }) |
| // { |
| path = deploy-rs.lib.${system}.activate.nixos host; |
| } |
| // { |
| user = "root"; |
| } |
| // lib.optionalAttrs host.config.clicks.security.doas.enable { sudo = "doas -u"; }; |
| }; |
| }; |
| } |
| ) { } names; |
| in |
| { |
| inherit nodes; |
| }; |
| }; |
| } |