installer: use main config when creating new env
diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index a19a9fc..769ea5a 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -63,7 +63,7 @@
 	if err != nil {
 		return err
 	}
-	repo, err := soft.CloneRepo(addr, signer)
+	repo, err := soft.CloneRepository(addr, signer)
 	if err != nil {
 		return err
 	}
diff --git a/core/installer/cmd/welcome.go b/core/installer/cmd/welcome.go
index 0a38d13..68f3c36 100644
--- a/core/installer/cmd/welcome.go
+++ b/core/installer/cmd/welcome.go
@@ -56,7 +56,7 @@
 	if err != nil {
 		return err
 	}
-	repo, err := soft.CloneRepo(addr, signer)
+	repo, err := soft.CloneRepository(addr, signer)
 	if err != nil {
 		return err
 	}
diff --git a/core/installer/repoio.go b/core/installer/repoio.go
index 41c479f..aae063c 100644
--- a/core/installer/repoio.go
+++ b/core/installer/repoio.go
@@ -77,7 +77,7 @@
 	}
 	defer configF.Close()
 	var cfg Config
-	if err := readYaml(configF, &cfg); err != nil {
+	if err := ReadYaml(configF, &cfg); err != nil {
 		return Config{}, err
 	} else {
 		return cfg, nil
@@ -91,7 +91,7 @@
 	}
 	defer configF.Close()
 	var cfg AppConfig
-	if err := readYaml(configF, &cfg); err != nil {
+	if err := ReadYaml(configF, &cfg); err != nil {
 		return AppConfig{}, err
 	} else {
 		return cfg, nil
@@ -155,7 +155,7 @@
 		return nil, err
 	}
 	data := make(map[string]any)
-	if err := readYaml(inp, &data); err != nil {
+	if err := ReadYaml(inp, &data); err != nil {
 		return nil, err
 	}
 	return data, err
@@ -348,7 +348,7 @@
 	}
 }
 
-func readYaml[T any](r io.Reader, o *T) error {
+func ReadYaml[T any](r io.Reader, o *T) error {
 	if contents, err := ioutil.ReadAll(r); err != nil {
 		return err
 	} else {
diff --git a/core/installer/soft/client.go b/core/installer/soft/client.go
index 635ee0e..d23a2f7 100644
--- a/core/installer/soft/client.go
+++ b/core/installer/soft/client.go
@@ -94,7 +94,7 @@
 }
 
 func (ss *Client) GetRepo(name string) (*Repository, error) {
-	return CloneRepo(RepositoryAddress{ss.Addr, name}, ss.Signer)
+	return CloneRepository(RepositoryAddress{ss.Addr, name}, ss.Signer)
 }
 
 type RepositoryAddress struct {
@@ -118,7 +118,7 @@
 	return fmt.Sprintf("ssh://%s/%s", r.Addr, r.Name)
 }
 
-func CloneRepo(addr RepositoryAddress, signer ssh.Signer) (*Repository, error) {
+func CloneRepository(addr RepositoryAddress, signer ssh.Signer) (*Repository, error) {
 	c, err := git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
 		URL: addr.FullAddress(),
 		Auth: &gitssh.PublicKeys{
diff --git a/core/installer/welcome/env.go b/core/installer/welcome/env.go
index 4eea2c7..e08c073 100644
--- a/core/installer/welcome/env.go
+++ b/core/installer/welcome/env.go
@@ -98,24 +98,29 @@
 	}
 	{
 		repo, err := s.ss.GetRepo(req.Name)
-		if repo == nil {
+		if err != nil {
 			return err
 		}
-		if err := initNewEnv(s.ss, installer.NewRepoIO(repo, s.ss.Signer), s.nsCreator, req); err != nil {
+		var env installer.EnvConfig
+		r, err := s.repo.Reader("config.yaml")
+		if err != nil {
+			return err
+		}
+		defer r.Close()
+		if err := installer.ReadYaml(r, &env); err != nil {
+			return err
+		}
+		if err := initNewEnv(s.ss, installer.NewRepoIO(repo, s.ss.Signer), s.nsCreator, req, env); err != nil {
 			return err
 		}
 	}
 	{
-		repo, err := s.ss.GetRepo("pcloud")
-		if err != nil {
-			return err
-		}
 		ssPubKey, err := s.ss.GetPublicKey()
 		if err != nil {
 			return err
 		}
 		if err := addNewEnv(
-			installer.NewRepoIO(repo, s.ss.Signer),
+			s.repo,
 			req,
 			keys,
 			ssPubKey,
@@ -126,22 +131,27 @@
 	return c.String(http.StatusOK, "OK")
 }
 
-func initNewEnv(ss *soft.Client, r installer.RepoIO, nsCreator installer.NamespaceCreator, req createEnvReq) error {
+func initNewEnv(
+	ss *soft.Client,
+	r installer.RepoIO,
+	nsCreator installer.NamespaceCreator,
+	req createEnvReq,
+	env installer.EnvConfig,
+) error {
 	appManager, err := installer.NewAppManager(r, nsCreator)
 	if err != nil {
 		return err
 	}
 	appsRepo := installer.NewInMemoryAppRepository(installer.CreateAllApps())
-	// TODO(giolekva): env name and ip should come from pcloud repo config.yaml
 	// TODO(giolekva): private domain can be configurable as well
 	config := installer.Config{
 		Values: installer.Values{
-			PCloudEnvName:   "pcloud",
+			PCloudEnvName:   env.Name,
 			Id:              req.Name,
 			ContactEmail:    req.ContactEmail,
 			Domain:          req.Domain,
 			PrivateDomain:   fmt.Sprintf("p.%s", req.Domain),
-			PublicIP:        "46.49.35.44",
+			PublicIP:        env.PublicIP,
 			NamespacePrefix: fmt.Sprintf("%s-", req.Name),
 		},
 	}