{
  name,
  config,
  lib,
  kubenix,
  images,
  ...
}:
with lib; {
  imports = with kubenix.modules; [test submodules k8s docker];

  test = {
    name = "k8s-submodule";
    description = "Simple k8s submodule test";
    assertions = [
      {
        message = "Submodule has correct name set";
        assertion = (head config.kubernetes.objects).metadata.name == "passthru";
      }
      {
        message = "Should expose docker image";
        assertion = (head config.docker.export).imageName == "xtruder/nginx";
      }
    ];
  };

  kubernetes.namespace = "test-namespace";

  submodules.imports = [
    {
      module = {
        name,
        config,
        ...
      }: {
        imports = with kubenix.modules; [submodule k8s docker];

        config = {
          submodule = {
            name = "test-submodule";
            passthru = {
              kubernetes.objects = config.kubernetes.objects;
              docker.images = config.docker.images;
            };
          };

          kubernetes.resources.pods.nginx = {
            metadata.name = name;
            spec.containers.nginx.image = config.docker.images.nginx.path;
          };

          docker.images.nginx.image = images.nginx;
        };
      };
    }
  ];

  kubernetes.api.defaults = [
    {
      propagate = true;
      default.metadata.labels.my-label = "my-value";
    }
  ];

  submodules.instances.passthru = {
    submodule = "test-submodule";
  };

  submodules.instances.no-passthru = {
    submodule = "test-submodule";
    passthru.enable = false;
  };
}
