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),
 		},
 	}
