diff --git a/core/installer/cmd/env.go b/core/installer/cmd/env.go
index 4b258b1..798b89f 100644
--- a/core/installer/cmd/env.go
+++ b/core/installer/cmd/env.go
@@ -4,22 +4,17 @@
 package main
 
 import (
-	"bytes"
 	"embed"
 	"encoding/base64"
 	"fmt"
-	"io"
 	"log"
 	"os"
 	"path"
 	"text/template"
 
-	"golang.org/x/exp/slices"
-
 	"github.com/giolekva/pcloud/core/installer"
 	"github.com/giolekva/pcloud/core/installer/soft"
 	"github.com/spf13/cobra"
-	"sigs.k8s.io/yaml"
 )
 
 //go:embed env-tmpl
@@ -27,6 +22,8 @@
 
 var createEnvFlags struct {
 	name         string
+	ip           string
+	port         int
 	adminPrivKey string
 }
 
@@ -42,6 +39,18 @@
 		"",
 	)
 	cmd.Flags().StringVar(
+		&createEnvFlags.ip,
+		"ip",
+		"",
+		"",
+	)
+	cmd.Flags().IntVar(
+		&createEnvFlags.port,
+		"ip",
+		22,
+		"",
+	)
+	cmd.Flags().StringVar(
 		&createEnvFlags.adminPrivKey,
 		"admin-priv-key",
 		"",
@@ -55,7 +64,7 @@
 	if err != nil {
 		return err
 	}
-	ss, err := soft.NewClient("192.168.0.211", 22, adminPrivKey, log.Default())
+	ss, err := soft.NewClient(createEnvFlags.ip, createEnvFlags.port, adminPrivKey, log.Default())
 	if err != nil {
 		return err
 	}
@@ -82,69 +91,42 @@
 	if err := ss.AddCollaborator(createEnvFlags.name, fluxUserName); err != nil {
 		return err
 	}
-	repo, err := ss.CloneRepository("pcloud")
+	repo, err := ss.GetRepo("pcloud")
 	if err != nil {
 		return err
 	}
-	wt, err := repo.Worktree()
+	repoIO := installer.NewRepoIO(repo, ss.Signer)
+	kust, err := repoIO.ReadKustomization("environments/kustomization.yaml")
 	if err != nil {
 		return err
 	}
-	envKust := "environments/kustomization.yaml"
-	envKustFile, err := wt.Filesystem.Open(envKust)
-	if err != nil {
-		return err
-	}
-	kust, err := installer.ReadKustomization(envKustFile)
-	if err != nil {
-		return err
-	}
-	if slices.Contains(kust.Resources, createEnvFlags.name) {
-		return fmt.Errorf("Environment already exists: %s", createEnvFlags.name)
-	}
+	kust.AddResources(createEnvFlags.name)
 	tmpls, err := template.ParseFS(filesTmpls, "env-tmpl/*.yaml")
 	if err != nil {
 		return err
 	}
 	for _, tmpl := range tmpls.Templates() {
 		dstPath := path.Join("environments", createEnvFlags.name, tmpl.Name())
-		fmt.Println(dstPath)
-		dst, err := wt.Filesystem.Create(dstPath)
+		dst, err := repoIO.Writer(dstPath)
 		if err != nil {
 			return err
 		}
+		defer dst.Close()
 		if err := tmpl.Execute(dst, map[string]string{
 			"Name":       createEnvFlags.name,
 			"PrivateKey": base64.StdEncoding.EncodeToString([]byte(priv)),
 			"PublicKey":  base64.StdEncoding.EncodeToString([]byte(pub)),
-			"GitHost":    "192.168.0.211",
-			"KnownHosts": base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("192.168.0.211 %s", ssPubKey))),
+			"GitHost":    createEnvFlags.ip,
+			"KnownHosts": base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s %s", createEnvFlags.ip, ssPubKey))),
 		}); err != nil {
 			return err
 		}
-		if _, err := wt.Add(dstPath); err != nil {
-			return err
-		}
 	}
 	kust.AddResources(createEnvFlags.name)
