{ config, lib, pkgs, ... }:
let
  cfg = config.my.home.ssh;
in
{
  options.my.home.ssh = with lib; {
    enable = my.mkDisableOption "ssh configuration";

    mosh = {
      enable = my.mkDisableOption "mosh configuration";

      package = mkPackageOption pkgs "mosh" { };
    };
  };

  config = lib.mkIf cfg.enable (lib.mkMerge [
    {
      programs.ssh = {
        enable = true;

        includes = [
          # Local configuration, not-versioned
          "config.local"
        ];

        matchBlocks = {
          "github.com" = {
            hostname = "github.com";
            identityFile = "~/.ssh/shared_rsa";
            user = "git";
          };

          "gitlab.com" = {
            hostname = "gitlab.com";
            identityFile = "~/.ssh/shared_rsa";
            user = "git";
          };

          "git.sr.ht" = {
            hostname = "git.sr.ht";
            identityFile = "~/.ssh/shared_rsa";
            user = "git";
          };

          "git.belanyi.fr" = {
            hostname = "git.belanyi.fr";
            identityFile = "~/.ssh/shared_rsa";
            user = "git";
          };

          porthos = {
            hostname = "37.187.146.15";
            identityFile = "~/.ssh/shared_rsa";
            user = "ambroisie";
          };
        };

        extraConfig = ''
          AddKeysToAgent yes
        '';
      };
    }

    (lib.mkIf cfg.mosh.enable {
      home.packages = [
        cfg.mosh.package
      ];
    })
  ]);
}