{
  config,
  lib,
  ...
}: let
  cfg = config.hive.wg.client;
  peers = import ./peers.nix {inherit lib;};
in {
  options.hive.wg.client = {
    enable = lib.mkEnableOption "Enable WireGuard client";
    autoConnect = lib.mkOption {
      type = lib.types.bool;
      default = false;
      description = "Automatically connect to the WireGuard server with systemd";
    };
    peer = lib.mkOption {
      type = lib.types.singleLineStr;
      example = "comfy-station";
      description = "The name of the peer defined in peers.nix to incarnate";
    };
    privateKeyFile = lib.mkOption {
      type = lib.types.path;
      description = "Path to the private key file for the WireGuard client";
    };
  };

  config = lib.mkIf cfg.enable {
    networking.wg-quick.interfaces.wg0 = {
      address = peers.clientAddress cfg.peer;
      inherit (cfg) privateKeyFile;
      autostart = cfg.autoConnect;
      peers = peers.forClient cfg.peer;
    };
  };
}
