Help with systemd sockets

In order to store and use my SSH host keys in a PGP format I’m trying the following approach inspired by home-manager’s gpg-agent.nix:

{ config, lib, ... }:
with lib;
let
  cfg = config.services.host-gpg-agent;
  agent-ssh-socket = "${cfg.homedir}/S.gpg-agent.ssh";
in {
  options.services.host-gpg-agent = with types; {
    enable = mkOption {
      type = bool;
      default = true;
    };

    homedir = mkOption {
      type = path;
      default = "/etc/gnupg";
    };

    package = mkOption {
      type = package;
      default = config.programs.gnupg.package;
    };

    verbose = mkOption {
      type = bool;
      default = true;
    };
  };

  config = mkIf cfg.enable {
    environment = {
      etc."gnupg/gpg-agent.conf".text = ''
        disable-scdaemon
        enable-ssh-support
      '';

      sessionVariables.GNUPGHOME = cfg.homedir;
      sessionVariables.SSH_AUTH_SOCK = agent-ssh-socket;
    };

    services.openssh.extraConfig = mkAfter "HostKeyAgent ${agent-ssh-socket}";

    systemd = {
      services.host-gpg-agent = rec {
        environment.GNUPGHOME = cfg.homedir;
        after = requires;
        requires = [ "host-gpg-agent-ssh.socket" "host-gpg-agent.socket" ];
        serviceConfig = {
          ExecReload = "${cfg.package}/bin/gpgconf --reload gpg-agent";
          ExecStart = "${cfg.package}/bin/gpg-agent --supervised"
            + optionalString cfg.verbose " --verbose";
        };
        unitConfig.RefuseManualStart = true;
      };

      sockets = {
        host-gpg-agent = {
          partOf = [ "host-gpg-agent.service" ];
          wantedBy = [ "sockets.target" ];
          socketConfig = {
            DirectoryMode = "0700";
            FileDescriptorName = "std";
            ListenStream = "${cfg.homedir}/S.gpg-agent";
            SocketMode = "0600";
          };
        };

        host-gpg-agent-ssh = {
          partOf = [ "host-gpg-agent.service" ];
          wantedBy = [ "sockets.target" ];
          socketConfig = {
            DirectoryMode = "0700";
            FileDescriptorName = "ssh";
            ListenStream = agent-ssh-socket;
            Service = "host-gpg-agent.service";
            SocketMode = "0600";
          };
        };
      };
    };
  };
}

The problem is that the socket files are not created automatically on startup. I have to restart the socket or service manually to get the files to appear where they should be.

Just restarted:

sudo ls -la /etc/gnupg/                                                                                                                              
total 14                                                                                                                                                
drwx------ 4 root root    9 May 14 14:32 .                                                                                                              
drwxr-xr-x 7 root root    8 May 14 13:31 ..
drwx------ 2 root root    3 Apr 29 17:18 crls.d
lrwxrwxrwx 1 root root   32 May 14 14:32 gpg-agent.conf -> /etc/static/gnupg/gpg-agent.conf
drwx------ 2 root root    8 May 14 10:46 private-keys-v1.d
-rw-r--r-- 1 root root  851 Apr 29 16:58 pubring.kbx
-rw------- 1 root root   32 Apr 29 16:58 pubring.kbx~
-rw-r----- 1 root root  719 May 14 10:51 sshcontrol
-rw------- 1 root root 1280 Apr 29 17:12 trustdb.gpg

After sudo gpg-connect-agent --homedir /etc/gnupg reloadagent /bye:

sudo ls -la /etc/gnupg/
total 16
drwx------ 4 root root   13 May 14 14:44 .
drwxr-xr-x 7 root root    8 May 14 13:31 ..
drwx------ 2 root root    3 Apr 29 17:18 crls.d
lrwxrwxrwx 1 root root   32 May 14 14:32 gpg-agent.conf -> /etc/static/gnupg/gpg-agent.conf
drwx------ 2 root root    8 May 14 10:46 private-keys-v1.d
-rw-r--r-- 1 root root  851 Apr 29 16:58 pubring.kbx
-rw------- 1 root root   32 Apr 29 16:58 pubring.kbx~
srwx------ 1 root root    0 May 14 14:44 S.gpg-agent
srwx------ 1 root root    0 May 14 14:44 S.gpg-agent.ssh
-rw-r----- 1 root root  719 May 14 10:51 sshcontrol
-rw------- 1 root root 1280 Apr 29 17:12 trustdb.gpg

Can anybody spot what I’m doing wrong?