{ config, lib, ... }:
let
  cfg = config.luj.programs.ssh-client;
in
with lib;
{
  options.luj.programs.ssh-client = {
    enable = mkEnableOption "Enable ssh client";
  };

  config = mkIf cfg.enable {
    programs.ssh = {
      enable = true;
      matchBlocks =
        lib.mapAttrs (n: v: {
          hostname = "${n}.${lib.snowfield.${n}.tld}";
          user = v.sshUser;
          port = v.sshPort;
        }) lib.snowfield
        // {
          sas = {
            hostname = "sas.eleves.ens.fr";
            user = "jmalka";
          };
          router = {
            hostname = "vpn.saumon.network";
          };
          mails = {
            hostname = "192.168.0.76";
            proxyJump = "router";
          };

          proxy-telecom = {
            hostname = "ssh.enst.fr";
            user = "jmalka";
          };

          lame24 = {
            hostname = "lame24.enst.fr";
            user = "jmalka";
            proxyJump = "proxy-telecom";
          };

          epyc = {
            hostname = "epyc.infra.newtype.fr";
            user = "luj";
            proxyJump = "tower";
          };

          exps = {
            hostname = "192.168.0.240";
            proxyJump = "router";
          };

        };
    };
  };
}