# https://l-lin.github.io/nix/share-variables-between-Nix-modules

{ config, lib, pkgs, ... }:
let
  defaultUser = "yoda";

  defaultName = "Daniel Langbein";
  defaultEmail = "daniel@systemli.org";
  defaultMaintainer = "langbeindaniel";
  defaultFingerprint = "94F3D3DDAC22802258FC044B6C47C753F0823002";
in
{
  options.yoda.user = lib.mkOption {
    # You can find the exhaustive list of types here: https://nlewo.github.io/nixos-manual-sphinx/development/option-types.xml.html
    type = lib.types.str;
    default = defaultUser;
    description = "Primary Linux user name. Must not include regex special characters.";
  };
  options.yoda.name = lib.mkOption {
    type = lib.types.str;
    default = defaultName;
    description = "Personal name of primary user.";
  };
  options.yoda.email = lib.mkOption {
    type = lib.types.str;
    default = defaultEmail;
    description = "Personal email address of primary user.";
  };
  options.yoda.maintainer = lib.mkOption {
    type = lib.types.str;
    default = defaultMaintainer;
    description = "Personal nix maintainer identifier of primary user";
  };
  options.yoda.fingerprint = lib.mkOption {
    type = lib.types.str;
    default = defaultFingerprint;
    description = "Personal key fingerprint of primary user as listed by `gpg --list-keys`.";
  };

  config = {
    lib.maintainers."${defaultMaintainer}" = {
      name = defaultName;
      email = defaultEmail;
      keys = [{
        fingerprint = defaultFingerprint;
      }];
    };
  };
}