diff --git a/core/installer/Makefile b/core/installer/Makefile
index 1655ac0..d2e8068 100644
--- a/core/installer/Makefile
+++ b/core/installer/Makefile
@@ -14,20 +14,24 @@
 	$(podman) build --file=Dockerfile.flux --tag=$(repo_name)/flux:latest . --platform=linux/arm64
 	docker push $(repo_name)/flux:latest
 
+format-check:
+	gofmt -d -l .
+	go run cuelang.org/go/cmd/cue fmt app_configs/*.cue --check
+
 format:
 	go run cuelang.org/go/cmd/cue fmt app_configs/*.cue
 
 build: export CGO_ENABLED=0
 build: clean
-	/usr/local/go/bin/go build -o pcloud cmd/*.go
+	go build -o pcloud cmd/*.go
 
 test: export CGO_ENABLED=0
 test:
-	/usr/local/go/bin/go test ./...
+	go test ./...
 
 test: export CGO_ENABLED=0
 testv:
-	/usr/local/go/bin/go test -v ./...
+	go test -v ./...
 
 bootstrap:
 	./pcloud --kubeconfig=../../priv/kubeconfig-hetzner bootstrap --env-name=dodo --charts-dir=../../charts --admin-pub-key=/Users/lekva/.ssh/id_rsa.pub --from-ip=192.168.100.210 --to-ip=192.168.100.240 --storage-dir=/pcloud-storage/longhorn --public-ip=135.181.48.180,65.108.39.172
@@ -59,14 +63,14 @@
 build_arm64: export GOOS=linux
 build_arm64: export GOARCH=arm64
 build_arm64:
-	/usr/local/go/bin/go build -o server_arm64 cmd/*.go
+	go build -o server_arm64 cmd/*.go
 
 build_amd64: export CGO_ENABLED=0
 build_amd64: export GO111MODULE=on
 build_amd64: export GOOS=linux
 build_amd64: export GOARCH=amd64
 build_amd64:
-	/usr/local/go/bin/go build -o server_amd64 cmd/*.go
+	go build -o server_amd64 cmd/*.go
 
 push_arm64: clean build_arm64
 	mkdir tmp
diff --git a/core/installer/app.go b/core/installer/app.go
index 656b992..e42a9df 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -4,6 +4,7 @@
 	"bytes"
 	_ "embed"
 	"encoding/json"
+	"errors"
 	"fmt"
 	template "html/template"
 	"net"
@@ -13,7 +14,7 @@
 	"cuelang.org/go/cue"
 	"cuelang.org/go/cue/build"
 	"cuelang.org/go/cue/cuecontext"
-	"cuelang.org/go/cue/errors"
+	cueerrors "cuelang.org/go/cue/errors"
 	"cuelang.org/go/cue/load"
 	cueyaml "cuelang.org/go/encoding/yaml"
 	helmv2 "github.com/fluxcd/helm-controller/api/v2"
@@ -419,10 +420,10 @@
 func ParseAndCreateNewCueApp(data CueAppData) (cueApp, error) {
 	config, err := ParseCueAppConfig(data)
 	if err != nil {
-		return cueApp{}, fmt.Errorf(errors.Details(err, nil))
+		return cueApp{}, errors.New(cueerrors.Details(err, nil))
 	}
 	if err := config.Err(); err != nil {
-		return cueApp{}, fmt.Errorf(errors.Details(err, nil))
+		return cueApp{}, errors.New(cueerrors.Details(err, nil))
 	}
 	return newCueApp(config, data)
 }
@@ -470,7 +471,7 @@
 	d := ctx.CompileBytes(buf.Bytes())
 	res := a.cfg.Unify(d).Eval()
 	if err := res.Err(); err != nil {
-		return rendered{}, fmt.Errorf(errors.Details(err, nil))
+		return rendered{}, errors.New(cueerrors.Details(err, nil))
 	}
 	if err := res.Validate(); err != nil {
 		return rendered{}, err
@@ -708,7 +709,7 @@
 	ret := []Access{}
 	for i.Next() {
 		if a, err := extractAccessInternal(i.Value()); err != nil {
-			return nil, fmt.Errorf(errors.Details(err, nil))
+			return nil, errors.New(cueerrors.Details(err, nil))
 		} else {
 			ret = append(ret, a...)
 		}
diff --git a/core/installer/cluster.go b/core/installer/cluster.go
index a51435f..284e393 100644
--- a/core/installer/cluster.go
+++ b/core/installer/cluster.go
@@ -3,6 +3,7 @@
 import (
 	"bytes"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io"
 	"net"
@@ -57,7 +58,7 @@
 	if resp.StatusCode != http.StatusOK {
 		var buf bytes.Buffer
 		io.Copy(&buf, resp.Body)
-		return fmt.Errorf(buf.String())
+		return errors.New(buf.String())
 	}
 	return nil
 }
@@ -78,7 +79,7 @@
 	if resp.StatusCode != http.StatusOK {
 		var buf bytes.Buffer
 		io.Copy(&buf, resp.Body)
-		return fmt.Errorf(buf.String())
+		return errors.New(buf.String())
 	}
 	return nil
 }
diff --git a/core/installer/cmd/dodo_app.go b/core/installer/cmd/dodo_app.go
index 9b5da30..7f1957d 100644
--- a/core/installer/cmd/dodo_app.go
+++ b/core/installer/cmd/dodo_app.go
@@ -4,6 +4,7 @@
 	"bytes"
 	"database/sql"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"io"
 	"log"
@@ -276,7 +277,7 @@
 	if resp.StatusCode != http.StatusOK {
 		var buf bytes.Buffer
 		io.Copy(&buf, resp.Body)
-		return fmt.Errorf(buf.String())
+		return errors.New(buf.String())
 	}
 	return nil
 }
@@ -303,7 +304,7 @@
 	if resp.StatusCode != http.StatusOK {
 		var buf bytes.Buffer
 		io.Copy(&buf, resp.Body)
-		return fmt.Errorf(buf.String())
+		return errors.New(buf.String())
 	}
 	return nil
 }
diff --git a/core/installer/server/env/server.go b/core/installer/server/env/server.go
index d6e9eac..44d178a 100644
--- a/core/installer/server/env/server.go
+++ b/core/installer/server/env/server.go
@@ -99,7 +99,7 @@
 	envInfo       map[string]template.HTML
 	dns           map[string]installer.EnvDNS
 	dnsPublished  map[string]struct{}
-	allowNewEnvs bool
+	allowNewEnvs  bool
 }
 
 func NewEnvServer(