-	ff, err := wt.Filesystem.Create(envKust)
-	if err != nil {
+	if err := repoIO.WriteKustomization("environments/kustomization.yaml", *kust); err != nil {
 		return err
 	}
-	contents, err := yaml.Marshal(kust)
-	if err != nil {
-		return err
-	}
-	if _, err := io.Copy(ff, bytes.NewReader(contents)); err != nil {
-		return err
-	}
-	if _, err := wt.Add(envKust); err != nil {
-		return err
-	}
-	if err := ss.Commit(wt, fmt.Sprintf("%s: new environment", createEnvFlags.name)); err != nil {
-		return err
-	}
-	if err := ss.Push(repo); err != nil {
+	if err := repoIO.CommitAndPush(fmt.Sprintf("%s: initialize environment", createEnvFlags.name)); err != nil {
 		return err
 	}
 	return nil
diff --git a/core/installer/repoio.go b/core/installer/repoio.go
index 271a1c4..a1d86d2 100644
--- a/core/installer/repoio.go
+++ b/core/installer/repoio.go
@@ -1,6 +1,7 @@
 package installer
 
 import (
+	"io"
 	"io/fs"
 	"path/filepath"
 	"time"
@@ -14,6 +15,7 @@
 	ReadKustomization(path string) (*Kustomization, error)
 	WriteKustomization(path string, kust Kustomization) error
 	CommitAndPush(message string) error
+	Writer(path string) (io.WriteCloser, error)
 }
 
 type repoIO struct {
@@ -41,19 +43,22 @@
 	return ReadKustomization(inp)
 }
 
-func (r *repoIO) WriteKustomization(path string, kust Kustomization) error {
+func (r *repoIO) Writer(path string) (io.WriteCloser, error) {
 	wt, err := r.repo.Worktree()
 	if err != nil {
-		return err
+		return nil, err
 	}
 	if err := wt.Filesystem.MkdirAll(filepath.Dir(path), fs.ModePerm); err != nil {
-		return err
+		return nil, err
 	}
-	out, err := wt.Filesystem.Create(path)
+	return wt.Filesystem.Create(path)
+}
+
+func (r *repoIO) WriteKustomization(path string, kust Kustomization) error {
+	out, err := r.Writer(path)
 	if err != nil {
 		return err
 	}
-	defer out.Close()
 	return kust.Write(out)
 }
 
@@ -74,7 +79,7 @@
 		return err
 	}
 	return r.repo.Push(&git.PushOptions{
-		RemoteName: "soft", // TODO(giolekva): configurable
+		RemoteName: "origin",
 		Auth:       auth(r.signer),
 	})
 }
diff --git a/core/installer/soft/client.go b/core/installer/soft/client.go
index 68964d3..e07532e 100644
--- a/core/installer/soft/client.go
+++ b/core/installer/soft/client.go
@@ -129,7 +129,7 @@
 	return git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
 		URL:             ss.addressGit(),
 		Auth:            ss.authGit(),
-		RemoteName:      "soft",
+		RemoteName:      "origin",
 		ReferenceName:   "refs/heads/master",
 		Depth:           1,
 		InsecureSkipTLS: true,
@@ -141,7 +141,7 @@
 	return git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
 		URL:             fmt.Sprintf("%s/%s", ss.addressGit(), name),
 		Auth:            ss.authGit(),
-		RemoteName:      "soft",
+		RemoteName:      "origin",
 		ReferenceName:   "refs/heads/master",
 		Depth:           1,
 		InsecureSkipTLS: true,
@@ -166,7 +166,7 @@
 
 func (ss *Client) Push(repo *git.Repository) error {
 	return repo.Push(&git.PushOptions{
-		RemoteName: "soft",
+		RemoteName: "origin",
 		Auth:       ss.authGit(),
 	})
 }
@@ -188,7 +188,7 @@
 	return git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
 		URL:             ss.repoPathByName(name),
 		Auth:            ss.authGit(),
-		RemoteName:      "soft",
+		RemoteName:      "origin",
 		InsecureSkipTLS: true,
 	})
 }
