{
  lib,
  config,
  ...
}: {
  options.marleycfg.my = rec {
    name = lib.mkOption {
      type = with lib.types; str;
      default = "marley";
      description = "Your username, for use as your login name.";
    };

    username = lib.mkOption {
      type = with lib.types; str;
      default = name;
      description = "Your username, for external profiles.";
    };

    fullName = lib.mkOption {
      type = with lib.types; str;
      default = name;
      description = "Your full name, for display purposes.";
    };

    email = lib.mkOption {
      type = with lib.types; nullOr str;
      default = null;
      description = "Your email";
    };

    git.name = lib.mkOption {
      type = with lib.types; str;
      default = username;
      description = "Your git committer name.";
    };

    git.email = lib.mkOption {
      type = with lib.types; nullOr str;
      default = email;
      description = "Your git committer email.";
    };
  };

  config = let
    cfg = config.marleycfg.my;
  in {
    assertions = [
      {
        assertion = cfg.name != null;
        message = "marleycfg.my.name must be set.";
      }
    ];
  };
}
