{ lib, ... }:

{
  options.state = let
    packagesSubmodule = { lib, ... }: {
      options = {
        packages = lib.mkOption {
          type = with lib.types; attrsOf package;
          default = { };
          description = ''
            Source of truth containing a set of packages. Useful for options
            where there are no specific options for a package or as a unified
            source of truth for different module options requiring a package.
          '';
          example = lib.literalExpression ''
            {
              diff = pkgs.vimdiff;
              pager = pkgs.bat;
              editor = pkgs.neovim;
            }
          '';
        };
      };
    };
  in lib.mkOption { type = lib.types.submodule packagesSubmodule; };
}
