{ config, lib, ... }:
let
  inherit (lib.mjallen.module) mkModule mkOpt mkBoolOpt;
in
mkModule {
  name = "sops";
  description = "SOPS secret management";
  options = {
    defaultSopsFile = mkOpt lib.types.path null "Default sops file.";

    generateAgeKey = mkBoolOpt true "Whether to automatically generate an age key if one doesn't exist.";

    ageKeyPath =
      mkOpt (lib.types.nullOr lib.types.str) null
        "Custom path to the age key file. If null, will use the default path.";

    sshKeyPaths = mkOpt (lib.types.listOf lib.types.str) [
      "/etc/ssh/ssh_host_ed25519_key"
    ] "SSH Key paths to use.";

    validateSopsFiles = mkBoolOpt false "Whether to validate that sops files exist.";
  };
  config = {
    sops = {
      inherit (config.mjallen.sops) defaultSopsFile validateSopsFiles;

      age = {
        inherit (config.mjallen.sops) generateAgeKey;

        keyFile =
          if config.mjallen.sops.ageKeyPath != null then
            config.mjallen.sops.ageKeyPath
          else
            "${config.users.users.${config.mjallen.user.name}.home}/.config/sops/age/keys.txt";

        sshKeyPaths = config.mjallen.sops.sshKeyPaths;
      };
    };
  };
}
