appmanager: refactor schema into interface, introduce cuelang
diff --git a/core/installer/cmd/bootstrap.go b/core/installer/cmd/bootstrap.go
index d177ff5..0aa5230 100644
--- a/core/installer/cmd/bootstrap.go
+++ b/core/installer/cmd/bootstrap.go
@@ -7,8 +7,6 @@
 	"os"
 
 	"github.com/spf13/cobra"
-	"helm.sh/helm/v3/pkg/action"
-	"helm.sh/helm/v3/pkg/kube"
 
 	"github.com/giolekva/pcloud/core/installer"
 )
@@ -105,31 +103,11 @@
 	b := installer.NewBootstrapper(
 		installer.NewFSChartLoader(bootstrapFlags.chartsDir),
 		nsCreator,
-		actionConfigFactory{rootFlags.kubeConfig},
+		installer.NewActionConfigFactory(rootFlags.kubeConfig),
 	)
 	return b.Run(envConfig)
 }
 
-type actionConfigFactory struct {
-	kubeConfigPath string
-}
-
-func (f actionConfigFactory) New(namespace string) (*action.Configuration, error) {
-	config := new(action.Configuration)
-	if err := config.Init(
-		kube.GetConfig(f.kubeConfigPath, "", namespace),
-		namespace,
-		"",
-		func(fmtString string, args ...any) {
-			fmt.Printf(fmtString, args...)
-			fmt.Println()
-		},
-	); err != nil {
-		return nil, err
-	}
-	return config, nil
-}
-
 func newServiceIPs(from, to string) (installer.EnvServiceIPs, error) {
 	f, err := netip.ParseAddr(from)
 	if err != nil {