{ lib, ... }:

with lib;

{
  meta.maintainers = [ maintainers.rycee ];

  options.submoduleSupport = {
    enable = mkOption {
      type = types.bool;
      default = false;
      internal = true;
      description = ''
        Whether the Home Manager module system is used as a submodule
        in, for example, NixOS or nix-darwin.
      '';
    };

    externalPackageInstall = mkOption {
      type = types.bool;
      default = false;
      internal = true;
      description = ''
        Whether the packages of {option}`home.packages` are
        installed separately from the Home Manager activation script.
        In NixOS, for example, this may be accomplished by installing
        the packages through
        {option}`users.users.‹name?›.packages`.
      '';
    };
  };

  config = {
    # To make it easier for the end user to override the values in the
    # configuration depending on the installation method, we set default values
    # for the arguments that are defined in the NixOS/nix-darwin modules.
    #
    # Without these defaults, these attributes would simply not exist, and the
    # module system can not inform modules about their non-existence; see
    # https://github.com/NixOS/nixpkgs/issues/311709#issuecomment-2110861842
    _module.args = {
      osConfig = mkDefault null;
      nixosConfig = mkDefault null;
      darwinConfig = mkDefault null;
    };
  };
}