{ config, lib, ... }: let cfg = config.hive.ssh; in { options.hive.ssh = { enable = lib.mkEnableOption "SSH keys and config"; keys = lib.mkOption { type = lib.types.listOf (lib.types.str); default = []; description = '' A list of SSH key names. Each one results in a id_ file in .ssh ''; }; sopsFile = lib.mkOption { type = lib.types.path; default = null; description = '' Path to the sops file containing the SSH keys. Requires a config key. And for each private key names in an keys. entry. ''; }; }; config = lib.mkIf cfg.enable { sops.secrets = { "ssh/config" = { inherit (cfg) sopsFile; key = "config"; path = "${config.home.homeDirectory}/.ssh/config"; }; } // builtins.listToAttrs (map (name: { name = "ssh/id_${name}"; value = { inherit (cfg) sopsFile; key = "keys/${name}"; path = "${config.home.homeDirectory}/.ssh/id_${name}"; }; }) cfg.keys); }; }