{
  lib,
  self,
  ...
}: {
  # Create a NixOS module option on a single line.
  mkOpt = type: default: description:
    lib.mkOption {inherit type default description;};

  # Create a simple bool options
  mkBool = default: description:
    lib.mkOption {
      inherit default description;
      type = lib.types.bool;
    };

  # Create a module compliant with the NixOS module system.
  mkModule = {
    name ? "puzzlevision",
    class,
    modules,
  }: {
    _class = class;
    # Template: "[path-to-flake]/flake.nix#[class-name]Modules.[module-name]"
    # Example: "[path-to-flake]/flake.nix#nixosModules.system.audio"
    _file = "${self.outPath}/flake.nix#${class}Modules.${name}";
    imports = modules;
  };

  # TODO: add mkIfElse function
}