installer: create namespaces with kube client
diff --git a/core/installer/app.go b/core/installer/app.go
index 2b94770..8d79c58 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -13,10 +13,11 @@
 var valuesTmpls embed.FS
 
 type App struct {
-	Name      string
-	Templates []*template.Template
-	Schema    string
-	Readme    *template.Template
+	Name       string
+	Namespaces []string
+	Templates  []*template.Template
+	Schema     string
+	Readme     *template.Template
 }
 
 type AppRepository interface {
@@ -87,6 +88,7 @@
 	}
 	return App{
 		"ingress-private",
+		[]string{"ingress-private"},
 		[]*template.Template{
 			tmpls.Lookup("ingress-private.yaml"),
 		},
@@ -102,6 +104,7 @@
 	}
 	return App{
 		"certificate-issuer-private",
+		[]string{},
 		[]*template.Template{
 			tmpls.Lookup("certificate-issuer-private.yaml"),
 		},
@@ -117,6 +120,7 @@
 	}
 	return App{
 		"certificate-issuer-public",
+		[]string{},
 		[]*template.Template{
 			tmpls.Lookup("certificate-issuer-public.yaml"),
 		},
@@ -132,6 +136,7 @@
 	}
 	return App{
 		"core-auth",
+		[]string{"core-auth"},
 		[]*template.Template{
 			tmpls.Lookup("core-auth-storage.yaml"),
 			tmpls.Lookup("core-auth.yaml"),
@@ -148,6 +153,7 @@
 	}
 	return App{
 		"vaultwarden",
+		[]string{"app-vaultwarden"},
 		[]*template.Template{
 			tmpls.Lookup("vaultwarden.yaml"),
 		},
@@ -163,6 +169,7 @@
 	}
 	return App{
 		"matrix",
+		[]string{"app-matrix"},
 		[]*template.Template{
 			tmpls.Lookup("matrix-storage.yaml"),
 			tmpls.Lookup("matrix.yaml"),
@@ -179,6 +186,7 @@
 	}
 	return App{
 		"pihole",
+		[]string{"app-pihole"},
 		[]*template.Template{
 			tmpls.Lookup("pihole.yaml"),
 		},
@@ -194,6 +202,7 @@
 	}
 	return App{
 		"maddy",
+		[]string{"app-maddy"},
 		[]*template.Template{
 			tmpls.Lookup("maddy.yaml"),
 		},
@@ -209,6 +218,7 @@
 	}
 	return App{
 		"qbittorrent",
+		[]string{"app-qbittorrent"},
 		[]*template.Template{
 			tmpls.Lookup("qbittorrent.yaml"),
 		},
@@ -224,6 +234,7 @@
 	}
 	return App{
 		"jellyfin",
+		[]string{"app-jellyfin"},
 		[]*template.Template{
 			tmpls.Lookup("jellyfin.yaml"),
 		},
@@ -239,6 +250,7 @@
 	}
 	return App{
 		"rpuppy",
+		[]string{"app-rpuppy"},
 		[]*template.Template{
 			tmpls.Lookup("rpuppy.yaml"),
 		},
@@ -254,6 +266,7 @@
 	}
 	return App{
 		"headscale",
+		[]string{"app-headscale"},
 		[]*template.Template{
 			tmpls.Lookup("headscale.yaml"),
 		},
@@ -269,6 +282,7 @@
 	}
 	return App{
 		"tailscale-proxy",
+		[]string{"tailscale-proxy"},
 		[]*template.Template{
 			tmpls.Lookup("tailscale-proxy.yaml"),
 		},
@@ -284,6 +298,7 @@
 	}
 	return App{
 		"metallb-config-env",
+		[]string{"metallb-config"},
 		[]*template.Template{
 			tmpls.Lookup("metallb-config-env.yaml"),
 		},
@@ -299,6 +314,7 @@
 	}
 	return App{
 		"env-manager",
+		[]string{"env-manager"},
 		[]*template.Template{
 			tmpls.Lookup("env-manager.yaml"),
 		},
@@ -314,6 +330,7 @@
 	}
 	return App{
 		"welcome",
+		[]string{"app-welcome"},
 		[]*template.Template{
 			tmpls.Lookup("welcome.yaml"),
 		},
@@ -329,6 +346,7 @@
 	}
 	return App{
 		"ingress-public",
+		[]string{"ingress-public"},
 		[]*template.Template{
 			tmpls.Lookup("ingress-public.yaml"),
 		},
@@ -344,6 +362,7 @@
 	}
 	return App{
 		"cert-manager",
+		[]string{"cert-manager"},
 		[]*template.Template{
 			tmpls.Lookup("cert-manager.yaml"),
 		},
@@ -359,6 +378,7 @@
 	}
 	return App{
 		"cert-manager-webhook-gandi",
+		[]string{},
 		[]*template.Template{
 			tmpls.Lookup("cert-manager-webhook-gandi.yaml"),
 		},
@@ -374,6 +394,7 @@
 	}
 	return App{
 		"cert-manager-webhook-gandi-role",
+		[]string{},
 		[]*template.Template{
 			tmpls.Lookup("cert-manager-webhook-gandi-role.yaml"),
 		},
@@ -389,6 +410,7 @@
 	}
 	return App{
 		"csi-driver-smb",
+		[]string{"csi-driver-smb"},
 		[]*template.Template{
 			tmpls.Lookup("csi-driver-smb.yaml"),
 		},
@@ -404,6 +426,7 @@
 	}
 	return App{
 		"resource-renderer-controller",
+		[]string{"rr-controller"},
 		[]*template.Template{
 			tmpls.Lookup("resource-renderer-controller.yaml"),
 		},
@@ -419,6 +442,7 @@
 	}
 	return App{
 		"headscale-controller",
+		[]string{"headscale-controller"},
 		[]*template.Template{
 			tmpls.Lookup("headscale-controller.yaml"),
 		},