AppManager: Format cue files

Change-Id: Ia37908797b0227ab3b66e0faab08dcc2379e5282
diff --git a/core/installer/app_configs/app_base.cue b/core/installer/app_configs/app_base.cue
index 0724f73..4cf3336 100644
--- a/core/installer/app_configs/app_base.cue
+++ b/core/installer/app_configs/app_base.cue
@@ -9,16 +9,16 @@
 	cluster?: #Cluster @name(Cluster)
 }
 
-name: string | *""
+name:        string | *""
 description: string | *""
-readme: string | *""
-icon: string | *""
-namespace: string | *""
+readme:      string | *""
+icon:        string | *""
+namespace:   string | *""
 
 help: [...#HelpDocument] | *[]
 
 #HelpDocument: {
-	title: string
+	title:    string
 	contents: string
 	children: [...#HelpDocument] | *[]
 }
@@ -26,7 +26,7 @@
 url: string | *""
 
 #Namespace: {
-	name: string
+	name:        string
 	kubeconfig?: string
 }
 
@@ -34,38 +34,38 @@
 
 #Protocol: "TCP" | "UDP"
 
-#PortValue: int & > 0 & < 65536
+#PortValue: int & >0 & <65536
 
 #Port: {
-	name: string
-	value: #PortValue
+	name:     string
+	value:    #PortValue
 	protocol: #Protocol | *"TCP"
 }
 
 #AppType: "infra" | "env"
-appType: #AppType | *"env"
+appType:  #AppType | *"env"
 
 #Auth: {
 	enabled: bool | *false // TODO(gio): enabled by default?
-	groups: string | *"" // TODO(gio): []string
+	groups:  string | *""  // TODO(gio): []string
 	noAuthPathPatterns: [...string] | *[]
 }
 
 #Image: {
-	registry: string | *release.imageRegistry
-	repository: string
-	name: string
-	tag: string
-	pullPolicy: string | *"IfNotPresent"
-	imageName: "\(repository)/\(name)"
-	fullName: "\(registry)/\(imageName)"
+	registry:        string | *release.imageRegistry
+	repository:      string
+	name:            string
+	tag:             string
+	pullPolicy:      string | *"IfNotPresent"
+	imageName:       "\(repository)/\(name)"
+	fullName:        "\(registry)/\(imageName)"
 	fullNameWithTag: "\(fullName):\(tag)"
 }
 
 #VolumeInput: {
-	cluster?: #Cluster
-	name: string
-	size: string
+	cluster?:   #Cluster
+	name:       string
+	size:       string
 	accessMode: "ReadWriteOnce" | "ReadOnlyMany" | "ReadWriteMany" | "ReadWriteOncePod" | *"ReadWriteOnce"
 }
 
@@ -76,58 +76,58 @@
 #Chart: #GitRepositoryRef | #HelmRepositoryRef
 
 #GitRepositoryRef: {
-    name: string
-	kind: "GitRepository"
-    address: string
-	branch: string
-    path: string
+	name:    string
+	kind:    "GitRepository"
+	address: string
+	branch:  string
+	path:    string
 }
 
 #HelmRepositoryRef: {
-    name: string
-	kind: "HelmRepository"
-    repository: string
-	name: string
-	tag: string
+	name:       string
+	kind:       "HelmRepository"
+	repository: string
+	name:       string
+	tag:        string
 }
 
 #EnvNetwork: {
-	dns: net.IPv4
+	dns:            net.IPv4
 	dnsInClusterIP: net.IPv4
-	ingress: net.IPv4
-	headscale: net.IPv4
-	servicesFrom: net.IPv4
-	servicesTo: net.IPv4
+	ingress:        net.IPv4
+	headscale:      net.IPv4
+	servicesFrom:   net.IPv4
+	servicesTo:     net.IPv4
 }
 
 #Release: {
 	appInstanceId: string
-	namespace: string
-	repoAddr: string
-	appDir: string
+	namespace:     string
+	repoAddr:      string
+	appDir:        string
 	imageRegistry: string | *"docker.io"
 }
 
 #PortForward: {
-	name: string
-	network: #Network
+	name:         string
+	network:      #Network
 	clusterName?: string | null
-	port: int
+	port:         int
 	service: close({
-		name: string
+		name:      string
 		namespace: string | *""
-		port: #PortValue
+		port:      #PortValue
 	})
 	protocol: "TCP" | "UDP" | *"TCP"
 
-	allocator: network.allocatePortAddr
-	reservator: network.reservePortAddr
+	allocator:   network.allocatePortAddr
+	reservator:  network.reservePortAddr
 	deallocator: network.deallocatePortAddr
 }
 
 #Cluster: {
-	name: string
-	kubeconfig: string
+	name:             string
+	kubeconfig:       string
 	ingressClassName: string
 }
 
@@ -138,15 +138,15 @@
 	}
 }
 
-global: #Global
+global:  #Global
 release: #Release
 
 #WriteFile: {
-	path: string
-	content: string
-	owner: string
+	path:        string
+	content:     string
+	owner:       string
 	permissions: string
-	defer: bool | *true
+	defer:       bool | *true
 }
 
 #CloudInit: {
@@ -159,22 +159,22 @@
 }
 
 #VPNEnabled: {
-	enabled: true
+	enabled:     true
 	loginServer: string
-	authKey: string
+	authKey:     string
 }
 
 #VPN: #VPNEnabled | #VPNDisabled
 
 #VirtualMachine: #WithOut & {
 	cluster?: #Cluster
-	name: string
+	name:     string
 	username: string
-	domain: string
-	vpn: #VPN | *{ enabled: false }
+	domain:   string
+	vpn: #VPN | *{enabled: false}
 	codeServerEnabled: bool | *false
-	cpuCores: int
-	memory: string
+	cpuCores:          int
+	memory:            string
 	sshKnownHosts: [...string] | *[]
 	sshAuthorizedKeys: [...string] | *[]
 	cloudInit: #CloudInit
@@ -182,11 +182,11 @@
 	configFiles: {...} | *{}
 	ports: [...#Port]
 
-	_name: name
-	_username: username
-	_cpuCores: cpuCores
-	_memory: memory
-	_ports: ports
+	_name:        name
+	_username:    username
+	_cpuCores:    cpuCores
+	_memory:      memory
+	_ports:       ports
 	_configFiles: configFiles
 
 	_codeServerPort: 9090
@@ -200,7 +200,7 @@
 			["sh", "-c", "sed -i -e 's/127.0.0.1:8080/0.0.0.0:\(_codeServerPort)/g' /home/\(username)/.config/code-server/config.yaml"],
 			["sh", "-c", "sed -i -e 's/auth: password/auth: none/g' /home/\(username)/.config/code-server/config.yaml"],
 			["sh", "-c", "systemctl restart --now code-server@\(username)"],
-	    ]
+		]
 	}
 
 	_vpnCmd: [...[...string]] | *[]
@@ -209,16 +209,16 @@
 			["sh", "-c", "curl -fsSL https://tailscale.com/install.sh | sh"],
 			// TODO(gio): (maybe) enable tailscale ssh
 			["sh", "-c", "tailscale up --login-server=\(vpn.loginServer) --auth-key=\(vpn.authKey)"],
-     	]
+		]
 	}
 
 	images: {}
 	charts: {
 		virtualMachine: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/virtual-machine"
+			branch:  "main"
+			path:    "charts/virtual-machine"
 		}
 	}
 	charts: {
@@ -231,38 +231,38 @@
 	helm: {
 		"\(_name)-virtual-machine": {
 			chart: charts.virtualMachine
-			info: "Creating \(_name) virtual machine"
+			info:  "Creating \(_name) virtual machine"
 			annotations: {
-				"dodo.cloud/resource-type": "virtual-machine"
-				"dodo.cloud/resource.virtual-machine.name": _name
-				"dodo.cloud/resource.virtual-machine.user": _username
+				"dodo.cloud/resource-type":                      "virtual-machine"
+				"dodo.cloud/resource.virtual-machine.name":      _name
+				"dodo.cloud/resource.virtual-machine.user":      _username
 				"dodo.cloud/resource.virtual-machine.cpu-cores": "\(_cpuCores)"
-				"dodo.cloud/resource.virtual-machine.memory": _memory
+				"dodo.cloud/resource.virtual-machine.memory":    _memory
 			}
 			values: {
-				name: _name
+				name:     _name
 				username: _username
 				cpuCores: _cpuCores
-				memory: _memory
+				memory:   _memory
 				disk: {
 					source: "https://cloud.debian.org/images/cloud/bookworm-backports/latest/debian-12-backports-generic-amd64.qcow2"
-					size: "64Gi"
+					size:   "64Gi"
 				}
 				ports: [{
-					name: "ssh"
-					value: 22
+					name:     "ssh"
+					value:    22
 					protocol: "TCP"
 				},
-				if codeServerEnabled {
-					name: _codeServerPortName
-					value: _codeServerPort
-					protocol: "TCP"
-				}
-				for p in _ports {
-					name: p.name
-					value: p.value
-					protocol: p.protocol
-				}]
+					if codeServerEnabled {
+						name:     _codeServerPortName
+						value:    _codeServerPort
+						protocol: "TCP"
+					},
+					for p in _ports {
+						name:     p.name
+						value:    p.value
+						protocol: p.protocol
+					}]
 				cloudInit: {
 					userData: _cloudInitUserData
 					networkData: {
@@ -279,21 +279,21 @@
 			_cloudInitUserData: {
 				system_info: {
 					default_user: {
-						name: username
+						name:    username
 						homedir: "/home/\(username)"
-						sudo: "ALL=(ALL) NOPASSWD:ALL"
-						groups: "users, admin"
+						sudo:    "ALL=(ALL) NOPASSWD:ALL"
+						groups:  "users, admin"
 					}
 				}
 				password: "dodo" // TODO(gio): remove if possible
 				chpasswd: {
 					expire: false
 				}
-				hostname: _name
-				ssh_pwauth: true
+				hostname:     _name
+				ssh_pwauth:   true
 				disable_root: false
 				ssh_authorized_keys: list.Concat([[
-					"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOa7FUrmXzdY3no8qNGUk7OPaRcIUi8G7MVbLlff9eB/ lekva@gl-mbp-m1-max.local"
+					"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOa7FUrmXzdY3no8qNGUk7OPaRcIUi8G7MVbLlff9eB/ lekva@gl-mbp-m1-max.local",
 				], sshAuthorizedKeys])
 				packages: [
 					"curl",
@@ -302,14 +302,14 @@
 					"openssh-client",
 				]
 				write_files: list.Concat([[{
-					path: "/home/\(username)/.gitconfig"
-					content: """
+					path:        "/home/\(username)/.gitconfig"
+					content:     """
 					[user]
 						name = \(username)
 						email = \(username)@\(domain)
 
 					"""
-					owner: "\(username):\(username)"
+					owner:       "\(username):\(username)"
 					permissions: "0644"
 				}], cloudInit.writeFiles])
 				runcmd: list.Concat([
@@ -321,14 +321,13 @@
 						// TODO(gio): implement post app delete webhook to remove ssh key from memberships
 						// TODO(gio): make memberships-api addr configurable
 						["sh", "-c", "PUBKEY=$(cat /home/\(username)/.ssh/id_ed25519.pub) && curl --request POST --data \"{\\\"user\\\":\\\"\(username)\\\",\\\"publicKey\\\":\\\"${PUBKEY}\\\"}\" http://memberships-api.\(global.namespacePrefix)core-auth-memberships.svc.cluster.local/api/users/\(username)/keys"],
-				    ],
+					],
 					_vpnCmd,
 					_codeServerCmd,
-					[
-						// TODO(gio): this waits for user keys are synced from memberships service back to the dodo-app.
-						// We should inject this key into the dodo-app directly as well.
-						// ["sh", "-c", "sleep 20"],
-   				    ],
+					[],
+					// TODO(gio): this waits for user keys are synced from memberships service back to the dodo-app.
+					// We should inject this key into the dodo-app directly as well.
+					// ["sh", "-c", "sleep 20"],
 					cloudInit.runCmd])
 			}
 		}
@@ -336,20 +335,20 @@
 }
 
 #Domain: {
-	network: string
+	network:   string
 	subdomain: string
 }
 
 #PortDomain: {
 	#Domain
-	port: { name: string } | { value: #PortValue }
+	port: {name: string} | {value: #PortValue}
 }
 
 #MongoDBInput: {
 	cluster?: #Cluster
-	name: string
-	version: "8.0.1"
-	size: string | *"1Gi"
+	name:     string
+	version:  "8.0.1"
+	size:     string | *"1Gi"
 	initdbScripts: {...}
 	expose: [...#Domain] | *[]
 	...
@@ -357,22 +356,22 @@
 
 #MongoDB: #WithOut & #MongoDBInput & {
 	cluster?: #Cluster
-	name: string
-	version: "8.0.1"
-	size: string | *"1Gi"
+	name:     string
+	version:  "8.0.1"
+	size:     string | *"1Gi"
 	initdbScripts: {...}
 	expose: [...#Domain] | *[]
 
-	_cluster: cluster
-	_name: name
-	_size: size
+	_cluster:         cluster
+	_name:            name
+	_size:            size
 	_volumeClaimName: "\(name)-mongodb"
-	_initdbScripts: initdbScripts
+	_initdbScripts:   initdbScripts
 
 	openPort: [for i, e in expose {
-		name: "port_mongodb_\(_name)_\(i)"
-		network: networks[strings.ToLower(e.network)]
-		port: input[name]
+		name:     "port_mongodb_\(_name)_\(i)"
+		network:  networks[strings.ToLower(e.network)]
+		port:     input[name]
 		protocol: "TCP"
 		service: {
 			name: "mongodb-\(_name)"
@@ -382,19 +381,19 @@
 
 	images: {
 		mongodb: {
-			registry: "docker.io"
+			registry:   "docker.io"
 			repository: "bitnami"
-			name: "mongodb"
-			tag: version
+			name:       "mongodb"
+			tag:        version
 			pullPolicy: "IfNotPresent"
 		}
 	}
 	charts: {
 		mongodb: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/mongodb"
+			branch:  "main"
+			path:    "charts/mongodb"
 		}
 	}
 	volume: {
@@ -412,24 +411,24 @@
 				cluster: _cluster
 			}
 			annotations: {
-				"dodo.cloud/resource-type": "mongodb"
-				"dodo.cloud/resource.mongodb.name": name
+				"dodo.cloud/resource-type":            "mongodb"
+				"dodo.cloud/resource.mongodb.name":    name
 				"dodo.cloud/resource.mongodb.version": version
-				"dodo.cloud/resource.mongodb.volume": _volumeClaimName
+				"dodo.cloud/resource.mongodb.volume":  _volumeClaimName
 			}
 			values: {
 				fullnameOverride: "mongodb-\(name)"
 				image: {
-					registry: images.mongodb.registry
+					registry:   images.mongodb.registry
 					repository: images.mongodb.imageName
-					tag: images.mongodb.tag
+					tag:        images.mongodb.tag
 					pullPolicy: images.mongodb.pullPolicy
 				}
-				architecture: "standalone"
+				architecture:   "standalone"
 				useStatefulSet: false
 				auth: {
-					enabled: true
-					rootUser: "root"
+					enabled:      true
+					rootUser:     "root"
 					rootPassword: "root"
 					usernames: ["mongo"]
 					passwords: ["mongo"]
@@ -437,19 +436,19 @@
 				}
 				tls: enabled: false
 				disableJavascript: false
-				enableJournal: true
-				initdbScripts: _initdbScripts
+				enableJournal:     true
+				initdbScripts:     _initdbScripts
 				service: {
-					type: "ClusterIP"
+					type:     "ClusterIP"
 					portName: "mongodb"
 					ports: mongodb: 27017
 				}
 				arbiter: enabled: false
-				hidden: enabled: false
+				hidden: enabled:  false
 				persistence: {
-					enabled: true
+					enabled:       true
 					existingClaim: _volumeClaimName
-					mountPath: "/bitnami/mongodb"
+					mountPath:     "/bitnami/mongodb"
 				}
 				volumePermissions: securityContext: runAsUser: 0
 			}
@@ -471,7 +470,7 @@
 		}
 		...
 	}
- 	openPortMap: {
+	openPortMap: {
 		for k, v in mongodb {
 			"mongodb-\(k)": v.openPortMap
 		}
@@ -504,31 +503,31 @@
 
 #PostgreSQLInput: {
 	cluster?: #Cluster
-	name: string
-	version: "15.3"
-	initSQL: string | *""
-	size: string | *"1Gi"
+	name:     string
+	version:  "15.3"
+	initSQL:  string | *""
+	size:     string | *"1Gi"
 	expose: [...#Domain] | *[]
 	...
 }
 
 #PostgreSQL: #WithOut & #PostgreSQLInput & {
 	cluster?: #Cluster
-	name: string
-	version: "15.3"
-	initSQL: string | *""
-	size: string | *"1Gi"
+	name:     string
+	version:  "15.3"
+	initSQL:  string | *""
+	size:     string | *"1Gi"
 	expose: [...#Domain] | *[]
 
-	_cluster: cluster
-	_size: size
+	_cluster:         cluster
+	_size:            size
 	_volumeClaimName: "\(name)-postgresql"
-	_name: name
+	_name:            name
 
 	openPort: [for i, e in expose {
-		name: "port_postgresql_\(_name)_\(i)"
-		network: networks[strings.ToLower(e.network)]
-		port: input[name]
+		name:     "port_postgresql_\(_name)_\(i)"
+		network:  networks[strings.ToLower(e.network)]
+		port:     input[name]
 		protocol: "TCP"
 		service: {
 			name: "postgres-\(_name)"
@@ -539,17 +538,17 @@
 	images: {
 		postgres: {
 			repository: "library"
-			name: "postgres"
-			tag: version
+			name:       "postgres"
+			tag:        version
 			pullPolicy: "IfNotPresent"
 		}
 	}
 	charts: {
 		postgres: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/postgresql"
+			branch:  "main"
+			path:    "charts/postgresql"
 		}
 	}
 	volume: {
@@ -567,24 +566,24 @@
 				cluster: _cluster
 			}
 			annotations: {
-				"dodo.cloud/resource-type": "postgresql"
-				"dodo.cloud/resource.postgresql.name": name
+				"dodo.cloud/resource-type":               "postgresql"
+				"dodo.cloud/resource.postgresql.name":    name
 				"dodo.cloud/resource.postgresql.version": version
-				"dodo.cloud/resource.postgresql.volume": _volumeClaimName
+				"dodo.cloud/resource.postgresql.volume":  _volumeClaimName
 			}
 			values: {
 				fullnameOverride: "postgres-\(name)"
 				image: {
-					registry: images.postgres.registry
+					registry:   images.postgres.registry
 					repository: images.postgres.imageName
-					tag: images.postgres.tag
+					tag:        images.postgres.tag
 					pullPolicy: images.postgres.pullPolicy
 				}
 				auth: {
 					postgresPassword: "postgres"
-					username: "postgres"
-					password: "postgres"
-					database: "postgres"
+					username:         "postgres"
+					password:         "postgres"
+					database:         "postgres"
 				}
 				service: {
 					type: "ClusterIP"
@@ -594,9 +593,9 @@
 					postgresql: {
 						auth: {
 							postgresPassword: "postgres"
-							username: "postgres"
-							password: "postgres"
-							database: "postgres"
+							username:         "postgres"
+							password:         "postgres"
+							database:         "postgres"
 						}
 					}
 				}
@@ -610,7 +609,7 @@
 						fsGroup: 0
 					}
 					containerSecurityContext: {
-						enabled: true
+						enabled:   true
 						runAsUser: 0
 					}
 				}
@@ -624,8 +623,8 @@
 _localCharts: localCharts
 
 #ResourceReference: {
-    name: string
-    namespace: string
+	name:      string
+	namespace: string
 }
 
 #Helm: {
@@ -633,33 +632,33 @@
 	dependsOn: [...#ResourceReference] | *[]
 	info: string | *""
 	annotations: {...} | *{}
-	cluster?: #Cluster | null
+	cluster?:         #Cluster | null
 	targetNamespace?: string
 	...
 }
 
 #HelmRelease: {
-	_name: string
-	_chart: _
+	_name:   string
+	_chart:  _
 	_values: _
 	_dependencies: [...#ResourceReference] | *[]
 	_info: string | *""
 	_annotations: {...} | *{}
-	_cluster?: #Cluster | null
-	_namespace: string
+	_cluster?:         #Cluster | null
+	_namespace:        string
 	_targetNamespace?: string
 
 	apiVersion: "helm.toolkit.fluxcd.io/v2beta1"
-	kind: "HelmRelease"
+	kind:       "HelmRelease"
 	metadata: {
-		name: _name
-   		namespace: _namespace
-        annotations: _annotations & {
-          "dodo.cloud/installer-info": _info
-        }
+		name:      _name
+		namespace: _namespace
+		annotations: _annotations & {
+			"dodo.cloud/installer-info": _info
+		}
 	}
 	spec: {
-		interval: "1m0s"
+		interval:  "1m0s"
 		dependsOn: _dependencies
 		chart: spec: _chart
 		if _targetNamespace != _|_ {
@@ -669,7 +668,7 @@
 			if _cluster != null {
 				kubeConfig: secretRef: {
 					name: "cluster-kubeconfig"
-					key: "kubeconfig"
+					key:  "kubeconfig"
 				}
 			}
 		}
@@ -690,10 +689,10 @@
 		}
 	}
 	openPort: [...#PortForward] | *[]
-	openPort: list.FlattenN([for i in _op { i }], -1)
+	openPort: list.FlattenN([for i in _op {i}], -1)
 	for _, out in outs {
-		images: out.images
-		charts: out.charts
+		images:       out.images
+		charts:       out.charts
 		clusterProxy: out.clusterProxy
 		_lc: _localCharts & {
 			for k, v in out.charts {
@@ -705,13 +704,13 @@
 		helm: {
 			for name, r in out.helmR {
 				"\(name)": #HelmRelease & {
-					_name: name
-					_chart: _lc[r.chart.name]
-					_values: r.values
+					_name:         name
+					_chart:        _lc[r.chart.name]
+					_values:       r.values
 					_dependencies: r.dependsOn
-					_info: r.info
-					_annotations: r.annotations
-					_namespace: release.namespace
+					_info:         r.info
+					_annotations:  r.annotations
+					_namespace:    release.namespace
 					if r.cluster != _|_ {
 						_cluster: r.cluster
 					}
@@ -725,14 +724,14 @@
 }
 
 #SSHKey: {
-	public: string
+	public:  string
 	private: string
 }
 
 #HelpDocument: {
-    title: string
-    contents: string
-    children: [...#HelpDocument]
+	title:    string
+	contents: string
+	children: [...#HelpDocument]
 }
 
 help: [...#HelpDocument] | *[]
@@ -759,22 +758,22 @@
 					[{
 						name: "\(e.name)_cluster"
 						network: #Network & {
-							name: "cluster_\(cluster.name)"
-							ingressClass: "default"
-							domain: ""
-							allocatePortAddr: "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/allocate"
-							reservePortAddr: "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/reserve"
+							name:               "cluster_\(cluster.name)"
+							ingressClass:       "default"
+							domain:             ""
+							allocatePortAddr:   "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/allocate"
+							reservePortAddr:    "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/reserve"
 							deallocatePortAddr: "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/remmove"
 						}
-						port: input[name]
+						port:     input[name]
 						protocol: e.protocol
-						service: e.service
+						service:  e.service
 					}, {
-						name: e.name
+						name:        e.name
 						clusterName: _cluster.name
-						network: e.network
-						port: input[e.name]
-						protocol: e.protocol
+						network:     e.network
+						port:        input[e.name]
+						protocol:    e.protocol
 						service: {
 							name: "ingress-\(strings.ToLower(e.protocol)).\(clusterName).cluster.\(global.privateDomain)"
 							port: input["\(e.name)_cluster"]
@@ -785,35 +784,35 @@
 					[{
 						name: "\(e.name)_cluster"
 						network: #Network & {
-							name: "cluster_\(cluster.name)"
-							ingressClass: "default"
-							domain: ""
-							allocatePortAddr: "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/allocate"
-							reservePortAddr: "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/reserve"
+							name:               "cluster_\(cluster.name)"
+							ingressClass:       "default"
+							domain:             ""
+							allocatePortAddr:   "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/allocate"
+							reservePortAddr:    "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/reserve"
 							deallocatePortAddr: "http://port-allocator.\(global.id)-cluster-\(cluster.name)-network.svc.cluster.local/api/remmove"
 						}
-						port: input[name]
+						port:     input[name]
 						protocol: "TCP"
-						service: e.service
+						service:  e.service
 					}, {
-						name: "\(e.name)_private"
-						network: networks.private // TODO(gio): take corresponding private network
+						name:        "\(e.name)_private"
+						network:     networks.private // TODO(gio): take corresponding private network
 						clusterName: _cluster.name
-						port: input[name]
-						protocol: "TCP"
+						port:        input[name]
+						protocol:    "TCP"
 						service: {
 							name: "ingress-\(strings.ToLower(e.protocol)).\(clusterName).cluster.\(global.privateDomain)"
 							port: input["\(e.name)_cluster"]
 						}
 					}, {
-						name: e.name
-						network: e.network
-						port: input[name]
+						name:     e.name
+						network:  e.network
+						port:     input[name]
 						protocol: "TCP"
 						service: {
-							name: "proxy-backend-service"
+							name:      "proxy-backend-service"
 							namespace: "\(global.namespacePrefix)ingress-private"
-							port: input["\(e.name)_private"]
+							port:      input["\(e.name)_private"]
 						}
 					}]
 				}
@@ -864,28 +863,28 @@
 }
 if out.cluster != _|_ {
 	outs: kout: #WithOut & {
-		cluster: out.cluster
-		clusterName: cluster.name
+		cluster:           out.cluster
+		clusterName:       cluster.name
 		clusterKubeconfig: cluster.kubeconfig
 		charts: {
 			secret: {
-				name: "secret"
-				kind: "GitRepository"
+				name:    "secret"
+				kind:    "GitRepository"
 				address: "https://code.v1.dodo.cloud/helm-charts"
-				branch: "main"
-				path: "charts/secret"
+				branch:  "main"
+				path:    "charts/secret"
 			}
- 		}
+		}
 		helm: {
 			"cluster-kubeconfig": {
-				chart: charts.secret
+				chart:   charts.secret
 				cluster: null
-				info: "Connecting to \(clusterName) cluster"
+				info:    "Connecting to \(clusterName) cluster"
 				values: {
-					name: "cluster-kubeconfig"
-					key: "kubeconfig"
+					name:  "cluster-kubeconfig"
+					key:   "kubeconfig"
 					value: base64.Encode(null, clusterKubeconfig)
-					keep: true
+					keep:  true
 				}
 			}
 		}
@@ -897,16 +896,16 @@
 	_cluster: cluster
 	charts: {
 		volume: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/volumes"
+			branch:  "main"
+			path:    "charts/volumes"
 		}
 		secret: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/secret"
+			branch:  "main"
+			path:    "charts/secret"
 		}
 		...
 	}
@@ -925,9 +924,9 @@
 		for k, v in volume {
 			"\(k)-volume": {
 				chart: charts.volume
-				info: "Creating disk for \(k)"
+				info:  "Creating disk for \(k)"
 				annotations: {
-					"dodo.cloud/resource-type": "volume"
+					"dodo.cloud/resource-type":        "volume"
 					"dodo.cloud/resource.volume.name": v.name
 					"dodo.cloud/resource.volume.size": v.size
 				}
@@ -1029,17 +1028,17 @@
 
 _codeServerPortName: "code-server"
 
-resources: { ... }
+resources: {...}
 
 #ClusterProxy: {
 	from: string
-	to: string
+	to:   string
 }
 
 // TODO(gio): Move this inside #WithOut definition
 if out.cluster != _|_ {
 	namespaces: [{
-		name: release.namespace
+		name:       release.namespace
 		kubeconfig: out.cluster.kubeconfig
 	}]
 }
diff --git a/core/installer/app_configs/app_global_env.cue b/core/installer/app_configs/app_global_env.cue
index 7c90d95..10d716a 100644
--- a/core/installer/app_configs/app_global_env.cue
+++ b/core/installer/app_configs/app_global_env.cue
@@ -3,25 +3,25 @@
 )
 
 #Global: {
-	id: string | *""
-	pcloudEnvName: string | *""
-	domain: string | *""
-    privateDomain: string | *""
-    contactEmail: string | *""
-    adminPublicKey: string | *""
-    publicIP: [...string] | *[]
-    nameserverIP: [...string] | *[]
+	id:             string | *""
+	pcloudEnvName:  string | *""
+	domain:         string | *""
+	privateDomain:  string | *""
+	contactEmail:   string | *""
+	adminPublicKey: string | *""
+	publicIP: [...string] | *[]
+	nameserverIP: [...string] | *[]
 	namespacePrefix: string | *""
-	network: #EnvNetwork
+	network:         #EnvNetwork
 }
 
 #Network: {
-	name: string
-	ingressClass: string
-	certificateIssuer: string | *""
-	domain: string
-	allocatePortAddr: string
-	reservePortAddr: string
+	name:               string
+	ingressClass:       string
+	certificateIssuer:  string | *""
+	domain:             string
+	allocatePortAddr:   string
+	reservePortAddr:    string
 	deallocatePortAddr: string
 }
 
@@ -32,75 +32,75 @@
 networks: #Networks
 
 #Ingress: #WithOut & {
-	name: string
-	auth: #Auth
-	network: #Network
+	name:      string
+	auth:      #Auth
+	network:   #Network
 	subdomain: string
-	home: string | *""
-	label: string | *name
-	appRoot: string | *""
+	home:      string | *""
+	label:     string | *name
+	appRoot:   string | *""
 	service: close({
 		name: string
-		port: close({ name: string }) | close({ number: int & > 0 })
+		port: close({name: string}) | close({number: int & >0})
 	})
 	cluster?: #Cluster
 	_cluster: cluster
-	g?: #Global
+	g?:       #Global
 
-	_domain: "\(subdomain).\(network.domain)"
-	_appRoot: appRoot
-	_authProxyName: "\(name)-auth-proxy"
-    _authProxyHTTPPortName: "http"
+	_domain:                "\(subdomain).\(network.domain)"
+	_appRoot:               appRoot
+	_authProxyName:         "\(name)-auth-proxy"
+	_authProxyHTTPPortName: "http"
 
 	if _cluster != _|_ {
 		clusterProxy: {
 			"\(name)": {
 				_sanitizedDomain: strings.Replace(_domain, ".", "-", -1)
-				from: _domain
-				to: "\(_sanitizedDomain).\(_cluster.name).cluster.\(global.privateDomain)"
+				from:             _domain
+				to:               "\(_sanitizedDomain).\(_cluster.name).cluster.\(global.privateDomain)"
 			}
 		}
 	}
 	images: {
 		authProxy: {
 			repository: "giolekva"
-			name: "auth-proxy"
-			tag: "latest"
+			name:       "auth-proxy"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 	charts: {
 		ingress: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/ingress"
+			branch:  "main"
+			path:    "charts/ingress"
 		}
 		authProxy: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/auth-proxy"
+			branch:  "main"
+			path:    "charts/auth-proxy"
 		}
 	}
 	helm: {
 		if auth.enabled {
 			"\(name)-auth-proxy": {
 				chart: charts.authProxy
-				info: "Installing authentication proxy"
+				info:  "Installing authentication proxy"
 				// NOTE(gio): Force to install in default cluster.
 				cluster: null
-				_name: name
+				_name:   name
 				values: {
 					name: _authProxyName
 					image: {
 						repository: images.authProxy.fullName
-						tag: images.authProxy.tag
+						tag:        images.authProxy.tag
 						pullPolicy: images.authProxy.pullPolicy
 					}
-					upstream: "\(service.name).\(release.namespace).svc.cluster.local"
-					whoAmIAddr: "https://accounts.\(g.domain)/sessions/whoami"
-					loginAddr: "https://accounts-ui.\(g.domain)/login"
+					upstream:       "\(service.name).\(release.namespace).svc.cluster.local"
+					whoAmIAddr:     "https://accounts.\(g.domain)/sessions/whoami"
+					loginAddr:      "https://accounts-ui.\(g.domain)/login"
 					membershipAddr: "http://memberships-api.\(g.namespacePrefix)core-auth-memberships.svc.cluster.local/api/user"
 					if g.privateDomain == "" {
 						membershipPublicAddr: "https://memberships.\(g.domain)"
@@ -108,33 +108,33 @@
 					if g.privateDomain != "" {
 						membershipPublicAddr: "https://memberships.\(g.privateDomain)"
 					}
-					groups: auth.groups
+					groups:             auth.groups
 					noAuthPathPatterns: strings.Join(auth.noAuthPathPatterns, ",")
-					portName: _authProxyHTTPPortName
+					portName:           _authProxyHTTPPortName
 				}
 			}
 		}
 		if _cluster != _|_ {
 			"\(name)-ingress-\(_cluster.name)": {
-				chart: charts.ingress
-				cluster: _cluster
-				_service: service
+				chart:            charts.ingress
+				cluster:          _cluster
+				_service:         service
 				_sanitizedDomain: strings.Replace(_domain, ".", "-", -1)
-				_clusterDomain: "\(_sanitizedDomain).\(cluster.name).cluster.\(global.privateDomain)"
-				info: "Configuring secure route to \(cluster.name) cluster"
+				_clusterDomain:   "\(_sanitizedDomain).\(cluster.name).cluster.\(global.privateDomain)"
+				info:             "Configuring secure route to \(cluster.name) cluster"
 				annotations: {
 					// TODO(gio): Change type to cluster-gateway or sth similar.
-					"dodo.cloud/resource-type": "ingress"
+					"dodo.cloud/resource-type":         "ingress"
 					"dodo.cloud/resource.ingress.host": "https://\(_clusterDomain)"
-					"dodo.cloud/internal": "true"
+					"dodo.cloud/internal":              "true"
 				}
 				values: {
-					domain: _clusterDomain
-					ingressClassName: cluster.ingressClassName
+					domain:            _clusterDomain
+					ingressClassName:  cluster.ingressClassName
 					certificateIssuer: ""
 					annotations: {
 						"nginx.ingress.kubernetes.io/force-ssl-redirect": "false"
-						"nginx.ingress.kubernetes.io/ssl-redirect": "false"
+						"nginx.ingress.kubernetes.io/ssl-redirect":       "false"
 					}
 					service: {
 						name: _service.name
@@ -153,18 +153,18 @@
 				cluster: null
 				// TODO(gio): take it from input.network.namespace
 				targetNamespace: "\(global.namespacePrefix)ingress-private"
-				_service: service
-				info: "Generating TLS certificate for https://\(_domain)"
+				_service:        service
+				info:            "Generating TLS certificate for https://\(_domain)"
 				annotations: {
-					"dodo.cloud/resource-type": "ingress"
+					"dodo.cloud/resource-type":         "ingress"
 					"dodo.cloud/resource.ingress.host": "https://\(_domain)"
 					"dodo.cloud/resource.ingress.home": home
 					"dodo.cloud/resource.ingress.name": label
 				}
 				values: {
-					domain: _domain
-					appRoot: _appRoot
-					ingressClassName: network.ingressClass
+					domain:            _domain
+					appRoot:           _appRoot
+					ingressClassName:  network.ingressClass
 					certificateIssuer: network.certificateIssuer
 					service: {
 						if auth.enabled {
@@ -184,19 +184,19 @@
 			"\(name)-ingress": {
 				chart: charts.ingress
 				// NOTE(gio): Force to install in default cluster.
-				cluster: null
+				cluster:  null
 				_service: service
-				info: "Generating TLS certificate for https://\(_domain)"
+				info:     "Generating TLS certificate for https://\(_domain)"
 				annotations: {
-					"dodo.cloud/resource-type": "ingress"
+					"dodo.cloud/resource-type":         "ingress"
 					"dodo.cloud/resource.ingress.host": "https://\(_domain)"
 					"dodo.cloud/resource.ingress.home": home
 					"dodo.cloud/resource.ingress.name": label
 				}
 				values: {
-					domain: _domain
-					appRoot: _appRoot
-					ingressClassName: network.ingressClass
+					domain:            _domain
+					appRoot:           _appRoot
+					ingressClassName:  network.ingressClass
 					certificateIssuer: network.certificateIssuer
 					service: {
 						if auth.enabled {
@@ -227,7 +227,7 @@
 		for k, v in ingress {
 			"\(k)": #Ingress & v & {
 				name: k
-				g: global
+				g:    global
 				if _cluster != _|_ {
 					cluster: _cluster
 				}
diff --git a/core/installer/app_configs/app_global_infra.cue b/core/installer/app_configs/app_global_infra.cue
index b3069d0..a6696fa 100644
--- a/core/installer/app_configs/app_global_infra.cue
+++ b/core/installer/app_configs/app_global_infra.cue
@@ -1,16 +1,16 @@
 #Global: {
 	pcloudEnvName: string | *""
-    publicIP: [...string] | *[]
-	namespacePrefix: string | *""
-    infraAdminPublicKey: string | *""
+	publicIP: [...string] | *[]
+	namespacePrefix:     string | *""
+	infraAdminPublicKey: string | *""
 }
 
 #Network: {
-	name: string
-	ingressClass: string
-	certificateIssuer: string | *""
-	allocatePortAddr: string
-	reservePortAddr: string
+	name:               string
+	ingressClass:       string
+	certificateIssuer:  string | *""
+	allocatePortAddr:   string
+	reservePortAddr:    string
 	deallocatePortAddr: string
 }
 
diff --git a/core/installer/app_configs/dodo_app.cue b/core/installer/app_configs/dodo_app.cue
index 6e18feb..56dbdfc 100644
--- a/core/installer/app_configs/dodo_app.cue
+++ b/core/installer/app_configs/dodo_app.cue
@@ -13,8 +13,8 @@
 	// app-runner registers itself as worker, which later is used by dodo-app server
 	// to ping runners on git push.
 	// TODO(gio): Rethink these variables together with flags in app-runner
-	managerAddr: string | *""
-	appId: string | *""
+	managerAddr:   string | *""
+	appId:         string | *""
 	sshPrivateKey: string
 	// TODO(gio): this should not be necessary as app.dev.username is autogenerated
 	username?: string
@@ -58,8 +58,8 @@
 
 	for svc in service {
 		if svc.dev.enabled {
-			username: string | *svc.dev.username
-			vpnAuthKey: string  @role(VPNAuthKey) @usernameField(username)
+			username:   string | *svc.dev.username
+			vpnAuthKey: string @role(VPNAuthKey) @usernameField(username)
 		}
 	}
 }
@@ -70,30 +70,30 @@
 postgresql: [...#PostgreSQLInput] | *[]
 mongodb: [...#MongoDBInput] | *[]
 
-_volume: volume
+_volume:     volume
 _postgresql: postgresql
-_mongodb: mongodb
+_mongodb:    mongodb
 
 envVars: [
 	for v in _volume {
 		"DODO_VOLUME_\(strings.ToUpper(v.name))=/dodo/volume/\(v.name)"
-	}
+	},
 	for p in _postgresql {
 		"DODO_POSTGRESQL_\(strings.ToUpper(p.name))_URL=postgresql://postgres:postgres@postgres-\(p.name).\(release.namespace).svc.cluster.local/postgres"
-	}
+	},
 	for m in _mongodb {
 		"DODO_MONGODB_\(strings.ToUpper(m.name))_URL=mongodb://mongo:mongo@mongodb-\(m.name).\(release.namespace).svc.cluster.local/mongo"
-	}
+	},
 ]
 
 #AppIngress: {
-	network: string
+	network:   string
 	subdomain: string
-	auth: #Auth | *{ enabled: false }
-	port: { name: string } | { value: number } | *{ name: "web" }
+	auth: #Auth | *{enabled: false}
+	port: {name: string} | {value: number} | *{name: "web"}
 
 	_network: networks[strings.ToLower(network)]
-	baseURL: "https://\(subdomain).\(_network.domain)"
+	baseURL:  "https://\(subdomain).\(_network.domain)"
 }
 
 #Command: {
@@ -107,7 +107,7 @@
 }
 
 #DevEnabled: {
-	enabled: true
+	enabled:  true
 	username: string
 }
 
@@ -126,15 +126,15 @@
 	rootDir: string
 	runConfiguration: [...#Command]
 	volume: [...string] | *[]
-	dev: #Dev | *{ enabled: false }
+	dev: #Dev | *{enabled: false}
 	vm: #VMCustomization
 	// TODO(gio): check for duplicate values
 	apiPort: #PortValue | *3000
 	ports: [...#Port]
 	source: close({
 		repository: string
-		branch: string | *"master"
-		rootDir: string | *"/"
+		branch:     string | *"master"
+		rootDir:    string | *"/"
 	})
 
 	lastCmdEnv: list.Concat([
@@ -142,9 +142,9 @@
 		[
 			for p in ports {
 				"DODO_PORT_\(strings.ToUpper(p.name))=\(p.value)"
-			}
-	    ]
-    ])
+			},
+		],
+	])
 
 	...
 }
@@ -157,9 +157,9 @@
 
 #GoAppTmpl: #AppTmpl & {
 	type: _goVer1200 | _goVer1220 | _goVer1240
-	run: string | *"main.go"
+	run:  string | *"main.go"
 	ports: [...#Port] | *[{
-		name: "web"
+		name:  "web"
 		value: 8080
 	}]
 	rootDir: _appDir
@@ -167,13 +167,13 @@
 	lastCmdEnv: [...string]
 
 	runConfiguration: [{
-		bin: "/usr/local/go/bin/go",
+		bin: "/usr/local/go/bin/go"
 		args: ["mod", "tidy"]
 	}, {
-		bin: "/usr/local/go/bin/go",
+		bin: "/usr/local/go/bin/go"
 		args: ["build", "-o", ".app", run]
 	}, {
-		bin: ".app",
+		bin: ".app"
 		env: lastCmdEnv
 	}]
 }
@@ -182,13 +182,13 @@
 	type: _goVer1200
 	vm: {
 		env: [
-			"export PATH=$PATH:/usr/local/go/bin"
-	    ]
+			"export PATH=$PATH:/usr/local/go/bin",
+		]
 		cloudInit: runCmd: [
 			["sh", "-c", "wget https://go.dev/dl/go1.20.linux-amd64.tar.gz -O /tmp/go.tar.gz"],
 			["sh", "-c", "rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tar.gz"],
 			["sh", "-c", "rm /tmp/go.tar.gz"],
-        ]
+		]
 	}
 }
 
@@ -196,13 +196,13 @@
 	type: _goVer1220
 	vm: {
 		env: [
-			"export PATH=$PATH:/usr/local/go/bin"
-	    ]
+			"export PATH=$PATH:/usr/local/go/bin",
+		]
 		cloudInit: runCmd: [
 			["sh", "-c", "wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz -O /tmp/go.tar.gz"],
 			["sh", "-c", "rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tar.gz"],
 			["sh", "-c", "rm /tmp/go.tar.gz"],
-        ]
+		]
 	}
 }
 
@@ -210,13 +210,13 @@
 	type: _goVer1240
 	vm: {
 		env: [
-			"export PATH=$PATH:/usr/local/go/bin"
-	    ]
+			"export PATH=$PATH:/usr/local/go/bin",
+		]
 		cloudInit: runCmd: [
 			["sh", "-c", "wget https://go.dev/dl/go1.24.0.linux-amd64.tar.gz -O /tmp/go.tar.gz"],
 			["sh", "-c", "rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tar.gz"],
 			["sh", "-c", "rm /tmp/go.tar.gz"],
-        ]
+		]
 	}
 }
 
@@ -230,7 +230,7 @@
 	type: _hugoLatest
 	ingress: [#AppIngress, ...#AppIngress]
 	ports: [...#Port] | *[{
-		name: "web"
+		name:  "web"
 		value: 1313
 	}]
 	rootDir: _appDir
@@ -238,9 +238,9 @@
 	lastCmdEnv: [...string]
 
 	runConfiguration: [{
-		bin: "/usr/bin/hugo",
+		bin: "/usr/bin/hugo"
 	}, {
-		bin: "/usr/bin/hugo",
+		bin: "/usr/bin/hugo"
 		args: [
 			"server",
 			"--watch=false",
@@ -248,7 +248,7 @@
 			"--port=1313",
 			"--baseURL=\(ingress[0].baseURL)",
 			"--appendPort=false",
-        ]
+		]
 		env: lastCmdEnv
 	}]
 }
@@ -260,7 +260,7 @@
 #PHPAppTmpl: #AppTmpl & {
 	type: "php:8.2-apache"
 	ports: [...#Port] | *[{
-		name: "web"
+		name:  "web"
 		value: 80
 	}]
 	rootDir: "/var/www/html"
@@ -268,7 +268,7 @@
 	lastCmdEnv: [...string]
 
 	runConfiguration: [{
-		bin: "/usr/local/bin/apache2-foreground",
+		bin: "/usr/local/bin/apache2-foreground"
 		env: lastCmdEnv
 	}]
 }
@@ -278,10 +278,10 @@
 // Nextjs with Deno2
 
 #NextjsDeno2AppTmpl: #AppTmpl & {
-	type: "nextjs:deno-2.0.0"
+	type:    "nextjs:deno-2.0.0"
 	apiPort: 2000
 	ports: [...#Port] | *[{
-		name: "web"
+		name:  "web"
 		value: 3000
 	}]
 	rootDir: _appDir
@@ -290,34 +290,34 @@
 	lastCmdEnv: [...string]
 
 	runConfiguration: [{
-		bin: "/usr/bin/npm",
+		bin: "/usr/bin/npm"
 		args: ["install"]
 	},
-	for c in preBuildCommands {
+		for c in preBuildCommands {
+			{
+				bin:  c.bin
+				args: c.args
+				env: list.Concat([lastCmdEnv, c.env])
+			}
+		},
 		{
-			bin: c.bin
-			args: c.args
-			env: list.Concat([lastCmdEnv, c.env])
-		}
-	}
-	{
-		bin: "/usr/bin/deno",
-		args: ["task", "build"]
-		env: lastCmdEnv
-	}, {
-		bin: "/usr/bin/deno",
-		args: ["task", "start"]
-		env: lastCmdEnv
-	}]
+			bin: "/usr/bin/deno"
+			args: ["task", "build"]
+			env: lastCmdEnv
+		}, {
+			bin: "/usr/bin/deno"
+			args: ["task", "start"]
+			env: lastCmdEnv
+		}]
 
 	vm: {
 		env: [
-			"export PATH=$PATH:/usr/local/deno/bin"
-	    ]
+			"export PATH=$PATH:/usr/local/deno/bin",
+		]
 		cloudInit: runCmd: [
 			["sh", "-c", "apt-get install -y npm unzip"],
 			["sh", "-c", "curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local/deno sh -s -- -y --no-modify-path"],
-        ]
+		]
 	}
 }
 
@@ -327,9 +327,9 @@
 
 #NodeJSAppTmpl: #AppTmpl & {
 	buildPath: string | *"dist"
-	apiPort: 2000
+	apiPort:   2000
 	ports: [...#Port] | *[{
-		name: "web"
+		name:  "web"
 		value: 3000
 	}]
 	rootDir: _appDir
@@ -338,34 +338,34 @@
 	lastCmdEnv: [...string]
 
 	runConfiguration: [{
-		bin: "/usr/local/bin/npm",
+		bin: "/usr/local/bin/npm"
 		args: ["install"]
 	},
-	{
-		bin: "/usr/local/bin/npm",
-		args: ["ci"]
-	},
-	for c in preBuildCommands {
 		{
-			bin: c.bin
-			args: c.args
-			env: list.Concat([lastCmdEnv, c.env])
-		}
-	}
-	{
-		bin: "/usr/local/bin/npm",
-		args: ["run", "build"]
-		env: lastCmdEnv
-	}, {
-		bin: "/usr/local/bin/node",
-		args: ["./\(buildPath)/index.js"]
-		env: lastCmdEnv
-	}]
+			bin: "/usr/local/bin/npm"
+			args: ["ci"]
+		},
+		for c in preBuildCommands {
+			{
+				bin:  c.bin
+				args: c.args
+				env: list.Concat([lastCmdEnv, c.env])
+			}
+		},
+		{
+			bin: "/usr/local/bin/npm"
+			args: ["run", "build"]
+			env: lastCmdEnv
+		}, {
+			bin: "/usr/local/bin/node"
+			args: ["./\(buildPath)/index.js"]
+			env: lastCmdEnv
+		}]
 
 	vm: {
 		cloudInit: runCmd: [
 			["sh", "-c", "apt-get install -y npm nodejs"],
-        ]
+		]
 	}
 }
 
@@ -383,46 +383,46 @@
 	for svc in service {
 		"service_\(svc.name)": #WithOut & {
 			envProfile: strings.Join(list.Concat([
-														svc.vm.env,
-				[for e in svc.lastCmdEnv { "export \(e)" }]
-												]), "\n")
+				svc.vm.env,
+				[for e in svc.lastCmdEnv {"export \(e)"}],
+			]), "\n")
 			if !svc.dev.enabled {
 				{
-						// TODO(gio): support vm open ports
-						openPort: list.Concat([
-							[for i, e in svc.expose if e.port.name != _|_ {
-								for p in svc.ports if e.port.name == p.name {
-									name: "port_service_\(svc.name)_\(i)"
-									network: networks[strings.ToLower(e.network)]
-									port: input[name]
-									protocol: p.protocol
-									service: {
-										name: "app-app"
-										port: p.value
-									}
+					// TODO(gio): support vm open ports
+					openPort: list.Concat([
+						[for i, e in svc.expose if e.port.name != _|_ {
+							for p in svc.ports if e.port.name == p.name {
+								name:     "port_service_\(svc.name)_\(i)"
+								network:  networks[strings.ToLower(e.network)]
+								port:     input[name]
+								protocol: p.protocol
+								service: {
+									name: "app-app"
+									port: p.value
 								}
-							}],
-							[for i, e in svc.expose if e.port.value != _|_ {
-								for p in svc.ports if e.port.value == p.value {
-									name: "port_service_\(svc.name)_\(i)"
-									network: networks[strings.ToLower(e.network)]
-									port: input[name]
-									protocol: p.protocol
-									service: {
-										name: "app-app"
-										port: p.value
-									}
+							}
+						}],
+						[for i, e in svc.expose if e.port.value != _|_ {
+							for p in svc.ports if e.port.value == p.value {
+								name:     "port_service_\(svc.name)_\(i)"
+								network:  networks[strings.ToLower(e.network)]
+								port:     input[name]
+								protocol: p.protocol
+								service: {
+									name: "app-app"
+									port: p.value
 								}
-							}]
-											 ])
+							}
+						}],
+					])
 					ingress: {
 						if svc.ingress != _|_ {
 							{for i, ingress in svc.ingress {
 								"\(svc.name)-\(i)": {
-									label: svc.name
-									network: networks[strings.ToLower(ingress.network)]
+									label:     svc.name
+									network:   networks[strings.ToLower(ingress.network)]
 									subdomain: ingress.subdomain
-									auth: ingress.auth
+									auth:      ingress.auth
 									if input.cluster != _|_ {
 										cluster: input.cluster
 									}
@@ -440,162 +440,162 @@
 						}
 					}
 					images: {
-							app: {
-								repository: "giolekva"
-								name: "app-runner"
-								tag: strings.Replace(svc.type, ":", "-", -1)
-								pullPolicy: "Always"
-							}
-							"tailscale-proxy": {
-								repository: "tailscale"
-								name: "tailscale"
-								tag: "v1.82.0"
-								pullPolicy: "IfNotPresent"
-							}
+						app: {
+							repository: "giolekva"
+							name:       "app-runner"
+							tag:        strings.Replace(svc.type, ":", "-", -1)
+							pullPolicy: "Always"
 						}
-						charts: {
-							"access-secrets": {
-								kind: "GitRepository"
-								address: "https://code.v1.dodo.cloud/helm-charts"
-								branch: "main"
-								path: "charts/access-secrets"
-							}
-							app: {
-								kind: "GitRepository"
-								address: "https://code.v1.dodo.cloud/helm-charts"
-								branch: "main"
-								path: "charts/app-runner"
-							}
+						"tailscale-proxy": {
+							repository: "tailscale"
+							name:       "tailscale"
+							tag:        "v1.82.0"
+							pullPolicy: "IfNotPresent"
 						}
-						helm: {
-							if input.cluster != _|_ {
-								{
+					}
+					charts: {
+						"access-secrets": {
+							kind:    "GitRepository"
+							address: "https://code.v1.dodo.cloud/helm-charts"
+							branch:  "main"
+							path:    "charts/access-secrets"
+						}
+						app: {
+							kind:    "GitRepository"
+							address: "https://code.v1.dodo.cloud/helm-charts"
+							branch:  "main"
+							path:    "charts/app-runner"
+						}
+					}
+					helm: {
+						if input.cluster != _|_ {
+							{
 								"access-secrets": {
 									chart: charts["access-secrets"]
 									values: {
 										serviceAccountName: "default"
 									}
 								}
-								}
 							}
-							"\(svc.name)": {
-								chart: charts.app
-								values: {
-									image: {
-										repository: images.app.fullName
-										tag: images.app.tag
-										pullPolicy: images.app.pullPolicy
-									}
-									// TODO(gio): install gvisor runtime during new remote cluster init
-									if input.cluster == _|_ {
-										runtimeClassName: "untrusted-external" // TODO(gio): make this part of the infra config
-									}
-									name: svc.name
-									apiPort: svc.apiPort
-									appPorts: [for p in svc.ports {
-										name: p.name
-										containerPort: p.value
-										protocol: p.protocol
-									}]
-									appDir: svc.rootDir
-									appId: input.appId
-									repoAddr: svc.source.repository
-									branch: svc.source.branch
-									rootDir: svc.source.rootDir
-									if input.sshPrivateKey != "" {
-										sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
-									}
-									runCfg: base64.Encode(null, json.Marshal(svc.runConfiguration))
-									managerAddr: input.managerAddr
-									volumes: [
-										for v in svc.volume {
-											name: v.name
-											mountPath: "/dodo/volume/\(v)"
-										}
-									]
+						}
+						"\(svc.name)": {
+							chart: charts.app
+							values: {
+								image: {
+									repository: images.app.fullName
+									tag:        images.app.tag
+									pullPolicy: images.app.pullPolicy
 								}
+								// TODO(gio): install gvisor runtime during new remote cluster init
+								if input.cluster == _|_ {
+									runtimeClassName: "untrusted-external" // TODO(gio): make this part of the infra config
+								}
+								name:    svc.name
+								apiPort: svc.apiPort
+								appPorts: [for p in svc.ports {
+									name:          p.name
+									containerPort: p.value
+									protocol:      p.protocol
+								}]
+								appDir:   svc.rootDir
+								appId:    input.appId
+								repoAddr: svc.source.repository
+								branch:   svc.source.branch
+								rootDir:  svc.source.rootDir
+								if input.sshPrivateKey != "" {
+									sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
+								}
+								runCfg:      base64.Encode(null, json.Marshal(svc.runConfiguration))
+								managerAddr: input.managerAddr
+								volumes: [
+									for v in svc.volume {
+										name:      v.name
+										mountPath: "/dodo/volume/\(v)"
+									},
+								]
 							}
 						}
 					}
 				}
 			}
+		}
 
 		if svc.dev.enabled {
 			// TODO(gio): reuse envProfile from above
 			_envProfile: strings.Join(list.Concat([
-														 svc.vm.env,
-				[for e in svc.lastCmdEnv { "export \(e)" }]
-												 ]), "\n")
+				svc.vm.env,
+				[for e in svc.lastCmdEnv {"export \(e)"}],
+			]), "\n")
 			{
-					"\(svc.name)": #WithOut & {
-						ingress: {
-							if svc.ingress != _|_ {
-								{for i, ingress in svc.ingress {
-									"\(svc.name)-\(i)": {
-										label: svc.name
-										network: networks[strings.ToLower(ingress.network)]
-										subdomain: ingress.subdomain
-										auth: ingress.auth
-										service: {
-											name: svc.name
-											if ingress.port.name != _|_ {
-												port: name: ingress.port.name
-											}
-											if ingress.port.value != _|_ {
-												port: number: ingress.port.value
-											}
+				"\(svc.name)": #WithOut & {
+					ingress: {
+						if svc.ingress != _|_ {
+							{for i, ingress in svc.ingress {
+								"\(svc.name)-\(i)": {
+									label:     svc.name
+									network:   networks[strings.ToLower(ingress.network)]
+									subdomain: ingress.subdomain
+									auth:      ingress.auth
+									service: {
+										name: svc.name
+										if ingress.port.name != _|_ {
+											port: name: ingress.port.name
+										}
+										if ingress.port.value != _|_ {
+											port: number: ingress.port.value
 										}
 									}
-									// TODO(gio): code should work even without svc ingress
-									"\(svc.name)-\(i)-code": {
-										label: "VS Code"
-										home: "/?folder=/home/\(svc.dev.username)/code"
-										network: networks[strings.ToLower(ingress.network)]
-										subdomain: "code-\(ingress.subdomain)"
-										auth: enabled: false
-										service: {
-											name: svc.name
-											port: name: _codeServerPortName
-										}
+								}
+								// TODO(gio): code should work even without svc ingress
+								"\(svc.name)-\(i)-code": {
+									label:     "VS Code"
+									home:      "/?folder=/home/\(svc.dev.username)/code"
+									network:   networks[strings.ToLower(ingress.network)]
+									subdomain: "code-\(ingress.subdomain)"
+									auth: enabled: false
+									service: {
+										name: svc.name
+										port: name: _codeServerPortName
 									}
-								}}
-							}
+								}
+							}}
 						}
-						vm: {
-							"\(svc.name)": {
-								username: svc.dev.username
-								domain: global.domain
-								vpn: {
-									enabled: true
-									loginServer: "https://headscale.\(global.domain)"
-									authKey: input.vpnAuthKey
-								}
-								codeServerEnabled: true
-								cpuCores: 2
-								memory: "3Gi"
-								ports: svc.ports
-								configFiles: {
-									"env.sh": _envProfile
-								}
-								cloudInit: {
-									writeFiles: [{
-										path: "/home/\(username)/.bash_profile"
-										content: "source /home/\(username)/.dodo/env.sh"
-										owner: "\(username):\(username)"
-										permissions: "0700"
-									}]
-									runCmd: list.Concat([[
-																["sh", "-c", "chown \(username):\(username) /home/\(username)/.cache"],
-										["sh", "-c", "GIT_SSH_COMMAND='ssh -i /home/\(username)/.ssh/id_ed25519 -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new' git clone --branch \(svc.source.branch) \(svc.source.repository) /home/\(username)/code"],
-										["sh", "-c", "chown -R \(username):\(username) /home/\(username)/code"],
-										["sh", "-c", "chown -R \(username):\(username) /home/\(username)"],
-														], svc.vm.cloudInit.runCmd])
-								}
+					}
+					vm: {
+						"\(svc.name)": {
+							username: svc.dev.username
+							domain:   global.domain
+							vpn: {
+								enabled:     true
+								loginServer: "https://headscale.\(global.domain)"
+								authKey:     input.vpnAuthKey
+							}
+							codeServerEnabled: true
+							cpuCores:          2
+							memory:            "3Gi"
+							ports:             svc.ports
+							configFiles: {
+								"env.sh": _envProfile
+							}
+							cloudInit: {
+								writeFiles: [{
+									path:        "/home/\(username)/.bash_profile"
+									content:     "source /home/\(username)/.dodo/env.sh"
+									owner:       "\(username):\(username)"
+									permissions: "0700"
+								}]
+								runCmd: list.Concat([[
+									["sh", "-c", "chown \(username):\(username) /home/\(username)/.cache"],
+									["sh", "-c", "GIT_SSH_COMMAND='ssh -i /home/\(username)/.ssh/id_ed25519 -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new' git clone --branch \(svc.source.branch) \(svc.source.repository) /home/\(username)/code"],
+									["sh", "-c", "chown -R \(username):\(username) /home/\(username)/code"],
+									["sh", "-c", "chown -R \(username):\(username) /home/\(username)"],
+								], svc.vm.cloudInit.runCmd])
 							}
 						}
 					}
 				}
 			}
+		}
 	}
 }
 
diff --git a/core/installer/values-tmpl/appmanager.cue b/core/installer/values-tmpl/appmanager.cue
index 1cd7dbf..499794a 100644
--- a/core/installer/values-tmpl/appmanager.cue
+++ b/core/installer/values-tmpl/appmanager.cue
@@ -3,40 +3,40 @@
 )
 
 input: {
-	network: #Network @name(Network)
-	repoAddr: string @name(Repository Address)
-	sshPrivateKey: string @name(SSH Private Key)
-	authGroups: string @name(Allowed Groups)
+	network:       #Network @name(Network)
+	repoAddr:      string   @name(Repository Address)
+	sshPrivateKey: string   @name(SSH Private Key)
+	authGroups:    string   @name(Allowed Groups)
 }
 
-name: "App Manager"
+name:      "App Manager"
 namespace: "appmanager"
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 33.66287237 39.68503937'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-    </style>
-  </defs>
-  <path class='cls-1' d='m2.77885812,10.03744798c-1.53217449,0-2.77885812,1.24698542-2.77885812,2.77885812v24.08987515c0,1.5318727,1.24668363,2.77885812,2.77885812,2.77885812h28.10515613c1.53217449,0,2.77885812-1.24698542,2.77885812-2.77885812V12.8163061c0-1.5318727-1.24668363-2.77885812-2.77885812-2.77885812h-5.25110027v-1.23612107c0-4.9348271-3.86589623-8.80132691-8.80132691-8.80132691s-8.80162869,3.86649981-8.80162869,8.80132691v1.23612107H2.77885812Zm29.34127721,28.10485435H1.54273704V11.58018502h30.57739828v26.5621173ZM8.11234634,16.05991677c.58426035,4.33004521,4.20419987,7.56520583,8.71924074,7.56520583,4.51473908,0,8.1346786-3.23516062,8.71893895-7.56520583h-1.56084429c-.57067992,3.46210473-3.51008892,6.02246879-7.15809467,6.02246879s-6.58771654-2.56036406-7.15839646-6.02246879h-1.56084429Zm15.9778306-6.02246879h-14.51748151v-1.23612107c0-4.07050807,3.18838358-7.25858986,7.25889165-7.25858986,4.07020628,0,7.25858986,3.18808179,7.25858986,7.25858986v1.23612107Z'/>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 33.66287237 39.68503937'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	    </style>
+	  </defs>
+	  <path class='cls-1' d='m2.77885812,10.03744798c-1.53217449,0-2.77885812,1.24698542-2.77885812,2.77885812v24.08987515c0,1.5318727,1.24668363,2.77885812,2.77885812,2.77885812h28.10515613c1.53217449,0,2.77885812-1.24698542,2.77885812-2.77885812V12.8163061c0-1.5318727-1.24668363-2.77885812-2.77885812-2.77885812h-5.25110027v-1.23612107c0-4.9348271-3.86589623-8.80132691-8.80132691-8.80132691s-8.80162869,3.86649981-8.80162869,8.80132691v1.23612107H2.77885812Zm29.34127721,28.10485435H1.54273704V11.58018502h30.57739828v26.5621173ZM8.11234634,16.05991677c.58426035,4.33004521,4.20419987,7.56520583,8.71924074,7.56520583,4.51473908,0,8.1346786-3.23516062,8.71893895-7.56520583h-1.56084429c-.57067992,3.46210473-3.51008892,6.02246879-7.15809467,6.02246879s-6.58771654-2.56036406-7.15839646-6.02246879h-1.56084429Zm15.9778306-6.02246879h-14.51748151v-1.23612107c0-4.07050807,3.18838358-7.25858986,7.25889165-7.25858986,4.07020628,0,7.25858986,3.18808179,7.25858986,7.25858986v1.23612107Z'/>
+	</svg>"""
 
-_subdomain: "apps"
+_subdomain:    "apps"
 _httpPortName: "http"
 
 _domain: "\(_subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
 out: {
 	ingress: {
 		appmanager: {
 			auth: {
 				enabled: true
-				groups: input.authGroups
+				groups:  input.authGroups
 			}
-			network: input.network
+			network:   input.network
 			subdomain: _subdomain
 			service: {
 				name: "appmanager"
@@ -48,18 +48,18 @@
 	images: {
 		appmanager: {
 			repository: "giolekva"
-			name: "pcloud-installer"
-			tag: "latest"
+			name:       "pcloud-installer"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		appmanager: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/appmanager"
+			branch:  "main"
+			path:    "charts/appmanager"
 		}
 	}
 
@@ -67,22 +67,22 @@
 		appmanager: {
 			chart: charts.appmanager
 			values: {
-				repoAddr: input.repoAddr
+				repoAddr:      input.repoAddr
 				sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
 				// TODO(gio): de-hardcode these variables
-				headscaleAPIAddr: "http://headscale-api.\(global.namespacePrefix)app-headscale.svc.cluster.local"
-				dnsAPIAddr: "http://dns-api.\(global.namespacePrefix)dns.svc.cluster.local"
+				headscaleAPIAddr:       "http://headscale-api.\(global.namespacePrefix)app-headscale.svc.cluster.local"
+				dnsAPIAddr:             "http://dns-api.\(global.namespacePrefix)dns.svc.cluster.local"
 				clusterProxyConfigPath: "/apps/private-network/resources/proxy-backend-config.yaml"
 				ingress: {
-					className: input.network.ingressClass
-					domain: _domain
+					className:         input.network.ingressClass
+					domain:            _domain
 					certificateIssuer: ""
 				}
 				clusterRoleName: "\(global.id)-appmanager"
-				portName: _httpPortName
+				portName:        _httpPortName
 				image: {
 					repository: images.appmanager.fullName
-					tag: images.appmanager.tag
+					tag:        images.appmanager.tag
 					pullPolicy: images.appmanager.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/cert-manager.cue b/core/installer/values-tmpl/cert-manager.cue
index 66e21af..c7c3878 100644
--- a/core/installer/values-tmpl/cert-manager.cue
+++ b/core/installer/values-tmpl/cert-manager.cue
@@ -1,51 +1,51 @@
 input: {}
 
-name: "cert-manager"
+name:      "cert-manager"
 namespace: "cert-manager"
 
 out: {
 	images: {
 		certManager: {
-			registry: "quay.io"
+			registry:   "quay.io"
 			repository: "jetstack"
-			name: "cert-manager-controller"
-			tag: "v1.12.2"
+			name:       "cert-manager-controller"
+			tag:        "v1.12.2"
 			pullPolicy: "IfNotPresent"
 		}
 		cainjector: {
-			registry: "quay.io"
+			registry:   "quay.io"
 			repository: "jetstack"
-			name: "cert-manager-cainjector"
-			tag: "v1.12.2"
+			name:       "cert-manager-cainjector"
+			tag:        "v1.12.2"
 			pullPolicy: "IfNotPresent"
 		}
 		webhook: {
-			registry: "quay.io"
+			registry:   "quay.io"
 			repository: "jetstack"
-			name: "cert-manager-webhook"
-			tag: "v1.12.2"
+			name:       "cert-manager-webhook"
+			tag:        "v1.12.2"
 			pullPolicy: "IfNotPresent"
 		}
 		dnsChallengeSolver: {
 			repository: "giolekva"
-			name: "dns-challenge-solver"
-			tag: "latest"
+			name:       "dns-challenge-solver"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		certManager: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/cert-manager"
+			branch:  "main"
+			path:    "charts/cert-manager"
 		}
 		dnsChallengeSolver: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/cert-manager-webhook-pcloud"
+			branch:  "main"
+			path:    "charts/cert-manager-webhook-pcloud"
 		}
 	}
 
@@ -53,30 +53,30 @@
 		"cert-manager": {
 			chart: charts.certManager
 			dependsOn: [{
-				name: "ingress-public"
+				name:      "ingress-public"
 				namespace: "\(global.pcloudEnvName)-ingress-public"
 			}]
 			values: {
-				fullnameOverride: "\(global.pcloudEnvName)-cert-manager"
-				installCRDs: true
+				fullnameOverride:              "\(global.pcloudEnvName)-cert-manager"
+				installCRDs:                   true
 				dns01RecursiveNameserversOnly: true
-				dns01RecursiveNameservers: "1.1.1.1:53,8.8.8.8:53"
+				dns01RecursiveNameservers:     "1.1.1.1:53,8.8.8.8:53"
 				image: {
 					repository: images.certManager.fullName
-					tag: images.certManager.tag
+					tag:        images.certManager.tag
 					pullPolicy: images.certManager.pullPolicy
 				}
 				cainjector: {
 					image: {
 						repository: images.cainjector.fullName
-						tag: images.cainjector.tag
+						tag:        images.cainjector.tag
 						pullPolicy: images.cainjector.pullPolicy
 					}
 				}
 				webhook: {
 					image: {
 						repository: images.webhook.fullName
-						tag: images.webhook.tag
+						tag:        images.webhook.tag
 						pullPolicy: images.webhook.pullPolicy
 					}
 				}
@@ -85,21 +85,21 @@
 		"cert-manager-webhook-pcloud": {
 			chart: charts.dnsChallengeSolver
 			dependsOn: [{
-				name: "cert-manager"
+				name:      "cert-manager"
 				namespace: release.namespace
 			}]
 			values: {
 				fullnameOverride: "\(global.pcloudEnvName)-cert-manager-webhook-pcloud"
 				certManager: {
-					name: "\(global.pcloudEnvName)-cert-manager"
+					name:      "\(global.pcloudEnvName)-cert-manager"
 					namespace: "\(global.pcloudEnvName)-cert-manager"
 				}
 				image: {
 					repository: images.dnsChallengeSolver.fullName
-					tag: images.dnsChallengeSolver.tag
+					tag:        images.dnsChallengeSolver.tag
 					pullPolicy: images.dnsChallengeSolver.pullPolicy
 				}
-				logLevel: 2
+				logLevel:     2
 				apiGroupName: "dodo.cloud"
 				resolverName: "dns-resolver-pcloud"
 			}
diff --git a/core/installer/values-tmpl/certificate-issuer-custom.cue b/core/installer/values-tmpl/certificate-issuer-custom.cue
index 469382d..6b8894a 100644
--- a/core/installer/values-tmpl/certificate-issuer-custom.cue
+++ b/core/installer/values-tmpl/certificate-issuer-custom.cue
@@ -3,60 +3,60 @@
 )
 
 input: {
-	name: string
+	name:   string
 	domain: string
 }
 
-name: "Network"
-namespace: "ingress-custom"
-readme: "Configure custom public domain"
+name:        "Network"
+namespace:   "ingress-custom"
+readme:      "Configure custom public domain"
 description: readme
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 35.84897203'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-9.97439025' y='-11.89242392' width='59.63381987' height='59.63381987'/>
-  <g>
-    <path class='cls-1' d='m8.33392163,35.84897203H.66139092c-.36534918,0-.66139092-.29623977-.66139092-.66139092v-7.67213467c0-.36515115.29604174-.66139092.66139092-.66139092h7.67253071c.36534918,0,.66139092.29623977.66139092.66139092v7.67213467c0,.36515115-.29604174.66139092-.66139092.66139092Zm-7.01113979-1.32278184h6.34974887v-6.34935283H1.32278184v6.34935283Zm18.51973785-6.34935283c-.36534918,0-.66139092-.29623977-.66139092-.66139092v-14.68367051H4.49765628c-.36534918,0-.66139092-.29623977-.66139092-.66139092V.66139092c0-.36515115.29604174-.66139092.66139092-.66139092h30.68972682c.36534918,0,.66139092.29623977.66139092.66139092v11.50899409c0,.36515115-.29604174.66139092-.66139092.66139092h-14.68347249v14.68367051c0,.36515115-.29604174.66139092-.66139092.66139092Zm0-16.66784327h14.68347249V1.32278184H5.1590472v10.18621225h14.68347249Z'/>
-    <path class='cls-1' d='m39.02364845,35.84897203h-7.67253071c-.36534918,0-.66139092-.29623977-.66139092-.66139092v-7.67213467c0-.36515115.29604174-.66139092.66139092-.66139092h3.17487444v-6.35014492H5.1590472v7.01153584c0,.36515115-.29604174.66139092-.66139092.66139092s-.66139092-.29623977-.66139092-.66139092v-7.67292676c0-.36515115.29604174-.66139092.66139092-.66139092h30.68972682c.36534918,0,.66139092.29623977.66139092.66139092v7.01153584h3.17487444c.36534918,0,.66139092.29623977.66139092.66139092v7.67213467c0,.36515115-.29604174.66139092-.66139092.66139092Zm-7.01113979-1.32278184h6.34974887v-6.34935283h-6.34974887v6.34935283Zm-8.33372361,1.32278184h-7.67253071c-.36534918,0-.66139092-.29623977-.66139092-.66139092v-7.67213467c0-.36515115.29604174-.66139092.66139092-.66139092h7.67253071c.36534918,0,.66139092.29623977.66139092.66139092v7.67213467c0,.36515115-.29604174.66139092-.66139092.66139092Zm-7.01113979-1.32278184h6.34974887v-6.34935283h-6.34974887v6.34935283ZM12.16998897,7.07727889h-1.91803367c-.36534918,0-.66139092-.29623977-.66139092-.66139092s.29604174-.66139092.66139092-.66139092h1.91803367c.36534918,0,.66139092.29623977.66139092.66139092s-.29604174.66139092-.66139092.66139092Z'/>
-  </g>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 35.84897203'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-9.97439025' y='-11.89242392' width='59.63381987' height='59.63381987'/>
+	  <g>
+	    <path class='cls-1' d='m8.33392163,35.84897203H.66139092c-.36534918,0-.66139092-.29623977-.66139092-.66139092v-7.67213467c0-.36515115.29604174-.66139092.66139092-.66139092h7.67253071c.36534918,0,.66139092.29623977.66139092.66139092v7.67213467c0,.36515115-.29604174.66139092-.66139092.66139092Zm-7.01113979-1.32278184h6.34974887v-6.34935283H1.32278184v6.34935283Zm18.51973785-6.34935283c-.36534918,0-.66139092-.29623977-.66139092-.66139092v-14.68367051H4.49765628c-.36534918,0-.66139092-.29623977-.66139092-.66139092V.66139092c0-.36515115.29604174-.66139092.66139092-.66139092h30.68972682c.36534918,0,.66139092.29623977.66139092.66139092v11.50899409c0,.36515115-.29604174.66139092-.66139092.66139092h-14.68347249v14.68367051c0,.36515115-.29604174.66139092-.66139092.66139092Zm0-16.66784327h14.68347249V1.32278184H5.1590472v10.18621225h14.68347249Z'/>
+	    <path class='cls-1' d='m39.02364845,35.84897203h-7.67253071c-.36534918,0-.66139092-.29623977-.66139092-.66139092v-7.67213467c0-.36515115.29604174-.66139092.66139092-.66139092h3.17487444v-6.35014492H5.1590472v7.01153584c0,.36515115-.29604174.66139092-.66139092.66139092s-.66139092-.29623977-.66139092-.66139092v-7.67292676c0-.36515115.29604174-.66139092.66139092-.66139092h30.68972682c.36534918,0,.66139092.29623977.66139092.66139092v7.01153584h3.17487444c.36534918,0,.66139092.29623977.66139092.66139092v7.67213467c0,.36515115-.29604174.66139092-.66139092.66139092Zm-7.01113979-1.32278184h6.34974887v-6.34935283h-6.34974887v6.34935283Zm-8.33372361,1.32278184h-7.67253071c-.36534918,0-.66139092-.29623977-.66139092-.66139092v-7.67213467c0-.36515115.29604174-.66139092.66139092-.66139092h7.67253071c.36534918,0,.66139092.29623977.66139092.66139092v7.67213467c0,.36515115-.29604174.66139092-.66139092.66139092Zm-7.01113979-1.32278184h6.34974887v-6.34935283h-6.34974887v6.34935283ZM12.16998897,7.07727889h-1.91803367c-.36534918,0-.66139092-.29623977-.66139092-.66139092s.29604174-.66139092.66139092-.66139092h1.91803367c.36534918,0,.66139092.29623977.66139092.66139092s-.29604174.66139092-.66139092.66139092Z'/>
+	  </g>
+	</svg>"""
 
 out: {
 	charts: {
 		"certificate-issuer": {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/certificate-issuer-public"
+			branch:  "main"
+			path:    "charts/certificate-issuer-public"
 		}
 	}
 
 	helm: {
 		"certificate-issuer": {
 			chart: charts["certificate-issuer"]
-			Info: "Configuring SSL certificate issuer for \(input.domain)"
+			Info:  "Configuring SSL certificate issuer for \(input.domain)"
 			dependsOn: [{
-				name: "ingress-nginx"
+				name:      "ingress-nginx"
 				namespace: "\(global.namespacePrefix)ingress-private"
 			}]
 			values: {
 				issuer: {
-					name: input.name
-					server: "https://acme-v02.api.letsencrypt.org/directory"
-					domain: input.domain
+					name:         input.name
+					server:       "https://acme-v02.api.letsencrypt.org/directory"
+					domain:       input.domain
 					contactEmail: global.contactEmail
 					ingressClass: networks.public.ingressClass
 				}
@@ -67,9 +67,9 @@
 
 help: [{
 	title: "DNS"
-	_records: [for ip in global.nameserverIP { "* 10800 IN A \(ip)" }]
+	_records: [for ip in global.nameserverIP {"* 10800 IN A \(ip)"}]
 	_allRecords: strings.Join(_records, "<br>")
-	contents: """
+	contents:    """
 	Publish following DNS records using \(input.domain) Domain Name Registrar<br><br>
 	\(_allRecords)
 	"""
diff --git a/core/installer/values-tmpl/certificate-issuer-private.cue b/core/installer/values-tmpl/certificate-issuer-private.cue
index 66dc53c..dfd3c9d 100644
--- a/core/installer/values-tmpl/certificate-issuer-private.cue
+++ b/core/installer/values-tmpl/certificate-issuer-private.cue
@@ -1,15 +1,15 @@
 input: {}
 
-name: "certificate-issuer-private"
+name:      "certificate-issuer-private"
 namespace: "ingress-private"
 
 out: {
 	charts: {
 		"certificate-issuer-private": {
-			path: "charts/certificate-issuer-private"
-			kind: "GitRepository"
+			path:    "charts/certificate-issuer-private"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
+			branch:  "main"
 		}
 	}
 
@@ -17,14 +17,14 @@
 		"certificate-issuer-private": {
 			chart: charts["certificate-issuer-private"]
 			dependsOn: [{
-				name: "ingress-nginx"
+				name:      "ingress-nginx"
 				namespace: "\(global.namespacePrefix)ingress-private"
 			}]
 			values: {
 				issuer: {
-					name: "\(global.id)-private"
-					server: "https://acme-v02.api.letsencrypt.org/directory"
-					domain: global.privateDomain
+					name:         "\(global.id)-private"
+					server:       "https://acme-v02.api.letsencrypt.org/directory"
+					domain:       global.privateDomain
 					contactEmail: global.contactEmail
 				}
 				config: {
diff --git a/core/installer/values-tmpl/certificate-issuer-public.cue b/core/installer/values-tmpl/certificate-issuer-public.cue
index 04a6e50..59ee8eb 100644
--- a/core/installer/values-tmpl/certificate-issuer-public.cue
+++ b/core/installer/values-tmpl/certificate-issuer-public.cue
@@ -2,16 +2,16 @@
 	network: #Network
 }
 
-name: "certificate-issuer-public"
+name:      "certificate-issuer-public"
 namespace: "ingress-private"
 
 out: {
 	charts: {
 		"certificate-issuer-public": {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/certificate-issuer-public"
+			branch:  "main"
+			path:    "charts/certificate-issuer-public"
 		}
 	}
 
@@ -20,9 +20,9 @@
 			chart: charts["certificate-issuer-public"]
 			values: {
 				issuer: {
-					name: input.network.certificateIssuer
-					server: "https://acme-v02.api.letsencrypt.org/directory"
-					domain: input.network.domain
+					name:         input.network.certificateIssuer
+					server:       "https://acme-v02.api.letsencrypt.org/directory"
+					domain:       input.network.domain
 					contactEmail: global.contactEmail
 					ingressClass: input.network.ingressClass
 				}
diff --git a/core/installer/values-tmpl/cluster-network.cue b/core/installer/values-tmpl/cluster-network.cue
index 85551e6..d1ae878 100644
--- a/core/installer/values-tmpl/cluster-network.cue
+++ b/core/installer/values-tmpl/cluster-network.cue
@@ -3,63 +3,63 @@
 )
 
 input: {
-	cluster: #Cluster
-	vpnUser: string
+	cluster:          #Cluster
+	vpnUser:          string
 	vpnProxyHostname: string
-	vpnAuthKey: string @role(VPNAuthKey) @usernameField(vpnUser)
-	sshPrivateKey: string
+	vpnAuthKey:       string @role(VPNAuthKey) @usernameField(vpnUser)
+	sshPrivateKey:    string
 }
 
-name: "Cluster Network"
+name:      "Cluster Network"
 namespace: "cluster-network"
 
 out: {
 	images: {
 		"ingress-nginx": {
-			registry: "registry.k8s.io"
+			registry:   "registry.k8s.io"
 			repository: "ingress-nginx"
-			name: "controller"
-			tag: "v1.8.0"
+			name:       "controller"
+			tag:        "v1.8.0"
 			pullPolicy: "IfNotPresent"
 		}
 		"tailscale-proxy": {
 			repository: "tailscale"
-			name: "tailscale"
-			tag: "v1.82.0"
+			name:       "tailscale"
+			tag:        "v1.82.0"
 			pullPolicy: "IfNotPresent"
 		}
 		portAllocator: {
 			repository: "giolekva"
-			name: "port-allocator"
-			tag: "latest"
+			name:       "port-allocator"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		"access-secrets": {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/access-secrets"
+			branch:  "main"
+			path:    "charts/access-secrets"
 		}
 		"ingress-nginx": {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/ingress-nginx"
+			branch:  "main"
+			path:    "charts/ingress-nginx"
 		}
 		"tailscale-proxy": {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/tailscale-proxy"
+			branch:  "main"
+			path:    "charts/tailscale-proxy"
 		}
 		portAllocator: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/port-allocator"
+			branch:  "main"
+			path:    "charts/port-allocator"
 		}
 	}
 
@@ -74,7 +74,7 @@
 		"ingress-nginx": {
 			chart: charts["ingress-nginx"]
 			dependsOn: [{
-				name: "access-secrets"
+				name:      "access-secrets"
 				namespace: release.namespace
 			}]
 			values: {
@@ -83,13 +83,13 @@
 					service: enabled: false
 					ingressClassByName: true
 					ingressClassResource: {
-						name: input.cluster.ingressClassName
-						enabled: true
-						default: false
+						name:            input.cluster.ingressClassName
+						enabled:         true
+						default:         false
 						controllerValue: "k8s.io/\(input.cluster.name)"
 					}
 					config: {
-						"proxy-body-size": "200M" // TODO(giolekva): configurable
+						"proxy-body-size":    "200M" // TODO(giolekva): configurable
 						"force-ssl-redirect": "true"
 						"server-snippet": """
 						more_clear_headers "X-Frame-Options";
@@ -99,40 +99,40 @@
 						enabled: false
 					}
 					image: {
-						registry: images["ingress-nginx"].registry
-						image: images["ingress-nginx"].imageName
-						tag: images["ingress-nginx"].tag
+						registry:   images["ingress-nginx"].registry
+						image:      images["ingress-nginx"].imageName
+						tag:        images["ingress-nginx"].tag
 						pullPolicy: images["ingress-nginx"].pullPolicy
 					}
 					extraContainers: [{
-						name: "proxy"
+						name:  "proxy"
 						image: images["tailscale-proxy"].fullNameWithTag
 						env: [{
-							name: "TS_AUTHKEY"
+							name:  "TS_AUTHKEY"
 							value: input.vpnAuthKey
-					    }, {
-							name: "TS_HOSTNAME"
+						}, {
+							name:  "TS_HOSTNAME"
 							value: input.vpnProxyHostname
 						}, {
-							name: "TS_EXTRA_ARGS"
+							name:  "TS_EXTRA_ARGS"
 							value: "--login-server=https://headscale.\(global.domain)"
 						}]
-  				    }]
+					}]
 				}
 				tcp: {}
 				udp: {}
 			}
 		}
 		"port-allocator": {
-			chart: charts.portAllocator
+			chart:   charts.portAllocator
 			cluster: null
 			values: {
-				repoAddr: release.repoAddr
-				sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
+				repoAddr:         release.repoAddr
+				sshPrivateKey:    base64.Encode(null, input.sshPrivateKey)
 				ingressNginxPath: "\(release.appDir)/resources/ingress-nginx.yaml"
 				image: {
 					repository: images.portAllocator.fullName
-					tag: "amd64" // TODO(gio): images.portAllocator.tag
+					tag:        "amd64" // TODO(gio): images.portAllocator.tag
 					pullPolicy: images.portAllocator.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/coder.cue b/core/installer/values-tmpl/coder.cue
index 4365830..4d8faa5 100644
--- a/core/installer/values-tmpl/coder.cue
+++ b/core/installer/values-tmpl/coder.cue
@@ -1,22 +1,22 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "Coder"
-namespace: "app-coder"
-readme: "VSCode in the browser"
+name:        "Coder"
+namespace:   "app-coder"
+readme:      "VSCode in the browser"
 description: readme
-icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50px' height='50px' viewBox='0 0 16 16'><path fill='currentColor' fill-rule='evenodd' d='M11.573.275a1.203 1.203 0 0 0-.191.073c-.039.021-1.383 1.172-2.986 2.558C6.792 4.291 5.462 5.424 5.44 5.424c-.022 0-.664-.468-1.427-1.04c-.762-.571-1.428-1.057-1.48-1.078c-.15-.063-.468-.05-.613.024C1.754 3.416.189 4.975.094 5.15a.741.741 0 0 0 .04.766c.041.057.575.557 1.185 1.11c.611.553 1.107 1.015 1.102 1.026c-.004.012-.495.442-1.091.957c-.596.514-1.122.981-1.168 1.036a.746.746 0 0 0-.069.804c.096.175 1.659 1.734 1.827 1.821c.166.087.497.089.653.005c.059-.031.7-.502 1.424-1.046l1.318-.988l.109.1l2.73 2.473c1.846 1.671 2.666 2.396 2.772 2.453l.15.08h1.348l1.631-.814c1.5-.748 1.64-.823 1.748-.942c.213-.237.197.241.197-5.738c0-5.821.009-5.468-.151-5.699c-.058-.084-.41-.331-1.634-1.148c-.857-.572-1.613-1.065-1.68-1.095c-.1-.045-.187-.056-.482-.063c-.237-.005-.401.004-.48.027m1.699 2.305l1.233.82l.001 4.82l.001 4.82l-1.205.6l-1.204.6h-.569L8.66 11.644c-1.578-1.428-2.912-2.616-2.963-2.641c-.199-.094-.5-.101-.661-.014c-.034.018-.651.475-1.372 1.015c-.721.541-1.322.983-1.335.983c-.03 0-.477-.448-.461-.462c.673-.577 2.078-1.794 2.182-1.891c.086-.081.169-.192.21-.28c.057-.127.065-.174.054-.343c-.01-.158-.028-.223-.091-.324c-.053-.086-.454-.466-1.229-1.167l-1.15-1.04l.231-.233a1.83 1.83 0 0 1 .256-.234c.013 0 .644.465 1.4 1.033c1.496 1.123 1.537 1.148 1.81 1.116a.968.968 0 0 0 .253-.069c.062-.029.503-.39.979-.802L7.96 5.265a5929.2 5929.2 0 0 0 2.187-1.89a191.687 191.687 0 0 1 1.879-1.614c.008-.001.568.368 1.246.819M11.64 4.257a1.5 1.5 0 0 0-.16.051c-.059.021-1.079.738-2.267 1.593C6.867 7.59 6.92 7.547 6.851 7.854a.556.556 0 0 0 0 .292c.068.307.017.264 2.362 1.953c1.188.855 2.214 1.576 2.28 1.601c.347.133.743-.029.929-.38l.071-.133V4.813l-.071-.133a.76.76 0 0 0-.369-.356c-.127-.056-.324-.088-.413-.067m-.66 4.5l-.007.757l-1.046-.75A41.313 41.313 0 0 1 8.881 8c0-.007.471-.351 1.046-.764l1.046-.75l.007.757a95.51 95.51 0 0 1 0 1.514'/></svg>"
+icon:        "<svg xmlns='http://www.w3.org/2000/svg' width='50px' height='50px' viewBox='0 0 16 16'><path fill='currentColor' fill-rule='evenodd' d='M11.573.275a1.203 1.203 0 0 0-.191.073c-.039.021-1.383 1.172-2.986 2.558C6.792 4.291 5.462 5.424 5.44 5.424c-.022 0-.664-.468-1.427-1.04c-.762-.571-1.428-1.057-1.48-1.078c-.15-.063-.468-.05-.613.024C1.754 3.416.189 4.975.094 5.15a.741.741 0 0 0 .04.766c.041.057.575.557 1.185 1.11c.611.553 1.107 1.015 1.102 1.026c-.004.012-.495.442-1.091.957c-.596.514-1.122.981-1.168 1.036a.746.746 0 0 0-.069.804c.096.175 1.659 1.734 1.827 1.821c.166.087.497.089.653.005c.059-.031.7-.502 1.424-1.046l1.318-.988l.109.1l2.73 2.473c1.846 1.671 2.666 2.396 2.772 2.453l.15.08h1.348l1.631-.814c1.5-.748 1.64-.823 1.748-.942c.213-.237.197.241.197-5.738c0-5.821.009-5.468-.151-5.699c-.058-.084-.41-.331-1.634-1.148c-.857-.572-1.613-1.065-1.68-1.095c-.1-.045-.187-.056-.482-.063c-.237-.005-.401.004-.48.027m1.699 2.305l1.233.82l.001 4.82l.001 4.82l-1.205.6l-1.204.6h-.569L8.66 11.644c-1.578-1.428-2.912-2.616-2.963-2.641c-.199-.094-.5-.101-.661-.014c-.034.018-.651.475-1.372 1.015c-.721.541-1.322.983-1.335.983c-.03 0-.477-.448-.461-.462c.673-.577 2.078-1.794 2.182-1.891c.086-.081.169-.192.21-.28c.057-.127.065-.174.054-.343c-.01-.158-.028-.223-.091-.324c-.053-.086-.454-.466-1.229-1.167l-1.15-1.04l.231-.233a1.83 1.83 0 0 1 .256-.234c.013 0 .644.465 1.4 1.033c1.496 1.123 1.537 1.148 1.81 1.116a.968.968 0 0 0 .253-.069c.062-.029.503-.39.979-.802L7.96 5.265a5929.2 5929.2 0 0 0 2.187-1.89a191.687 191.687 0 0 1 1.879-1.614c.008-.001.568.368 1.246.819M11.64 4.257a1.5 1.5 0 0 0-.16.051c-.059.021-1.079.738-2.267 1.593C6.867 7.59 6.92 7.547 6.851 7.854a.556.556 0 0 0 0 .292c.068.307.017.264 2.362 1.953c1.188.855 2.214 1.576 2.28 1.601c.347.133.743-.029.929-.38l.071-.133V4.813l-.071-.133a.76.76 0 0 0-.369-.356c-.127-.056-.324-.088-.413-.067m-.66 4.5l-.007.757l-1.046-.75A41.313 41.313 0 0 1 8.881 8c0-.007.471-.351 1.046-.764l1.046-.75l.007.757a95.51 95.51 0 0 1 0 1.514'/></svg>"
 
 out: {
 	ingress: {
 		coder: {
 			auth: enabled: false
-			network: input.network
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "coder"
@@ -28,37 +28,37 @@
 	images: {
 		postgres: {
 			repository: "library"
-			name: "postgres"
-			tag: "15.3"
+			name:       "postgres"
+			tag:        "15.3"
 			pullPolicy: "IfNotPresent"
 		}
 		coder: {
-			registry: "ghcr.io"
+			registry:   "ghcr.io"
 			repository: "coder"
-			name: "coder"
-			tag: "latest"
+			name:       "coder"
+			tag:        "latest"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		postgres: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/postgresql"
+			branch:  "main"
+			path:    "charts/postgresql"
 		}
 		coder: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/coder"
+			branch:  "main"
+			path:    "charts/coder"
 		}
 		oauth2Client: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/oauth2-client"
+			branch:  "main"
+			path:    "charts/oauth2-client"
 		}
 	}
 
@@ -68,7 +68,7 @@
 		"oauth2-client": {
 			chart: charts.oauth2Client
 			values: {
-				name: "\(release.namespace)-coder"
+				name:       "\(release.namespace)-coder"
 				secretName: _oauth2ClientSecretName
 				grantTypes: ["authorization_code"]
 				responseTypes: ["code"]
@@ -82,9 +82,9 @@
 			values: {
 				fullnameOverride: "postgres"
 				image: {
-					registry: images.postgres.registry
+					registry:   images.postgres.registry
 					repository: images.postgres.imageName
-					tag: images.postgres.tag
+					tag:        images.postgres.tag
 					pullPolicy: images.postgres.pullPolicy
 				}
 				auth: {
@@ -98,29 +98,29 @@
 			chart: charts.coder
 			values: coder: {
 				image: {
-					repo: images.coder.fullName
-					tag: images.coder.tag
+					repo:       images.coder.fullName
+					tag:        images.coder.tag
 					pullPolicy: images.coder.pullPolicy
 				}
 				envUseClusterAccessURL: false
 				env: [{
-					name: "CODER_ACCESS_URL"
+					name:  "CODER_ACCESS_URL"
 					value: url
 				}, {
-					name: "CODER_PG_CONNECTION_URL"
+					name:  "CODER_PG_CONNECTION_URL"
 					value: "postgres://coder:coder@postgres.\(release.namespace).svc.cluster.local:5432/coder?sslmode=disable"
 				}, {
-					name: "CODER_OIDC_ISSUER_URL"
+					name:  "CODER_OIDC_ISSUER_URL"
 					value: "https://hydra.\(networks.public.domain)"
 				}, {
-					name: "CODER_OIDC_EMAIL_DOMAIN"
+					name:  "CODER_OIDC_EMAIL_DOMAIN"
 					value: networks.public.domain
 				}, {
 					name: "CODER_OIDC_CLIENT_ID"
 					valueFrom: {
 						secretKeyRef: {
 							name: _oauth2ClientSecretName
-							key: "client_id"
+							key:  "client_id"
 						}
 					}
 				}, {
@@ -128,7 +128,7 @@
 					valueFrom: {
 						secretKeyRef: {
 							name: _oauth2ClientSecretName
-							key: "client_secret"
+							key:  "client_secret"
 						}
 					}
 				}]
diff --git a/core/installer/values-tmpl/config-repo.cue b/core/installer/values-tmpl/config-repo.cue
index 384ee3f..c3f67a6 100644
--- a/core/installer/values-tmpl/config-repo.cue
+++ b/core/installer/values-tmpl/config-repo.cue
@@ -1,28 +1,28 @@
 input: {
 	privateKey: string
-	publicKey: string
-	adminKey: string
+	publicKey:  string
+	adminKey:   string
 }
 
-name: "config-repo"
+name:      "config-repo"
 namespace: "config-repo"
 
 out: {
 	images: {
 		softserve: {
 			repository: "charmcli"
-			name: "soft-serve"
-			tag: "v0.7.1"
+			name:       "soft-serve"
+			tag:        "v0.7.1"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		softserve: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/soft-serve"
+			branch:  "main"
+			path:    "charts/soft-serve"
 		}
 	}
 
@@ -34,13 +34,13 @@
 			values: {
 				serviceType: "ClusterIP"
 				addressPool: ""
-				reservedIP: ""
-				adminKey: input.adminKey
-				privateKey: input.privateKey
-				publicKey: input.publicKey
+				reservedIP:  ""
+				adminKey:    input.adminKey
+				privateKey:  input.privateKey
+				publicKey:   input.publicKey
 				image: {
 					repository: images.softserve.fullName
-					tag: images.softserve.tag
+					tag:        images.softserve.tag
 					pullPolicy: images.softserve.pullPolicy
 				}
 				persistentVolumeClaimName: volume.data.name
diff --git a/core/installer/values-tmpl/core-auth.cue b/core/installer/values-tmpl/core-auth.cue
index b3146f8..7765622 100644
--- a/core/installer/values-tmpl/core-auth.cue
+++ b/core/installer/values-tmpl/core-auth.cue
@@ -1,81 +1,81 @@
 input: {
-	network: #Network
+	network:   #Network
 	subdomain: string
 }
 
-name: "core-auth"
+name:      "core-auth"
 namespace: "core-auth"
 
 _userSchema: ###"""
-{
-  "$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "title": "User",
-  "type": "object",
-  "properties": {
-	"traits": {
+	{
+	  "$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
+	  "$schema": "http://json-schema.org/draft-07/schema#",
+	  "title": "User",
 	  "type": "object",
 	  "properties": {
-		"username": {
-		  "type": "string",
-		  "format": "username",
-		  "title": "Username",
-		  "minLength": 3,
-		  "ory.sh/kratos": {
-			"credentials": {
-			  "password": {
-				"identifier": true
+		"traits": {
+		  "type": "object",
+		  "properties": {
+			"username": {
+			  "type": "string",
+			  "format": "username",
+			  "title": "Username",
+			  "minLength": 3,
+			  "ory.sh/kratos": {
+				"credentials": {
+				  "password": {
+					"identifier": true
+				  }
+				}
 			  }
 			}
-		  }
+		  },
+		  "additionalProperties": false
 		}
-	  },
-	  "additionalProperties": false
+	  }
 	}
-  }
-}
-"""###
+	"""###
 
 out: {
 	images: {
 		kratos: {
 			repository: "oryd"
-			name: "kratos"
-			tag: "v1.1.0-distroless"
+			name:       "kratos"
+			tag:        "v1.1.0-distroless"
 			pullPolicy: "IfNotPresent"
 		}
 		hydra: {
 			repository: "oryd"
-			name: "hydra"
-			tag: "v2.2.0-distroless"
+			name:       "hydra"
+			tag:        "v2.2.0-distroless"
 			pullPolicy: "IfNotPresent"
 		}
 		ui: {
 			repository: "giolekva"
-			name: "auth-ui"
-			tag: "latest"
+			name:       "auth-ui"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 		postgres: {
 			repository: "library"
-			name: "postgres"
-			tag: "15.3"
+			name:       "postgres"
+			tag:        "15.3"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		auth: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/auth"
+			branch:  "main"
+			path:    "charts/auth"
 		}
 		postgres: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/postgresql"
+			branch:  "main"
+			path:    "charts/postgresql"
 		}
 	}
 
@@ -85,9 +85,9 @@
 			values: {
 				fullnameOverride: "postgres"
 				image: {
-					registry: images.postgres.registry
+					registry:   images.postgres.registry
 					repository: images.postgres.imageName
-					tag: images.postgres.tag
+					tag:        images.postgres.tag
 					pullPolicy: images.postgres.pullPolicy
 				}
 				service: {
@@ -113,7 +113,7 @@
 						fsGroup: 0
 					}
 					containerSecurityContext: {
-						enabled: true
+						enabled:   true
 						runAsUser: 0
 					}
 				}
@@ -127,7 +127,7 @@
 		auth: {
 			chart: charts.auth
 			dependsOn: [{
-				name: "postgres"
+				name:      "postgres"
 				namespace: release.namespace
 			}]
 			values: {
@@ -135,36 +135,36 @@
 					fullnameOverride: "kratos"
 					image: {
 						repository: images.kratos.fullName
-						tag: images.kratos.tag
+						tag:        images.kratos.tag
 						pullPolicy: images.kratos.pullPolicy
 					}
 					service: {
 						admin: {
 							enabled: true
-							type: "ClusterIP"
-							port: 80
-							name: "http"
+							type:    "ClusterIP"
+							port:    80
+							name:    "http"
 						}
 						public: {
 							enabled: true
-							type: "ClusterIP"
-							port: 80
-							name: "http"
+							type:    "ClusterIP"
+							port:    80
+							name:    "http"
 						}
 					}
 					ingress: {
 						admin: enabled: false
 						public: {
-							enabled: true
+							enabled:   true
 							className: input.network.ingressClass
 							annotations: {
 								"acme.cert-manager.io/http01-edit-in-place": "true"
-								"cert-manager.io/cluster-issuer": input.network.certificateIssuer
+								"cert-manager.io/cluster-issuer":            input.network.certificateIssuer
 							}
 							hosts: [{
 								host: "accounts.\(input.network.domain)"
 								paths: [{
-									path: "/"
+									path:     "/"
 									pathType: "Prefix"
 								}]
 							}]
@@ -187,18 +187,18 @@
 						}
 						config: {
 							version: "v0.7.1-alpha.1"
-							dsn: "postgres://kratos:kratos@postgres.\(global.namespacePrefix)core-auth.svc:5432/kratos?sslmode=disable&max_conns=20&max_idle_conns=4"
+							dsn:     "postgres://kratos:kratos@postgres.\(global.namespacePrefix)core-auth.svc:5432/kratos?sslmode=disable&max_conns=20&max_idle_conns=4"
 							serve: {
 								public: {
 									base_url: "https://accounts.\(input.network.domain)"
 									cors: {
-										enabled: true
-										debug: false
+										enabled:           true
+										debug:             false
 										allow_credentials: true
 										allowed_origins: [
 											"https://\(input.network.domain)",
 											"https://*.\(input.network.domain)",
-									]
+										]
 									}
 								}
 								admin: {
@@ -222,7 +222,7 @@
 										ui_url: "https://accounts-ui.\(input.network.domain)/error"
 									}
 									settings: {
-										ui_url: "https://accounts-ui.\(input.network.domain)/settings"
+										ui_url:                     "https://accounts-ui.\(input.network.domain)/settings"
 										privileged_session_max_age: "15m"
 									}
 									recovery: {
@@ -237,7 +237,7 @@
 										}
 									}
 									login: {
-										ui_url: "https://accounts-ui.\(input.network.domain)/login"
+										ui_url:   "https://accounts-ui.\(input.network.domain)/login"
 										lifespan: "10m"
 										after: {
 											password: {
@@ -247,7 +247,7 @@
 									}
 									registration: {
 										lifespan: "10m"
-										ui_url: "https://accounts-ui.\(input.network.domain)/register"
+										ui_url:   "https://accounts-ui.\(input.network.domain)/register"
 										after: {
 											password: {
 												hooks: [{
@@ -260,14 +260,14 @@
 								}
 							}
 							log: {
-								level: "debug"
-								format: "text"
+								level:                 "debug"
+								format:                "text"
 								leak_sensitive_values: true
 							}
 							cookies: {
-								path: "/"
+								path:      "/"
 								same_site: "None"
-								domain: input.network.domain
+								domain:    input.network.domain
 							}
 							secrets: {
 								cookie: ["PLEASE-CHANGE-ME-I-AM-VERY-INSECURE"]
@@ -275,15 +275,15 @@
 							hashers: {
 								argon2: {
 									parallelism: 1
-									memory: "128MB"
-									iterations: 2
+									memory:      "128MB"
+									iterations:  2
 									salt_length: 16
-									key_length: 16
-									}
+									key_length:  16
+								}
 							}
 							identity: {
 								schemas: [{
-									id: "user"
+									id:  "user"
 									url: "file:///etc/config/identity.schema.json"
 								}]
 								default_schema_id: "user"
@@ -303,36 +303,36 @@
 					fullnameOverride: "hydra"
 					image: {
 						repository: images.hydra.fullName
-						tag: images.hydra.tag
+						tag:        images.hydra.tag
 						pullPolicy: images.hydra.pullPolicy
 					}
 					service: {
 						admin: {
 							enabled: true
-							type: "ClusterIP"
-							port: 80
-							name: "http"
+							type:    "ClusterIP"
+							port:    80
+							name:    "http"
 						}
 						public: {
 							enabled: true
-							type: "ClusterIP"
-							port: 80
-							name: "http"
+							type:    "ClusterIP"
+							port:    80
+							name:    "http"
 						}
 					}
 					ingress: {
 						admin: enabled: false
 						public: {
-							enabled: true
+							enabled:   true
 							className: input.network.ingressClass
 							annotations: {
 								"acme.cert-manager.io/http01-edit-in-place": "true"
-								"cert-manager.io/cluster-issuer": input.network.certificateIssuer
+								"cert-manager.io/cluster-issuer":            input.network.certificateIssuer
 							}
 							hosts: [{
 								host: "hydra.\(input.network.domain)"
 								paths: [{
-									path: "/"
+									path:     "/"
 									pathType: "Prefix"
 								}]
 							}]
@@ -354,34 +354,34 @@
 						}
 						config: {
 							version: "v1.10.6"
-							dsn: "postgres://hydra:hydra@postgres.\(global.namespacePrefix)core-auth.svc:5432/hydra?sslmode=disable&max_conns=20&max_idle_conns=4"
+							dsn:     "postgres://hydra:hydra@postgres.\(global.namespacePrefix)core-auth.svc:5432/hydra?sslmode=disable&max_conns=20&max_idle_conns=4"
 							serve: {
 								cookies: {
 									same_site_mode: "None"
 								}
 								public: {
 									cors: {
-										enabled: true
-										debug: false
+										enabled:           true
+										debug:             false
 										allow_credentials: true
 										allowed_origins: [
 											"https://\(input.network.domain)",
-											"https://*.\(input.network.domain)"
-									]
+											"https://*.\(input.network.domain)",
+										]
 									}
 								}
 								admin: {
 									cors: {
 										allowed_origins: [
-											"https://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
-									]
+											"https://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local",
+										]
 									}
 									tls: {
 										allow_termination_from: [
 											"0.0.0.0/0",
 											"10.42.0.0/16",
 											"10.43.0.0/16",
-									]
+										]
 									}
 								}
 								tls: {
@@ -389,7 +389,7 @@
 										"0.0.0.0/0",
 										"10.42.0.0/16",
 										"10.43.0.0/16",
-								]
+									]
 								}
 							}
 							urls: {
@@ -398,8 +398,8 @@
 									issuer: "https://hydra.\(input.network.domain)"
 								}
 								consent: "https://accounts-ui.\(input.network.domain)/consent"
-								login: "https://accounts-ui.\(input.network.domain)/login"
-								logout: "https://accounts-ui.\(input.network.domain)/logout"
+								login:   "https://accounts-ui.\(input.network.domain)/login"
+								logout:  "https://accounts-ui.\(input.network.domain)/logout"
 							}
 							secrets: {
 								system: ["youReallyNeedToChangeThis"]
@@ -409,29 +409,29 @@
 									supported_types: [
 										"pairwise",
 										"public",
-								]
+									]
 									pairwise: {
 										salt: "youReallyNeedToChangeThis"
 									}
 								}
 							}
 							log: {
-								level: "trace"
+								level:                 "trace"
 								leak_sensitive_values: false
 							}
 						}
 					}
 				}
 				ui: {
-					certificateIssuer: input.network.certificateIssuer
-					ingressClassName: input.network.ingressClass
-					domain: input.network.domain
-					hydra: "hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
+					certificateIssuer:  input.network.certificateIssuer
+					ingressClassName:   input.network.ingressClass
+					domain:             input.network.domain
+					hydra:              "hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
 					enableRegistration: false
-					defaultReturnTo: "https://launcher.\(global.domain)"
+					defaultReturnTo:    "https://launcher.\(global.domain)"
 					image: {
 						repository: images.ui.fullName
-						tag: images.ui.tag
+						tag:        images.ui.tag
 						pullPolicy: images.ui.pullPolicy
 					}
 				}
diff --git a/core/installer/values-tmpl/csi-driver-smb.cue b/core/installer/values-tmpl/csi-driver-smb.cue
index 4627b3b..037f4fe 100644
--- a/core/installer/values-tmpl/csi-driver-smb.cue
+++ b/core/installer/values-tmpl/csi-driver-smb.cue
@@ -1,10 +1,10 @@
 input: {}
 
-name: "csi-driver-smb"
+name:      "csi-driver-smb"
 namespace: "csi-driver-smb"
 
 _baseImage: {
-	registry: "registry.k8s.io"
+	registry:   "registry.k8s.io"
 	repository: "sig-storage"
 	pullPolicy: "IfNotPresent"
 }
@@ -13,28 +13,28 @@
 	images: {
 		smb: _baseImage & {
 			name: "smbplugin"
-			tag: "v1.11.0"
+			tag:  "v1.11.0"
 		}
 		csiProvisioner: _baseImage & {
 			name: "csi-provisioner"
-			tag: "v3.5.0"
+			tag:  "v3.5.0"
 		}
 		livenessProbe: _baseImage & {
 			name: "livenessprobe"
-			tag: "v2.10.0"
+			tag:  "v2.10.0"
 		}
 		nodeDriverRegistrar: _baseImage & {
 			name: "csi-node-driver-registrar"
-			tag: "v2.8.0"
+			tag:  "v2.8.0"
 		}
 	}
 
 	charts: {
 		csiDriverSMB: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/csi-driver-smb"
+			branch:  "main"
+			path:    "charts/csi-driver-smb"
 		}
 	}
 
@@ -45,22 +45,22 @@
 				image: {
 					smb: {
 						repository: images.smb.fullName
-						tag: images.smb.tag
+						tag:        images.smb.tag
 						pullPolicy: images.smb.pullPolicy
 					}
 					csiProvisioner: {
 						repository: images.csiProvisioner.fullName
-						tag: images.csiProvisioner.tag
+						tag:        images.csiProvisioner.tag
 						pullPolicy: images.csiProvisioner.pullPolicy
 					}
 					livenessProbe: {
 						repository: images.livenessProbe.fullName
-						tag: images.livenessProbe.tag
+						tag:        images.livenessProbe.tag
 						pullPolicy: images.livenessProbe.pullPolicy
 					}
 					nodeDriverRegistrar: {
 						repository: images.nodeDriverRegistrar.fullName
-						tag: images.nodeDriverRegistrar.tag
+						tag:        images.nodeDriverRegistrar.tag
 						pullPolicy: images.nodeDriverRegistrar.pullPolicy
 					}
 				}
diff --git a/core/installer/values-tmpl/dns-gateway.cue b/core/installer/values-tmpl/dns-gateway.cue
index bca02df..b1db8bc 100644
--- a/core/installer/values-tmpl/dns-gateway.cue
+++ b/core/installer/values-tmpl/dns-gateway.cue
@@ -3,29 +3,29 @@
 }
 
 #Server: {
-	zone: string
+	zone:    string
 	address: string
 }
 
-name: "dns-gateway"
+name:      "dns-gateway"
 namespace: "dns-gateway"
 
 out: {
 	images: {
 		coredns: {
 			repository: "coredns"
-			name: "coredns"
-			tag: "1.11.1"
+			name:       "coredns"
+			tag:        "1.11.1"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		coredns: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/coredns"
+			branch:  "main"
+			path:    "charts/coredns"
 		}
 	}
 
@@ -35,30 +35,30 @@
 			values: {
 				image: {
 					repository: images.coredns.fullName
-					tag: images.coredns.tag
+					tag:        images.coredns.tag
 					pullPolicy: images.coredns.pullPolicy
 				}
 				replicaCount: 1
 				resources: {
 					limits: {
-						cpu: "100m"
+						cpu:    "100m"
 						memory: "128Mi"
 					}
 					requests: {
-						cpu: "100m"
+						cpu:    "100m"
 						memory: "128Mi"
 					}
 				}
 				rollingUpdate: {
 					maxUnavailable: 1
-					maxSurge: "25%"
+					maxSurge:       "25%"
 				}
 				terminationGracePeriodSeconds: 30
-				serviceType: "ClusterIP"
-				service: name: "coredns"
+				serviceType:                   "ClusterIP"
+				service: name:          "coredns"
 				serviceAccount: create: false
 				rbac: {
-					create: false
+					create:    false
 					pspEnable: false
 				}
 				isClusterService: false
@@ -72,15 +72,15 @@
 							plugins: [{
 								name: "log"
 							}, {
-								name: "forward"
+								name:       "forward"
 								parameters: ". \(s.address)"
 							}, {
-								name: "health"
+								name:        "health"
 								configBlock: "lameduck 5s"
 							}, {
 								name: "ready"
 							}]
-						}
+						},
 					]
 				}
 				if len(input.servers) == 0 {
@@ -95,23 +95,23 @@
 					}]
 				}
 				livenessProbe: {
-					enabled: true
+					enabled:             true
 					initialDelaySeconds: 60
-					periodSeconds: 10
-					timeoutSeconds: 5
-					failureThreshold: 5
-					successThreshold: 1
+					periodSeconds:       10
+					timeoutSeconds:      5
+					failureThreshold:    5
+					successThreshold:    1
 				}
 				readinessProbe: {
-					enabled: true
+					enabled:             true
 					initialDelaySeconds: 30
-					periodSeconds: 10
-					timeoutSeconds: 5
-					failureThreshold: 5
-					successThreshold: 1
+					periodSeconds:       10
+					timeoutSeconds:      5
+					failureThreshold:    5
+					successThreshold:    1
 				}
 				zoneFiles: []
-				hpa: enabled: false
+				hpa: enabled:        false
 				autoscaler: enabled: false
 				deployment: enabled: true
 			}
diff --git a/core/installer/values-tmpl/dodo-app-instance-status.cue b/core/installer/values-tmpl/dodo-app-instance-status.cue
index b72a272..f8d6d75 100644
--- a/core/installer/values-tmpl/dodo-app-instance-status.cue
+++ b/core/installer/values-tmpl/dodo-app-instance-status.cue
@@ -1,6 +1,6 @@
 input: {
-	appName: string
-	network: #Network
+	appName:      string
+	network:      #Network
 	appSubdomain: string
 }
 
@@ -12,9 +12,9 @@
 	ingress: {
 		"status-\(input.appName)": {
 			auth: enabled: false
-			network: input.network
+			network:   input.network
 			subdomain: _subdomain
-			appRoot: "/\(input.appName)"
+			appRoot:   "/\(input.appName)"
 			service: {
 				name: "web"
 				port: name: "http"
diff --git a/core/installer/values-tmpl/dodo-app-instance.cue b/core/installer/values-tmpl/dodo-app-instance.cue
index ad20ac7..7255852 100644
--- a/core/installer/values-tmpl/dodo-app-instance.cue
+++ b/core/installer/values-tmpl/dodo-app-instance.cue
@@ -3,34 +3,34 @@
 )
 
 input: {
-	repoAddr: string
-	repoHost: string
-	branch: string
+	repoAddr:         string
+	repoHost:         string
+	branch:           string
 	gitRepoPublicKey: string
 	// TODO(gio): auto generate
 	fluxKeys: #SSHKey
 }
 
-name: "Dodo App Instance"
-namespace: "dodo-app-instance"
-readme: "Deploy app by pushing to Git repository"
+name:        "Dodo App Instance"
+namespace:   "dodo-app-instance"
+readme:      "Deploy app by pushing to Git repository"
 description: "Deploy app by pushing to Git repository"
-icon: ""
+icon:        ""
 
 resources: {
 	"config-kustomization": {
 		apiVersion: "kustomize.toolkit.fluxcd.io/v1"
-		kind: "Kustomization"
+		kind:       "Kustomization"
 		metadata: {
-			name: "app"
+			name:      "app"
 			namespace: release.namespace
 		}
 		spec: {
 			interval: "1m"
-			path: "./"
+			path:     "./"
 			sourceRef: {
-				kind: "GitRepository"
-				name: "app"
+				kind:      "GitRepository"
+				name:      "app"
 				namespace: release.namespace
 			}
 			prune: true
@@ -38,31 +38,31 @@
 	}
 	"config-secret": {
 		apiVersion: "v1"
-		kind: "Secret"
-		type: "Opaque"
+		kind:       "Secret"
+		type:       "Opaque"
 		metadata: {
-			name: "app"
+			name:      "app"
 			namespace: release.namespace
 		}
 		data: {
-			identity: base64.Encode(null, input.fluxKeys.private)
+			identity:       base64.Encode(null, input.fluxKeys.private)
 			"identity.pub": base64.Encode(null, input.fluxKeys.public)
-			known_hosts: base64.Encode(null, "\(input.repoHost) \(input.gitRepoPublicKey)")
+			known_hosts:    base64.Encode(null, "\(input.repoHost) \(input.gitRepoPublicKey)")
 		}
 	}
 	"config-source": {
 		apiVersion: "source.toolkit.fluxcd.io/v1"
-		kind: "GitRepository"
+		kind:       "GitRepository"
 		metadata: {
-			name: "app"
+			name:      "app"
 			namespace: release.namespace
 		}
 		spec: {
 			interval: "1m0s"
-			ref: branch: input.branch
+			ref: branch:     input.branch
 			secretRef: name: "app"
 			timeout: "60s"
-			url: input.repoAddr
+			url:     input.repoAddr
 		}
 	}
 }
diff --git a/core/installer/values-tmpl/dodo-app.cue b/core/installer/values-tmpl/dodo-app.cue
index 5b0f865..4d3a2a3 100644
--- a/core/installer/values-tmpl/dodo-app.cue
+++ b/core/installer/values-tmpl/dodo-app.cue
@@ -5,87 +5,87 @@
 )
 
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
-	sshPort: int @name(SSH Port) @role(port)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
+	sshPort:   int      @name(SSH Port) @role(port)
 	allowedNetworks: [...#Network] | *[] @name(Allowed Networks)
 	external: bool | *false @name(External)
 
 	// TODO(gio): auto generate
-	ssKeys: #SSHKey
+	ssKeys:   #SSHKey
 	fluxKeys: #SSHKey
 	dAppKeys: #SSHKey
 }
 
-name: "Dodo App"
-namespace: "dodo-app"
-readme: "Deploy app by pushing to Git repository"
+name:        "Dodo App"
+namespace:   "dodo-app"
+readme:      "Deploy app by pushing to Git repository"
 description: "Deploy app by pushing to Git repository"
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 39.68503937'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-9.97439025' y='-9.97439025' width='59.63381987' height='59.63381987'/>
-  <g>
-    <path class='cls-1' d='m4.14612077,30.30093685c-.14455793,0-.27755122-.09490976-.31962256-.24086342-.0510439-.17705854.05064512-.36129513.22730488-.41233903,1.25755428-.36368781,2.55678112-.58301708,3.86179028-.65400001.18343903-.00159512.34035915.13159756.35052805.31423903.00977012.18423659-.13099939.34055854-.31463781.35092683-1.25456343.06779268-2.50374331.27914634-3.71264637.62847805-.03090549.00877317-.06201037.01355854-.09271646.01355854Zm4.93770004-4.95923419c-2.75357929,0-6.44887871-.96664391-8.31317751-2.32568783-.14874512-.10767073-.18144512-.31583415-.07317622-.46497805.10846829-.14834634.31703049-.18264147.46517744-.07257805,2.42179392,1.76340733,7.41831409,2.59446588,9.65766594,2.01304392.55071586-.14276342.90842196-.36289025,1.0342372-.63485854.62189818-1.34787806.53257135-6.24250981.37904086-9.06587569-.38601952.18583171-.93175062.37644878-1.39573172.25681464-.28692256-.07337561-.51243293-.25442195-.6520061-.52559269-.22411464-.43467074-.22411464-.93872928-.00019939-1.41886099.19600061-.42031464.54433537-.79197806.99834696-1.08149269-.2881189-.08294634-.50984086-.20497317-.66875488-.36767561-.18443598-.18742683-.2759561-.42190976-.26439147-.67792684.00957073-.21693659.15831586-.68590244.65519635-1.06713659.32460732-.24804147.85717867-.49448781,1.69222501-.49448781.01774573,0,.03549146,0,.05363598.00079756-.22610854-.33577317-.30287378-.70265123-.17865366-1.01768781.15093842-.38282927.67613232-.89805367,2.46546039-.50166586-.02292988-.10208781-.03110488-.20736586-.02352805-.31264391.02711707-.37724634.25920732-.68510488.60574757-.80553659.27495915-.0941122.80314391-.13478781,1.53071892.45859756.10288537-.20258049.27635488-.35411708.50764757-.42988537.68989025-.22650732,1.75044697.31663171,2.44292929,1.79371465.07816098.16589268.00638049.36448537-.16011037.44264635-.16589268.07816098-.36488415.00717805-.44284574-.16030976-.54892135-1.17002196-1.29822989-1.55444636-1.63260733-1.44358538-.18523354.06061463-.16848476.29509756-.14216525.42908781.02911098.14675122-.04326768.29509756-.17665976.36209269-.13379085.06699512-.29549634.03668781-.39618842-.07337561-.61571708-.67553415-1.09106342-.82547562-1.31278538-.74970732-.12780915.04466342-.15472683.1595122-.1595122.22411464-.01176402.1635.08733293.39638781.400575.55829269.15392927.0797561.22112378.26399269.15432805.42430244-.06639695.16030976-.24385427.24405366-.40954756.18822439-1.96160124-.63326342-2.56495612-.33019025-2.63195124-.1595122-.07616707.19300976.19520305.66676098.77802074.9403244.15372988.07257805.22850122.24883903.17346951.40914878-.05503171.16110732-.22291829.25442195-.38761464.21693659-1.29743233-.28712195-1.98512929-.04147317-2.33326465.22012683-.318825.23767317-.40336647.52000976-.40735427.57743415-.00299085.06859024.02073659.1268122.07457195.1818439.09770122.09889756.44324452.32380976,1.55085733.29988293.16868415.01595122.31782805.12122927.33896342.29110976s-.089925.32859512-.25701403.36608049c-.86635062.1962-1.56920123.67074879-1.83399148,1.23861221-.09550793.20497317-.17506464.51602196-.01176402.83345123.05263902.10208781.12202683.15871464.2249122.18503415.41233903.10687317,1.12755184-.29270488,1.34588416-.44025366.09889756-.0654.22610854-.07337561.3331811-.02312927.10727195.05263902.17805549.15871464.18563232.27834878.02033781.32460732.49089878,7.97082446-.40815183,9.91846838-.21514208.46577561-.71022805.80314391-1.47130062,1.00093903-.53895183.13957317-1.18996099.20497317-1.90397746.20497317Z'/>
-    <path class='cls-1' d='m11.94387449,37.48137838c-.10607561,0-.21035671-.0510439-.27495915-.1451561-.10388232-.15153659-.06520061-.35890244.08653537-.46258537,3.14278905-2.15261709,6.70589274-5.42341468,6.36054884-11.66512693-.17346951-3.13600978-.52678903-4.53572931-.71640915-5.28703175-.02372744-.0941122-.0450622-.18024878-.0634061-.26000488-.00179451-.00558293-.00358902-.01116585-.00518415-.01674878-.25422256-.91958781-.7134183-1.78095367-1.19953172-2.69256588-.56287866-1.05597074-1.1446994-2.14703417-1.45395367-3.42233418-.63745062-2.62796344.96245672-3.85301711,3.5609104-4.88266834,2.02819758-.80473903,3.08975125.58301708,3.86478113,1.59512197.20876159.27356342.40615793.53117561.59817074.71940001.77542867.76007562,1.70578355,1.03682928,4.64140614.4354683,2.94599088-.60215854,4.46275248-.07736342,6.00882444,2.08402685.90682684,1.26971708,1.3287366,3.12723661.9811994,4.3211854-.14276342.4905-.41253842.82866586-.77961586.9770122-.70444574.28393171-1.04261159-.17067805-1.31398172-.5375561-.34235305-.46178781-.76825062-1.03603172-2.06029941-1.25855123-1.37260245-.15552439-2.77830368-.21374634-4.17722565-.16988049.68550366.86296098,1.88942197,2.65986588,1.86768843,4.61389028-.00159512.13797805-.08813049.26080244-.21793354.3086561-.1288061.04625854-.27495915.01036829-.36608049-.0941122-2.19907502-2.52109027-5.16181468-3.43110735-7.20117811-3.44147564-1.06255062-.00558293-1.6639116.24166098-1.85353172.4538122q-.36169391.40595854-.18543293,1.1038244c.19520305.77363415.55869147,2.21402929.73575001,5.41384395.36767561,6.64767079-3.61873357,10.17528302-6.64906652,12.25053669-.05762378.03987805-.12302378.05901951-.188025.05901951Zm8.10561227-19.94700017h.03808354c1.98173965.01036829,4.77380126.8095244,7.0257147,2.96373661-.40456281-2.02181709-2.03158721-3.73737076-2.05052929-3.75730979-.09012439-.09331463-.11744085-.23129268-.0695872-.35252195.04765427-.12122927.1615061-.20337805.29150854-.2105561,1.65812928-.09092195,3.33679576-.04147317,4.98834517.14675122,1.5739866.27037317,2.13188051,1.02327074,2.50115124,1.52094879.29410061.39718537.32181586.40117317.5293811.31663171.21633842-.08773171.33138659-.34534391.38980793-.54632927.24963659-.85737806-.01714756-2.5346488-.88369757-3.7469415-1.39134513-1.9460488-2.63753417-2.37035124-5.33329029-1.8192366-2.85486954.58540976-4.17762443.43148049-5.241172-.61252683-.22590915-.22092439-.43726281-.49767805-.66097866-.78958537-.7522994-.98339269-1.52912379-2.00108051-3.09034942-1.38137562-2.79884088,1.10940733-3.62551284,2.18451953-3.15913905,4.10743906.28931525,1.19235367.85119696,2.24593173,1.39433599,3.26521466.31443842.58939757.61791037,1.15885611.86814513,1.74426587.04366646-.05423415.09211829-.11165854.14615305-.17227317.38362683-.43068293,1.22664879-.67633171,2.31611709-.67633171Z'/>
-    <path class='cls-1' d='m16.5348349,14.71739281c-.16270244,0-.30506708-.11963415-.3291933-.28552683-.07078354-.48810732.01774573-.87253171.2635939-1.14370245.38123415-.42031464,1.02506525-.45301464,1.60608843-.4211122.18363842.00877317.32560427.16429756.3168311.34853415-.00877317.18343903-.15771768.3230122-.34833476.31663171-.3700683-.01914146-.88250123-.01515366-1.0812933.20417561-.10587622.1164439-.13877561.31822683-.09770122.59976586.02631951.1818439-.09969512.35092683-.28173842.37724634-.01615061.00239268-.03230122.0039878-.04825244.0039878Z'/>
-    <path class='cls-1' d='m24.36488985,16.85485624c-4.86452382,0-6.3264531-1.01050976-7.78040678-3.28754637-.09889756-.15552439-.05343659-.36129513.10148964-.46019269.15572378-.09730244.36089634-.05263902.4599933.10129024,1.46691404,2.29777319,2.91827564,3.09054881,8.14907934,2.96931954.18642988-.02392683.33637134.14116829.34075793.32460732.0041872.18423659-.14136768.33657073-.32520549.34055854-.32879452.00797561-.64403049.01196341-.94570794.01196341Z'/>
-    <path class='cls-1' d='m25.03045449,29.77614172c-.15891403,0-.29968354-.11484878-.32779756-.27675366-.03130427-.18104634.09012439-.35331952.27137012-.38442439,2.01942441-.35092683,6.08299761-1.05597074,7.44722567-4.46713906-3.95051894,1.92690733-9.43075984,3.9144293-14.09968183,1.53849514-.16389878-.08294634-.22929878-.28393171-.14595366-.44743171.08354451-.1635.28472927-.2289.44783049-.14595366,4.68786407,2.38311222,10.35433546.0614122,14.20934647-1.89340977.1164439-.05981707.25701403-.04386585.35910183.03668781.10188842.08214878.14655183.21613903.11385183.34295122-1.14848781,4.46554394-5.92328603,5.29341224-8.21806836,5.69139517-.01914146.0039878-.03828293.00558293-.057225.00558293Zm-.15353049-12.92447572c-.0225311,0-.0450622-.00239268-.06799207-.00717805-.18004939-.03748537-.29569573-.21374634-.25840976-.39399513.21932927-1.05916098,1.07052623-4.01093418,2.35798904-4.93610492.1491439-.10846829.35730732-.07337561.46477866.07576829.10727195.14994146.07337561.35730732-.07596768.46497805-.93713415.67314147-1.78912867,3.05465856-2.09479392,4.53094394-.03250061.15711951-.17107683.26558781-.32560427.26558781Zm-5.16021956-4.10424882c-.26498964,0-.68650062-.13638293-.98638355-.89167318-.06799207-.17067805.01575183-.36448537.18662927-.43227805.17007988-.06699512.36448537.01515366.43227805.18662927.13399025.3373683.29110976.49289269.37724634.47056098.07078354-.00638049.14655183-.09171951.15911342-.15711951.12541646-.57504147-.23468232-1.13732196-.80095062-1.26094391-.08075305-.01674878-.1615061-.02073659-.24086342-.02392683-.16130671.0183439-.33597256-.14116829-.34035915-.32540488-.0039878-.18343903.14176646-.33577317.32560427-.33976098.12940427-.00797561.26299573.00957073.39618842.03828293.92676586.20258049,1.5147677,1.11977562,1.31278538,2.04494636-.06759329.35411708-.39020671.65320244-.74871037.68749757-.0225311.00159512-.04685671.00319024-.07257805.00319024Z'/>
-    <path class='cls-1' d='m24.39001302,31.87372711c-.1736689,0-.32002134-.13478781-.33178537-.31104878-.0123622-.18343903.12641342-.34215366.30985244-.35491464,4.62764821-.31104878,6.81156957-1.74187319,6.67638298-4.37462199-.00937134-.18343903.13179695-.33976098.31543537-.34933171.18702805-.00638049.34015976.13239512.34973049.31583415.15552439,3.02993417-2.29936831,4.73671468-7.29688543,5.07328541-.00757683,0-.01515366.00079756-.02273049.00079756Z'/>
-    <path class='cls-1' d='m22.10460202,34.88053201c-1.87067928,0-3.83866101-.55111464-5.75300676-1.63579758-.16011037-.09012439-.21633842-.29350244-.12561585-.4538122.09052317-.15871464.29350244-.21613903.4538122-.12521707,2.81140246,1.59193172,5.72828237,1.97236831,8.21388117,1.06952928,1.73589148-.63007318,3.08396893-1.8375805,3.60617198-3.22932442.06480183-.17227317.25601708-.25920732.42888842-.19460488.17207378.06460244.25940671.25681464.19480427.42908781-.58979635,1.57119514-2.08622014,2.92465612-4.00275918,3.62092686-.95727257.34693903-1.97157075.5192122-3.01617625.5192122Z'/>
-    <path class='cls-1' d='m19.84251969,39.68503937C8.90137874,39.68503937,0,30.78346124,0,19.84251969S8.90137874,0,19.84251969,0s19.84251969,8.90157813,19.84251969,19.84251969-8.90137874,19.84251969-19.84251969,19.84251969Zm0-38.35311253C9.63573301,1.33192684,1.33192684,9.63613179,1.33192684,19.84251969s8.30380617,18.51059284,18.51059284,18.51059284,18.51059284-8.30420495,18.51059284-18.51059284S30.04930636,1.33192684,19.84251969,1.33192684Z'/>
-  </g>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 39.68503937'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-9.97439025' y='-9.97439025' width='59.63381987' height='59.63381987'/>
+	  <g>
+	    <path class='cls-1' d='m4.14612077,30.30093685c-.14455793,0-.27755122-.09490976-.31962256-.24086342-.0510439-.17705854.05064512-.36129513.22730488-.41233903,1.25755428-.36368781,2.55678112-.58301708,3.86179028-.65400001.18343903-.00159512.34035915.13159756.35052805.31423903.00977012.18423659-.13099939.34055854-.31463781.35092683-1.25456343.06779268-2.50374331.27914634-3.71264637.62847805-.03090549.00877317-.06201037.01355854-.09271646.01355854Zm4.93770004-4.95923419c-2.75357929,0-6.44887871-.96664391-8.31317751-2.32568783-.14874512-.10767073-.18144512-.31583415-.07317622-.46497805.10846829-.14834634.31703049-.18264147.46517744-.07257805,2.42179392,1.76340733,7.41831409,2.59446588,9.65766594,2.01304392.55071586-.14276342.90842196-.36289025,1.0342372-.63485854.62189818-1.34787806.53257135-6.24250981.37904086-9.06587569-.38601952.18583171-.93175062.37644878-1.39573172.25681464-.28692256-.07337561-.51243293-.25442195-.6520061-.52559269-.22411464-.43467074-.22411464-.93872928-.00019939-1.41886099.19600061-.42031464.54433537-.79197806.99834696-1.08149269-.2881189-.08294634-.50984086-.20497317-.66875488-.36767561-.18443598-.18742683-.2759561-.42190976-.26439147-.67792684.00957073-.21693659.15831586-.68590244.65519635-1.06713659.32460732-.24804147.85717867-.49448781,1.69222501-.49448781.01774573,0,.03549146,0,.05363598.00079756-.22610854-.33577317-.30287378-.70265123-.17865366-1.01768781.15093842-.38282927.67613232-.89805367,2.46546039-.50166586-.02292988-.10208781-.03110488-.20736586-.02352805-.31264391.02711707-.37724634.25920732-.68510488.60574757-.80553659.27495915-.0941122.80314391-.13478781,1.53071892.45859756.10288537-.20258049.27635488-.35411708.50764757-.42988537.68989025-.22650732,1.75044697.31663171,2.44292929,1.79371465.07816098.16589268.00638049.36448537-.16011037.44264635-.16589268.07816098-.36488415.00717805-.44284574-.16030976-.54892135-1.17002196-1.29822989-1.55444636-1.63260733-1.44358538-.18523354.06061463-.16848476.29509756-.14216525.42908781.02911098.14675122-.04326768.29509756-.17665976.36209269-.13379085.06699512-.29549634.03668781-.39618842-.07337561-.61571708-.67553415-1.09106342-.82547562-1.31278538-.74970732-.12780915.04466342-.15472683.1595122-.1595122.22411464-.01176402.1635.08733293.39638781.400575.55829269.15392927.0797561.22112378.26399269.15432805.42430244-.06639695.16030976-.24385427.24405366-.40954756.18822439-1.96160124-.63326342-2.56495612-.33019025-2.63195124-.1595122-.07616707.19300976.19520305.66676098.77802074.9403244.15372988.07257805.22850122.24883903.17346951.40914878-.05503171.16110732-.22291829.25442195-.38761464.21693659-1.29743233-.28712195-1.98512929-.04147317-2.33326465.22012683-.318825.23767317-.40336647.52000976-.40735427.57743415-.00299085.06859024.02073659.1268122.07457195.1818439.09770122.09889756.44324452.32380976,1.55085733.29988293.16868415.01595122.31782805.12122927.33896342.29110976s-.089925.32859512-.25701403.36608049c-.86635062.1962-1.56920123.67074879-1.83399148,1.23861221-.09550793.20497317-.17506464.51602196-.01176402.83345123.05263902.10208781.12202683.15871464.2249122.18503415.41233903.10687317,1.12755184-.29270488,1.34588416-.44025366.09889756-.0654.22610854-.07337561.3331811-.02312927.10727195.05263902.17805549.15871464.18563232.27834878.02033781.32460732.49089878,7.97082446-.40815183,9.91846838-.21514208.46577561-.71022805.80314391-1.47130062,1.00093903-.53895183.13957317-1.18996099.20497317-1.90397746.20497317Z'/>
+	    <path class='cls-1' d='m11.94387449,37.48137838c-.10607561,0-.21035671-.0510439-.27495915-.1451561-.10388232-.15153659-.06520061-.35890244.08653537-.46258537,3.14278905-2.15261709,6.70589274-5.42341468,6.36054884-11.66512693-.17346951-3.13600978-.52678903-4.53572931-.71640915-5.28703175-.02372744-.0941122-.0450622-.18024878-.0634061-.26000488-.00179451-.00558293-.00358902-.01116585-.00518415-.01674878-.25422256-.91958781-.7134183-1.78095367-1.19953172-2.69256588-.56287866-1.05597074-1.1446994-2.14703417-1.45395367-3.42233418-.63745062-2.62796344.96245672-3.85301711,3.5609104-4.88266834,2.02819758-.80473903,3.08975125.58301708,3.86478113,1.59512197.20876159.27356342.40615793.53117561.59817074.71940001.77542867.76007562,1.70578355,1.03682928,4.64140614.4354683,2.94599088-.60215854,4.46275248-.07736342,6.00882444,2.08402685.90682684,1.26971708,1.3287366,3.12723661.9811994,4.3211854-.14276342.4905-.41253842.82866586-.77961586.9770122-.70444574.28393171-1.04261159-.17067805-1.31398172-.5375561-.34235305-.46178781-.76825062-1.03603172-2.06029941-1.25855123-1.37260245-.15552439-2.77830368-.21374634-4.17722565-.16988049.68550366.86296098,1.88942197,2.65986588,1.86768843,4.61389028-.00159512.13797805-.08813049.26080244-.21793354.3086561-.1288061.04625854-.27495915.01036829-.36608049-.0941122-2.19907502-2.52109027-5.16181468-3.43110735-7.20117811-3.44147564-1.06255062-.00558293-1.6639116.24166098-1.85353172.4538122q-.36169391.40595854-.18543293,1.1038244c.19520305.77363415.55869147,2.21402929.73575001,5.41384395.36767561,6.64767079-3.61873357,10.17528302-6.64906652,12.25053669-.05762378.03987805-.12302378.05901951-.188025.05901951Zm8.10561227-19.94700017h.03808354c1.98173965.01036829,4.77380126.8095244,7.0257147,2.96373661-.40456281-2.02181709-2.03158721-3.73737076-2.05052929-3.75730979-.09012439-.09331463-.11744085-.23129268-.0695872-.35252195.04765427-.12122927.1615061-.20337805.29150854-.2105561,1.65812928-.09092195,3.33679576-.04147317,4.98834517.14675122,1.5739866.27037317,2.13188051,1.02327074,2.50115124,1.52094879.29410061.39718537.32181586.40117317.5293811.31663171.21633842-.08773171.33138659-.34534391.38980793-.54632927.24963659-.85737806-.01714756-2.5346488-.88369757-3.7469415-1.39134513-1.9460488-2.63753417-2.37035124-5.33329029-1.8192366-2.85486954.58540976-4.17762443.43148049-5.241172-.61252683-.22590915-.22092439-.43726281-.49767805-.66097866-.78958537-.7522994-.98339269-1.52912379-2.00108051-3.09034942-1.38137562-2.79884088,1.10940733-3.62551284,2.18451953-3.15913905,4.10743906.28931525,1.19235367.85119696,2.24593173,1.39433599,3.26521466.31443842.58939757.61791037,1.15885611.86814513,1.74426587.04366646-.05423415.09211829-.11165854.14615305-.17227317.38362683-.43068293,1.22664879-.67633171,2.31611709-.67633171Z'/>
+	    <path class='cls-1' d='m16.5348349,14.71739281c-.16270244,0-.30506708-.11963415-.3291933-.28552683-.07078354-.48810732.01774573-.87253171.2635939-1.14370245.38123415-.42031464,1.02506525-.45301464,1.60608843-.4211122.18363842.00877317.32560427.16429756.3168311.34853415-.00877317.18343903-.15771768.3230122-.34833476.31663171-.3700683-.01914146-.88250123-.01515366-1.0812933.20417561-.10587622.1164439-.13877561.31822683-.09770122.59976586.02631951.1818439-.09969512.35092683-.28173842.37724634-.01615061.00239268-.03230122.0039878-.04825244.0039878Z'/>
+	    <path class='cls-1' d='m24.36488985,16.85485624c-4.86452382,0-6.3264531-1.01050976-7.78040678-3.28754637-.09889756-.15552439-.05343659-.36129513.10148964-.46019269.15572378-.09730244.36089634-.05263902.4599933.10129024,1.46691404,2.29777319,2.91827564,3.09054881,8.14907934,2.96931954.18642988-.02392683.33637134.14116829.34075793.32460732.0041872.18423659-.14136768.33657073-.32520549.34055854-.32879452.00797561-.64403049.01196341-.94570794.01196341Z'/>
+	    <path class='cls-1' d='m25.03045449,29.77614172c-.15891403,0-.29968354-.11484878-.32779756-.27675366-.03130427-.18104634.09012439-.35331952.27137012-.38442439,2.01942441-.35092683,6.08299761-1.05597074,7.44722567-4.46713906-3.95051894,1.92690733-9.43075984,3.9144293-14.09968183,1.53849514-.16389878-.08294634-.22929878-.28393171-.14595366-.44743171.08354451-.1635.28472927-.2289.44783049-.14595366,4.68786407,2.38311222,10.35433546.0614122,14.20934647-1.89340977.1164439-.05981707.25701403-.04386585.35910183.03668781.10188842.08214878.14655183.21613903.11385183.34295122-1.14848781,4.46554394-5.92328603,5.29341224-8.21806836,5.69139517-.01914146.0039878-.03828293.00558293-.057225.00558293Zm-.15353049-12.92447572c-.0225311,0-.0450622-.00239268-.06799207-.00717805-.18004939-.03748537-.29569573-.21374634-.25840976-.39399513.21932927-1.05916098,1.07052623-4.01093418,2.35798904-4.93610492.1491439-.10846829.35730732-.07337561.46477866.07576829.10727195.14994146.07337561.35730732-.07596768.46497805-.93713415.67314147-1.78912867,3.05465856-2.09479392,4.53094394-.03250061.15711951-.17107683.26558781-.32560427.26558781Zm-5.16021956-4.10424882c-.26498964,0-.68650062-.13638293-.98638355-.89167318-.06799207-.17067805.01575183-.36448537.18662927-.43227805.17007988-.06699512.36448537.01515366.43227805.18662927.13399025.3373683.29110976.49289269.37724634.47056098.07078354-.00638049.14655183-.09171951.15911342-.15711951.12541646-.57504147-.23468232-1.13732196-.80095062-1.26094391-.08075305-.01674878-.1615061-.02073659-.24086342-.02392683-.16130671.0183439-.33597256-.14116829-.34035915-.32540488-.0039878-.18343903.14176646-.33577317.32560427-.33976098.12940427-.00797561.26299573.00957073.39618842.03828293.92676586.20258049,1.5147677,1.11977562,1.31278538,2.04494636-.06759329.35411708-.39020671.65320244-.74871037.68749757-.0225311.00159512-.04685671.00319024-.07257805.00319024Z'/>
+	    <path class='cls-1' d='m24.39001302,31.87372711c-.1736689,0-.32002134-.13478781-.33178537-.31104878-.0123622-.18343903.12641342-.34215366.30985244-.35491464,4.62764821-.31104878,6.81156957-1.74187319,6.67638298-4.37462199-.00937134-.18343903.13179695-.33976098.31543537-.34933171.18702805-.00638049.34015976.13239512.34973049.31583415.15552439,3.02993417-2.29936831,4.73671468-7.29688543,5.07328541-.00757683,0-.01515366.00079756-.02273049.00079756Z'/>
+	    <path class='cls-1' d='m22.10460202,34.88053201c-1.87067928,0-3.83866101-.55111464-5.75300676-1.63579758-.16011037-.09012439-.21633842-.29350244-.12561585-.4538122.09052317-.15871464.29350244-.21613903.4538122-.12521707,2.81140246,1.59193172,5.72828237,1.97236831,8.21388117,1.06952928,1.73589148-.63007318,3.08396893-1.8375805,3.60617198-3.22932442.06480183-.17227317.25601708-.25920732.42888842-.19460488.17207378.06460244.25940671.25681464.19480427.42908781-.58979635,1.57119514-2.08622014,2.92465612-4.00275918,3.62092686-.95727257.34693903-1.97157075.5192122-3.01617625.5192122Z'/>
+	    <path class='cls-1' d='m19.84251969,39.68503937C8.90137874,39.68503937,0,30.78346124,0,19.84251969S8.90137874,0,19.84251969,0s19.84251969,8.90157813,19.84251969,19.84251969-8.90137874,19.84251969-19.84251969,19.84251969Zm0-38.35311253C9.63573301,1.33192684,1.33192684,9.63613179,1.33192684,19.84251969s8.30380617,18.51059284,18.51059284,18.51059284,18.51059284-8.30420495,18.51059284-18.51059284S30.04930636,1.33192684,19.84251969,1.33192684Z'/>
+	  </g>
+	</svg>"""
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
 out: {
 	images: {
 		softserve: {
 			repository: "charmcli"
-			name: "soft-serve"
-			tag: "v0.7.1"
+			name:       "soft-serve"
+			tag:        "v0.7.1"
 			pullPolicy: "IfNotPresent"
 		}
 		dodoApp: {
 			repository: "giolekva"
-			name: "pcloud-installer"
-			tag: "latest"
+			name:       "pcloud-installer"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		softserve: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/soft-serve"
+			branch:  "main"
+			path:    "charts/soft-serve"
 		}
 		dodoApp: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/dodo-app"
+			branch:  "main"
+			path:    "charts/dodo-app"
 		}
 	}
 
 	volume: {
 		"config-repo": size: "10Gi"
-		db: size: "10Gi"
+		db: size:            "10Gi"
 	}
 
 	ingress: {
@@ -100,10 +100,10 @@
 						"^/static\/.*$",
 						"^/schemas\/.*$",
 						"^/api/public-data$",
-				    ]
+					]
 				}
 			}
-			network: input.network
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "web"
@@ -113,9 +113,9 @@
 	}
 
 	openPort: [{
-		name: "ssh"
+		name:    "ssh"
 		network: input.network
-		port: input.sshPort
+		port:    input.sshPort
 		service: {
 			name: "soft-serve"
 			port: 22
@@ -125,17 +125,17 @@
 	helm: {
 		softserve: {
 			chart: charts.softserve
-			info: "Installing Git server"
+			info:  "Installing Git server"
 			values: {
 				serviceType: "ClusterIP"
 				addressPool: ""
-				reservedIP: ""
+				reservedIP:  ""
 				adminKey: strings.Join([input.fluxKeys.public, input.dAppKeys.public], "\n")
 				privateKey: input.ssKeys.private
-				publicKey: input.ssKeys.public
+				publicKey:  input.ssKeys.public
 				image: {
 					repository: images.softserve.fullName
-					tag: images.softserve.tag
+					tag:        images.softserve.tag
 					pullPolicy: images.softserve.pullPolicy
 				}
 				persistentVolumeClaimName: volume["config-repo"].name
@@ -143,29 +143,29 @@
 		}
 		"dodo-app": {
 			chart: charts.dodoApp
-			info: "Installing supervisor"
+			info:  "Installing supervisor"
 			values: {
 				image: {
 					repository: images.dodoApp.fullName
-					tag: images.dodoApp.tag
+					tag:        images.dodoApp.tag
 					pullPolicy: images.dodoApp.pullPolicy
 				}
-				clusterRoleName: "\(release.namespace)-dodo-app"
-				port: 8080
-				apiPort: 8081
-				repoAddr: "soft-serve.\(release.namespace).svc.cluster.local:22"
-				sshPrivateKey: base64.Encode(null, input.dAppKeys.private)
-				self: "api.\(release.namespace).svc.cluster.local"
-				selfPublic: url
-				repoPublicAddr: "ssh://\(_domain):\(input.sshPort)"
-				namespace: release.namespace
-				envAppManagerAddr: "http://appmanager.\(global.namespacePrefix)appmanager.svc.cluster.local"
-				envConfig: base64.Encode(null, json.Marshal(global))
-				gitRepoPublicKey: input.ssKeys.public
+				clusterRoleName:           "\(release.namespace)-dodo-app"
+				port:                      8080
+				apiPort:                   8081
+				repoAddr:                  "soft-serve.\(release.namespace).svc.cluster.local:22"
+				sshPrivateKey:             base64.Encode(null, input.dAppKeys.private)
+				self:                      "api.\(release.namespace).svc.cluster.local"
+				selfPublic:                url
+				repoPublicAddr:            "ssh://\(_domain):\(input.sshPort)"
+				namespace:                 release.namespace
+				envAppManagerAddr:         "http://appmanager.\(global.namespacePrefix)appmanager.svc.cluster.local"
+				envConfig:                 base64.Encode(null, json.Marshal(global))
+				gitRepoPublicKey:          input.ssKeys.public
 				persistentVolumeClaimName: volume.db.name
-				allowedNetworks: strings.Join([for n in input.allowedNetworks { n.name }], ",")
-				external: input.external
-				fetchUsersAddr: "http://memberships-api.\(global.namespacePrefix)core-auth-memberships.svc.cluster.local/api/users"
+				allowedNetworks: strings.Join([for n in input.allowedNetworks {n.name}], ",")
+				external:         input.external
+				fetchUsersAddr:   "http://memberships-api.\(global.namespacePrefix)core-auth-memberships.svc.cluster.local/api/users"
 				headscaleAPIAddr: "http://headscale-api.\(global.namespacePrefix)app-headscale.svc"
 			}
 		}
@@ -175,17 +175,17 @@
 resources: {
 	"config-kustomization": {
 		apiVersion: "kustomize.toolkit.fluxcd.io/v1"
-		kind: "Kustomization"
+		kind:       "Kustomization"
 		metadata: {
-			name: "config"
+			name:      "config"
 			namespace: release.namespace
 		}
 		spec: {
 			interval: "1m"
-			path: "./"
+			path:     "./"
 			sourceRef: {
-				kind: "GitRepository"
-				name: "config"
+				kind:      "GitRepository"
+				name:      "config"
 				namespace: release.namespace
 			}
 			prune: true
@@ -193,31 +193,31 @@
 	}
 	"config-secret": {
 		apiVersion: "v1"
-		kind: "Secret"
-		type: "Opaque"
+		kind:       "Secret"
+		type:       "Opaque"
 		metadata: {
-			name: "config"
+			name:      "config"
 			namespace: release.namespace
 		}
 		data: {
-			identity: base64.Encode(null, input.fluxKeys.private)
+			identity:       base64.Encode(null, input.fluxKeys.private)
 			"identity.pub": base64.Encode(null, input.fluxKeys.public)
-			known_hosts: base64.Encode(null, "soft-serve.\(release.namespace).svc.cluster.local \(input.ssKeys.public)")
+			known_hosts:    base64.Encode(null, "soft-serve.\(release.namespace).svc.cluster.local \(input.ssKeys.public)")
 		}
 	}
 	"config-source": {
 		apiVersion: "source.toolkit.fluxcd.io/v1"
-		kind: "GitRepository"
+		kind:       "GitRepository"
 		metadata: {
-			name: "config"
+			name:      "config"
 			namespace: release.namespace
 		}
 		spec: {
 			interval: "1m0s"
-			ref: branch: "master"
+			ref: branch:     "master"
 			secretRef: name: "config"
 			timeout: "60s"
-			url: "ssh://soft-serve.\(release.namespace).svc.cluster.local:22/config"
+			url:     "ssh://soft-serve.\(release.namespace).svc.cluster.local:22/config"
 		}
 	}
 }
diff --git a/core/installer/values-tmpl/env-dns.cue b/core/installer/values-tmpl/env-dns.cue
index f5b8ac2..d24a679 100644
--- a/core/installer/values-tmpl/env-dns.cue
+++ b/core/installer/values-tmpl/env-dns.cue
@@ -4,58 +4,58 @@
 
 input: {}
 
-name: "env-dns"
-namespace: "dns"
-readme: "env-dns"
+name:        "env-dns"
+namespace:   "dns"
+readme:      "env-dns"
 description: "Environment local DNS manager"
-icon: ""
+icon:        ""
 
 out: {
 	images: {
 		coredns: {
 			repository: "coredns"
-			name: "coredns"
-			tag: "1.11.1"
+			name:       "coredns"
+			tag:        "1.11.1"
 			pullPolicy: "IfNotPresent"
 		}
 		api: {
 			repository: "giolekva"
-			name: "dns-api"
-			tag: "latest"
+			name:       "dns-api"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		coredns: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/coredns"
+			branch:  "main"
+			path:    "charts/coredns"
 		}
 		api: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/dns-api"
+			branch:  "main"
+			path:    "charts/dns-api"
 		}
 		service: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/service"
+			branch:  "main"
+			path:    "charts/service"
 		}
 		ipAddressPool: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/metallb-ipaddresspool"
+			branch:  "main"
+			path:    "charts/metallb-ipaddresspool"
 		}
 	}
 
 	volume: data: {
 		accessMode: "ReadWriteMany"
-		size: "5Gi"
+		size:       "5Gi"
 	}
 	_volume: volume
 
@@ -65,26 +65,26 @@
 			values: {
 				image: {
 					repository: images.coredns.fullName
-					tag: images.coredns.tag
+					tag:        images.coredns.tag
 					pullPolicy: images.coredns.pullPolicy
 				}
 				replicaCount: 1
 				resources: {
 					limits: {
-						cpu: "100m"
+						cpu:    "100m"
 						memory: "128Mi"
 					}
 					requests: {
-						cpu: "100m"
+						cpu:    "100m"
 						memory: "128Mi"
 					}
 				}
 				rollingUpdate: {
 					maxUnavailable: 1
-					maxSurge: "25%"
+					maxSurge:       "25%"
 				}
 				terminationGracePeriodSeconds: 30
-				serviceType: "LoadBalancer"
+				serviceType:                   "LoadBalancer"
 				service: {
 					name: "coredns"
 					annotations: {
@@ -93,7 +93,7 @@
 				}
 				serviceAccount: create: false
 				rbac: {
-					create: false
+					create:    false
 					pspEnable: false
 				}
 				isClusterService: false
@@ -107,12 +107,12 @@
 							name: "log"
 						},
 						{
-							name: "health"
+							name:        "health"
 							configBlock: "lameduck 5s"
 						},
 						{
 							name: "ready"
-						}
+						},
 					]
 				}]
 				extraConfig: import: parameters: "\(_mountPath)/coredns.conf"
@@ -121,27 +121,27 @@
 					persistentVolumeClaim: claimName: volume.data.name
 				}]
 				extraVolumeMounts: [{
-					name: volume.data.name
+					name:      volume.data.name
 					mountPath: _mountPath
 				}]
 				livenessProbe: {
-					enabled: true
+					enabled:             true
 					initialDelaySeconds: 60
-					periodSeconds: 10
-					timeoutSeconds: 5
-					failureThreshold: 5
-					successThreshold: 1
+					periodSeconds:       10
+					timeoutSeconds:      5
+					failureThreshold:    5
+					successThreshold:    1
 				}
 				readinessProbe: {
-					enabled: true
+					enabled:             true
 					initialDelaySeconds: 30
-					periodSeconds: 10
-					timeoutSeconds: 5
-					failureThreshold: 5
-					successThreshold: 1
+					periodSeconds:       10
+					timeoutSeconds:      5
+					failureThreshold:    5
+					successThreshold:    1
 				}
 				zoneFiles: []
-				hpa: enabled: false
+				hpa: enabled:        false
 				autoscaler: enabled: false
 				deployment: enabled: true
 			}
@@ -151,14 +151,14 @@
 			values: {
 				image: {
 					repository: images.api.fullName
-					tag: images.api.tag
+					tag:        images.api.tag
 					pullPolicy: images.api.pullPolicy
 				}
-				config: "coredns.conf"
-				db: "records.db"
-				zone: networks.public.domain
-				publicIP: strings.Join(global.publicIP, ",")
-				privateIP: global.network.ingress
+				config:       "coredns.conf"
+				db:           "records.db"
+				zone:         networks.public.domain
+				publicIP:     strings.Join(global.publicIP, ",")
+				privateIP:    global.network.ingress
 				nameserverIP: strings.Join(global.nameserverIP, ",")
 				service: type: "ClusterIP"
 				volume: {
@@ -170,19 +170,19 @@
 		"coredns-svc-cluster": {
 			chart: charts.service
 			values: {
-				name: "dns"
-				type: "LoadBalancer"
+				name:     "dns"
+				type:     "LoadBalancer"
 				protocol: "TCP"
 				ports: [{
-					name: "udp-53"
-					port: 53
-					protocol: "UDP"
+					name:       "udp-53"
+					port:       53
+					protocol:   "UDP"
 					targetPort: 53
 				}]
 				targetPort: "http"
-				selector:{
+				selector: {
 					"app.kubernetes.io/instance": "coredns"
-					"app.kubernetes.io/name": "coredns"
+					"app.kubernetes.io/name":     "coredns"
 				}
 				annotations: {
 					"metallb.universe.tf/loadBalancerIPs": global.network.dnsInClusterIP
@@ -192,21 +192,21 @@
 		"ipaddresspool-dns": {
 			chart: charts.ipAddressPool
 			values: {
-				name: "\(global.id)-dns"
+				name:       "\(global.id)-dns"
 				autoAssign: false
-				from: global.network.dns
-				to: global.network.dns
-				namespace: "metallb-system"
+				from:       global.network.dns
+				to:         global.network.dns
+				namespace:  "metallb-system"
 			}
 		}
 		"ipaddresspool-dns-in-cluster": {
 			chart: charts.ipAddressPool
 			values: {
-				name: "\(global.id)-dns-in-cluster"
+				name:       "\(global.id)-dns-in-cluster"
 				autoAssign: false
-				from: global.network.dnsInClusterIP
-				to: global.network.dnsInClusterIP
-				namespace: "metallb-system"
+				from:       global.network.dnsInClusterIP
+				to:         global.network.dnsInClusterIP
+				namespace:  "metallb-system"
 			}
 		}
 	}
diff --git a/core/installer/values-tmpl/env-manager.cue b/core/installer/values-tmpl/env-manager.cue
index dbde7de..78f99e6 100644
--- a/core/installer/values-tmpl/env-manager.cue
+++ b/core/installer/values-tmpl/env-manager.cue
@@ -3,31 +3,31 @@
 )
 
 input: {
-	repoIP: string
-	repoPort: number
-	repoName: string
+	repoIP:        string
+	repoPort:      number
+	repoName:      string
 	sshPrivateKey: string
 }
 
-name: "env-manager"
+name:      "env-manager"
 namespace: "env-manager"
 
 out: {
 	images: {
 		envManager: {
 			repository: "giolekva"
-			name: "pcloud-installer"
-			tag: "latest"
+			name:       "pcloud-installer"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		envManager: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/env-manager"
+			branch:  "main"
+			path:    "charts/env-manager"
 		}
 	}
 
@@ -35,14 +35,14 @@
 		"env-manager": {
 			chart: charts.envManager
 			values: {
-				repoIP: input.repoIP
-				repoPort: input.repoPort
-				repoName: input.repoName
-				sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
+				repoIP:          input.repoIP
+				repoPort:        input.repoPort
+				repoName:        input.repoName
+				sshPrivateKey:   base64.Encode(null, input.sshPrivateKey)
 				clusterRoleName: "\(global.pcloudEnvName)-env-manager"
 				image: {
 					repository: images.envManager.fullName
-					tag: images.envManager.tag
+					tag:        images.envManager.tag
 					pullPolicy: images.envManager.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/etherpad.cue b/core/installer/values-tmpl/etherpad.cue
index a70b7cd..cf168fa 100644
--- a/core/installer/values-tmpl/etherpad.cue
+++ b/core/installer/values-tmpl/etherpad.cue
@@ -1,25 +1,25 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
-	auth: #Auth @name(Authentication)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
+	auth:      #Auth    @name(Authentication)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
 
-name: "etherpad"
-namespace: "app-etherpad"
-readme: "Etherpad is a highly customizable open source online editor providing collaborative editing in really real-time."
+name:        "etherpad"
+namespace:   "app-etherpad"
+readme:      "Etherpad is a highly customizable open source online editor providing collaborative editing in really real-time."
 description: "Etherpad is a highly customizable open source online editor providing collaborative editing in really real-time."
 icon: """
-<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 48 48"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M38.5 5.5h-29c-2.2 0-4 1.8-4 4v29c0 2.2 1.8 4 4 4h29c2.2 0 4-1.8 4-4v-29c0-2.2-1.8-4-4-4"/><circle cx="24" cy="24" r="13.9" fill="none" stroke="currentColor" stroke-miterlimit="7"/><path fill="none" stroke="currentColor" d="M14.5 5.5v37m19-37v37"/></svg>"""
+	<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 48 48"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" d="M38.5 5.5h-29c-2.2 0-4 1.8-4 4v29c0 2.2 1.8 4 4 4h29c2.2 0 4-1.8 4-4v-29c0-2.2-1.8-4-4-4"/><circle cx="24" cy="24" r="13.9" fill="none" stroke="currentColor" stroke-miterlimit="7"/><path fill="none" stroke="currentColor" d="M14.5 5.5v37m19-37v37"/></svg>"""
 
 _httpPortName: "http"
 
 out: {
 	ingress: {
 		etherpad: {
-			auth: input.auth
-			network: input.network
+			auth:      input.auth
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "etherpad"
@@ -31,18 +31,18 @@
 	images: {
 		etherpad: {
 			repository: "etherpad"
-			name: "etherpad"
-			tag: "2.2.5"
+			name:       "etherpad"
+			tag:        "2.2.5"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		etherpad: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/etherpad"
+			branch:  "main"
+			path:    "charts/etherpad"
 		}
 	}
 
@@ -56,22 +56,22 @@
 	helm: {
 		etherpad: {
 			chart: charts.etherpad
-			info: "Installing etherpad server"
+			info:  "Installing etherpad server"
 			values: {
 				image: {
 					repository: images.etherpad.fullName
-					tag: images.etherpad.tag
+					tag:        images.etherpad.tag
 					pullPolicy: images.etherpad.pullPolicy
 				}
-				portName: _httpPortName
+				portName:                  _httpPortName
 				persistentVolumeClaimName: volume.data.name
 				db: {
-					type: "postgres"
-					host: "postgres-db.\(release.namespace).svc.cluster.local"
-					port: 5432
-					name: "postgres"
-					user: "postgres"
-					pass: "postgres"
+					type:    "postgres"
+					host:    "postgres-db.\(release.namespace).svc.cluster.local"
+					port:    5432
+					name:    "postgres"
+					user:    "postgres"
+					pass:    "postgres"
 					charset: "utf8mb4"
 				}
 			}
diff --git a/core/installer/values-tmpl/fluxcd-reconciler.cue b/core/installer/values-tmpl/fluxcd-reconciler.cue
index fde9396..659a950 100644
--- a/core/installer/values-tmpl/fluxcd-reconciler.cue
+++ b/core/installer/values-tmpl/fluxcd-reconciler.cue
@@ -1,24 +1,24 @@
 input: {}
 
-name: "fluxcd-reconciler"
+name:      "fluxcd-reconciler"
 namespace: "fluxcd-reconciler"
 
 out: {
 	images: {
 		fluxcdReconciler: {
 			repository: "giolekva"
-			name: "fluxcd-reconciler"
-			tag: "latest"
+			name:       "fluxcd-reconciler"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		fluxcdReconciler: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/fluxcd-reconciler"
+			branch:  "main"
+			path:    "charts/fluxcd-reconciler"
 		}
 	}
 
@@ -28,7 +28,7 @@
 			values: {
 				image: {
 					repository: images.fluxcdReconciler.fullName
-					tag: images.fluxcdReconciler.tag
+					tag:        images.fluxcdReconciler.tag
 					pullPolicy: images.fluxcdReconciler.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/gerrit.cue b/core/installer/values-tmpl/gerrit.cue
index 9742cdb..932f367 100644
--- a/core/installer/values-tmpl/gerrit.cue
+++ b/core/installer/values-tmpl/gerrit.cue
@@ -1,42 +1,42 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
-	key: #SSHKey
-	sshPort: int @name(SSH Port) @role(port)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
+	key:       #SSHKey
+	sshPort:   int @name(SSH Port) @role(port)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "Gerrit"
-namespace: "app-gerrit"
-readme: "gerrit"
+name:        "Gerrit"
+namespace:   "app-gerrit"
+readme:      "gerrit"
 description: "Gerrit Code Review is a web-based code review tool built on Git version control. Gerrit provides a framework you and your teams can use to review code before it becomes part of the code base. Gerrit works equally well in open source projects that limit the number of users who can approve changes (typical in open source software development) and in projects in which all contributors are trusted."
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 37.05263261'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-9.97439025' y='-11.29059363' width='59.63381987' height='59.63381987'/>
-  <path class='cls-1' d='m20.91007091,3.11035315l-.40677547-.44522187c.00619982-.006201.47746668-.43902117.68457526-.67217354.1996669-.24555409.56179703-.8011513.56799921-.8073523l.50351019.32244483c-.02604351.02604351-.38817364.59404272-.62008623.86564032s-.71061876.71061876-.73046245.73666257h.00123949Zm2.60932297,17.51743602c-.01984369-.00619982-.40057565-.25175391-.60768422-.36213013-.22991143-.11154711-.46273235-.21699848-.69821676-.31624294l.35468845-1.01446206-1.48572655-.73046127-.47126449,1.43984054c-.29019943.00619982-1.18188444.08433271-2.50018743.63992992-1.58866109.66473157-2.79038804,1.69903731-2.80279005,1.70523714l-.23935309.20710857,1.0653084.03844552.03224451-.02604351c.006201-.01240201,1.18808545-.88548401,1.84785668-1.16948362.14882055-.0582892.34228763-.12277823.5493962-.16742357-.34848863.16742357-.73046127.37453214-.99461837.52335388-.32988562.1996669-.94253135.63248824-.96857486.65233193l-.31004312.21331076,1.12979743.02604351.03224451-.01240201c.0198425-.01240201,1.92474772-1.03306389,2.95781042-1.26001615l.32244512-.07813052c.23935427-.0582892.40677547-.10293454.69821676-.10293454.2579561,0,.60768422.03224333,1.13723792.11657604.65853175.09673235,1.09135073.2579561,1.09755291.26539778l.39437583.15502156-.5295537-.72302077-.01984369-.01240201.00868117-.00744404Zm-14.84982503-12.065638h-.05208702l-1.66059121,1.51797106v.04464652c-.02604351.43902117.12897805.85943932.42661916,1.18808545.29764111.32244512.69077626.50971119,1.12979683.52335269h.07069003c.87804233,0,1.5948621-.67837425,1.64074811-1.55021558.0374887-.90290667-.65442416-1.66979928-1.55641658-1.72507964l.00124067.00123949Zm-.07813112,3.02850045h-.06448843c-.19170127-.00438435-.37976864-.05320469-.5493962-.14261955.46794696.07532156.90835369-.24296393.98367584-.7109109.01272844-.07907552.01432452-.1595431.00474153-.23906095-.06419689-.46466491-.49097867-.79070078-.95617285-.73046127-.43424238.06072443-.75232622.4398538-.73666227.87804233-.0493023-.1478661-.0732039-.30301539-.07069003-.45886367l1.50556906-1.38279201c.74277694.07474203,1.29972245.71365481,1.27241697,1.45968304-.0345792.7442305-.65017228,1.32863287-1.39519402,1.32450399l.00620041.00247898Zm15.42526651-6.16117612l-.48490836-.32244512-.67837543.43902117-.65233193-.47126568-.497308.29764111.67217325.48490718-.69077508.44522217.49110818.29764111.66473157-.42041815.63992992.46506467.50971001-.28399961-.67217325-.48490718.69821912-.44646166Zm15.66337715,25.53267101c-.35468845-.34228645-.69077508-.68457526-1.04050557-1.03306389-.79630214-.80614711-1.57814907-1.62644429-2.34516705-2.46050124-.90996396-.98277224-1.78242858-1.99961393-2.61552279-3.04834414-.37553745-.46918054-.73095919-.95411256-1.06530722-1.45348322-.41339634-.64390149-.78257785-1.31514039-1.10499459-2.00908043-.34239052-.73667646-.66127566-1.48404945-.95617285-2.24099065.40057565.34228645.76890797.73046245,1.09755291,1.14344011.03224333-.35468845.07068885-.71061876.09673235-1.0727489l.03844552-.5295537c0-.05828802.01984369-.11037504-.01240201-.16122256-.02454382-.04479436-.05499414-.08608905-.09053253-.12277705-.19346707-.24555409-.43282134-.46506467-.66473157-.68457526-.31804304-.29794743-.64094706-.59066724-.96857486-.87804233l-.29764111-.2579561c-.04464534-.04464652-.09673235-.08433153-.14261955-.12277705-.05208702-.05208702-.07068885-.16122256-.09053253-.22571159l-.2579561-.79495029c1.00825987.47126568,1.83421518,1.22777045,2.60932297,2.00907925.00619982-.36213013.00619982-.71681977,0-1.0789499,0-.18726607,0-.37453214-.01240201-.56799921,0-.05208702.01240201-.16742357-.02604351-.21330958-.01984369-.03224451-.05208702-.05828802-.07068885-.09053253-.18106507-.19346707-.38817364-.35468964-.5878429-.51715169-.28399961-.23935309-.58164071-.45886367-.87184014-.67837425-.2579561-.19346707-.52335388-.38073314-.7875098-.56799921-.03224333-.02604351-.12897805-.06448902-.11037622-.09673354l.06448902-.13517905c.03844552-.05828802.02604351-.07069003.09053253-.04464652l.28399961.09673354c.66473157.2579561,1.2848178.60768422,1.8863022,1.00825987-.20820614-.74461962-.49853567-1.46378708-.86564032-2.1442583-.65563881-1.25890203-1.46959424-2.42878067-2.42205572-3.4811643-.62615595-.7038808-1.29947171-1.36435044-2.01528025-1.97683473-.36833232-.31004312-.7552641-.60768422-1.15583975-.87804233-.18726489-.12277705-.36833232-.24555409-.56799921-.36213013-.08433271-.04464593-.17486524-.09053253-.25175391-.15502156-.29764111-.23315267-.60024254-.46506467-.90408584-.70441776.39437583.16122256.77510779.34228763,1.13723792.55559721-.20710857-.32244512-.56179703-.5493962-.89788365-.71681977-.51418543-.25650845-1.05045934-.46611966-1.60230259-.62628724.18726489-.19966778.38817364-.38073285.57544089-.57544001.18726489-.19966778.36833232-.40677665.5431952-.62008623.21331076-.24555409.42041934-.49110818.62008623-.74906398l-2.70605533-1.69903628c-.1996669.4005758-.45886485.78130865-.7552641,1.12359627-.29764111.33608662-.64612974.60768452-.99461837.89168413-.31004312.2579558-.62628724.51715199-.93012935.77510779-.08433153.07068973-.15502156.14261984-.24555409.19966778-.03844552.03844522-.15502156.006201-.20710857.006201h-.39437464c-.49110818.01240171-.98221636.05208731-1.47332454.11657634-.09673354.006201-.18726607.0198428-.29020061.01240171l-.29020061-.0198428c-.22571159-.01240171-.45266266-.02604351-.67837425-.02604351-.47746668-.006201-.95617285,0-1.43984054.03844522-.40456023.03341748-.80618022.09600232-1.20172695.18726607-.39394768.09978762-.76465136.27545061-1.09135191.51715199-.32244512.23315267-.63992873.5295537-.83339581.87804233-.19346707.34228763-.28399961.74906428-.35468964,1.13723792-.21951058.0198425-.43902117.0198425-.65853175.02604351-.67978583.03606293-1.3523068.15773294-2.00163816.36213013-.81508789.25388636-1.56763764.67642986-2.20874732,1.24017246-.32830018.30005267-.62690964.63105596-.89168383.98841737-.03224451.03844552-.06448902.08433153-.10293425.11037563-.0198428.01240201-.04464623.02604351-.05828802.04464652-.02450449.04328876-.05272095.08436938-.08433182.12277705l-.21951058.35468964c-.2777986.47126568-.45886367.98221636-.63248794,1.49812856l-.07813082.19966808.05828802-.03224451c-.01893831.1114525-.03383025.22355549-.04464623.33608662l-.01240171.16742357v.09053253l-.11037533.0198425c-.2219529.04571925-.44169382.10158624-.6585316.16742357-.19552693.05895389-.38235909.14361185-.55559735.25175509-.17486436.10293454-.32244483.25175509-.47126553.39437464-.53470711.51039244-.92674,1.15166711-1.13723814,1.86025869C-.00047122,14.62163461-.05875932,15.26032385.07021861,15.84816557c.03224448.14882055.07813087.31004312.17486431.43282016.12277708.14882055.32988588.20710857.51715187.15502156.21951051-.05828802.41297744-.19966808.61388537-.30384211l.52335269-.26539659c.74906398-.36833114,1.53781386-.73666227,2.37741068-.86564032.05828802-.006201.16122256.11037504.21330958.14882055.08433182.06448902.16742327.12277705.24555409.17486406.18106507.11657604.36833114.21330958.55559721.29764111.43282016.18726607.89168383.29020061,1.35054809.38073314.83339581.17486406,1.67919363.28399961,2.53243194.29764111.34228763.006201.68457526,0,1.03306389-.02604351.36833114-.03224451.74286328-.08433153,1.11739542-.08433153.41297766-.006201.81975431.03844552,1.22777045.09053253.42041815.05208702.83959681.11037504,1.26001497.17486406.85943932.12897805,1.70523714.2777986,2.55103495.45886367-.18726607.29764111-.37453214.60024373-.55559721.90408584-.01240201.0198425-.12277705,0-.14882055,0-.06889702-.00619746-.13821155-.00619746-.20710857,0-.12277705,0-.25175509.01240201-.37453214.03224451-.34628049.04689132-.68643449.13130683-1.01446088.25175509-.81355331.30384211-1.55641658.8011513-2.19634532,1.38279201-.36833114.32244512-.71061876.67217325-1.00825987,1.0591074-.07769174.10364181-.15294943.20908372-.22571159.31624294.16742357-.03844552.34848863-.07068885.52335269-.11657604.10293454-.02604351.19346707-.04464534.29020061-.06448902.03224451-.01240201.04464652-.02604351.08433153-.04464534.36033003-.33479036.74230148-.64550526,1.14343892-.93012935.18726607-.12897805.37453214-.25175391.58164071-.35468845.2715976-.13517787.58164071-.21331076.87804233-.28399961-.5431952.29764111-1.12359642.57544089-1.6147046.96237268-.28399961.23315208-.5431952.48490836-.81355331.73046245l1.0851509-.17486524c.01240201,0,.0198425-.00619982.03844552-.01984369l.2777986-.15502156c.18726607-.10293454.38073314-.20710857.57543971-.30384329.39437464-.20710857.79495029-.40057565,1.20792795-.56179703.39437464-.15502156.79495029-.29764111,1.21412895-.37453214.36213013-.07813052.70441776-.08433271,1.0727489,0,.56179821.12277823,1.10499341.38073196,1.60230259.68457526.03224451.02604351.05828802.0582892.09053253.02604351.02604351-.02604351.16122256-.12277823.14882055-.15502156l-.29764111-.54939738c-.02604351-.05208702-.03844552-.08433271-.08433153-.11037622l-.21951058-.12897805c-.28953356-.16791321-.56980641-.3513106-.83959681-.5493962-.06448902-.03844552-.12897805-.06448902-.13517905-.14882055-.01240201-.07069003.0198425-.14882055.04464652-.21951058.05208702-.14882055.12897805-.28399961.21330958-.41297766.05828802-.09673354.12277705-.18106507.18106507-.2715976.02604351-.03224451.0198425-.03844552.05208702-.02604351l.19966808.05828802c.38817364.12897805.77510779.26539659,1.17568344.36213013.44522217.11657604.89788483.20710857,1.35674969.29020061l.07813052.0198425c-.09053253-.05208702-.14882174-.14882055-.21951058-.22571159-.03844552-.05208702-.0582892-.08433153-.12277823-.09673354l-.17486524-.03844552c-.12277823-.02604351-.23935427-.04464652-.36833232-.07813052-.43511464-.0892824-.86422461-.20567275-1.28481898-.34848863-.62132927-.20887792-1.25299907-.38562961-1.89250321-.5295537-.8031773-.17243002-1.610817-.32337238-2.4220569-.45266266-.41297766-.07069003-.82719481-.12277705-1.24017246-.18106507-.40961518-.06287106-.82115347-.11250393-1.23397146-.14882055-.89168383-.05208702-1.77592716.14882055-2.673812.13517905-.60024373-.006201-1.21412895-.09053253-1.80817168-.17486406l-.11657604-.01240201c.42041815-.15502156.82719481-.31004312,1.24017246-.47126568.39437464-.15502156.78130879-.31624412,1.16948243-.47746668.20710857-.08433153.41297766-.17486406.61388523-.2579561.18726607-.08433153.37453214-.16742357.5431952-.28399961.67837425-.45886367,1.11739542-1.20172695,1.6147046-1.83421518.45266266-.59404272.96857486-1.15584093,1.63454711-1.49812856.21330958-.11037504.43282016-.19346707.66473275-.2579561-.47126568-.72302077-.91028684-1.53781357-1.03306389-2.40345389l.15502156.05828802c.05828802.0198425.11037504.02604351.12277705.07813112l.04464652.21950999c.04464652.14882055.09053253.29020061.14261955.43282016.12277705.31624412.26539659.62008623.43282016.91028684.36978352.65215334.79332405,1.27232236,1.26621597,1.85405769.89168383,1.13723792,1.89250321,2.1578998,2.86851856,3.21080619.23935309.2579561.45886367.5357547.67837425.81355331.25175509.31004312.50351019.62008623.7552641.92392834.1996669.23315208.38817364.47126568.5878429.70441776l.15502156.18726607c.02604351.03224451.06448902.04464652.10293454.05828802,1.00081819.49730919,2.00908043.99461837,3.00989862,1.47952673.72302077.34848863,1.43983936.69821676,2.17030181,1.03306389.38817364.18106507.77510779.36213013,1.17568344.5295537.04464534.01984369.10293454.04464534.16122138.06448902.02604351.01240201.04464534.02604351.07813052.03844552l.02604351.07813052c.04464534.12277823.08433271.23935427.12277823.36213013.08433271.23315208.16122138.45886485.24555409.68457526.54939738,1.51177006,1.14963993,3.00369643,1.89250202,4.42493633.578322,1.08265063,1.1791086,2.15315236,1.80196949,3.21080737.66473157,1.12359642,1.343107,2.23479083,2.02768226,3.34598525.54939738.88548401,1.09755291,1.77592598,1.66679162,2.65521017.23935427.37453214.47746668.76270578.72302077,1.13723792l.10293454.15502156,1.60230259-2.35136687c.01240201-.01240201.13517787-.16742357.12277823-.18106507l-.2579561-.40057565c-.47746668-.74286209-.96237268-1.48572655-1.43983936-2.22859101l-1.54401576-2.39601221,1.0851509,1.31830299,1.84785668,2.23479083c.1996669.23935427.38817364.47746668.58164071.72302077.36213013-.66473157.73046245-1.32450517,1.09755291-1.98303692.14261955-.2715976.29019943-.54939738.4390188-.81355331l-.00495796-.01239964ZM20.05063278,1.84413718c.50971001-.40677665.93012935-.93012935,1.25257447-1.49812827l1.95079123,1.23397175.29764111.18106507c-.40677547.49730919-.81975313,1.00081908-1.2848178,1.44728133-.06097634.05293118-.11933415.10880527-.17486524.16742327-.03224333.04464623-.07813052.08433182-.11657604.12277705l-.05208702.06448902c-.03844552-.01240171-.07813052-.02604351-.11657604-.03224451-.23935427-.06448902-.47746668-.12897805-.71681859-.18106507-.48385337-.10967516-.97316382-.19371042-1.46588405-.25175509-.31624412-.03844522-.63992873-.06448902-.95617285-.09673354.45266266-.38817394.91772734-.77510779,1.38279319-1.15584064l-.00000237-.00124038Zm-2.90076426,2.26703535c.38817364-.16122256.8011513-.24555409,1.20792795-.31624412.81333332-.13418557,1.6412555-.15588524,2.46050242-.06448902.5878429.06448902,1.16328143.17486406,1.72508082.34848863l-.23315208.18726607-.37453214-.10293454c-.23315208-.04464593-.46506467-.09673354-.69821676-.13517905-.41077543-.06070432-.8250115-.09508601-1.24017246-.10293454-.76375012-.01441855-1.52604905.07231982-2.26703535.2579561-.50273314.13067111-.99001049.31485561-1.45348204.5493962-.47126568.2579561-.91772734.57543971-1.28481898.96237386-.22622016.22823196-.4255346.4816405-.59404272.75526528-.09673354.14882055-.17486406.29764111-.25175509.45266266-.03753719.07754153-.06985385.15750409-.09673354.23935309l-.05208702.12277705c-.00516494.02191581-.01179409.04346025-.0198425.06448902l-.11037504-.0198425-.13517905-.01240201c.38817364-1.19552594,1.26001497-2.13185629,2.34516587-2.73210002.34228763-.18726607.70441776-.35468964,1.0727489-.45886367l-.00000118.00496151Zm-6.49726393.61388523c.43902117-.63248824,1.13723792-1.0727489,1.8863022-1.23397146.8271948-.16122256,1.67919363-.19346678,2.51879044-.17486436-.86564032.21951058-1.73748165.54319549-2.46050242,1.0789502-.56594483.12955226-1.09433828.38801929-1.54401457.75526528-.14516831.12120698-.28113388.2530277-.40677665.39437464-.0588983.06001006-.11281735.12471257-.16122256.19346707-.0198425.0198425-.04464652.04464593-.05828802.07813112h-.14261955c.03844552-.21951058.09053253-.44522217.16122256-.65853175.05208702-.14882055.11037504-.29764111.19966808-.43282016l.0074405-.00000059Zm1.45348204.09673354c-.23729515.23928035-.45347638.49861373-.64612974.77510779-.07813052.11037563-.16122256.25175509-.29764111.31004312-.14261955.06448902-.32244512-.006201-.46506467-.04464593.37108569-.46297185.85614544-.82153135,1.40759603-1.04050497h.00123949ZM3.81181355,9.56917155c.12897805-.26539659.2976414-.52335269.45266296-.76890678.02604351-.04464652.09053253-.07813052.12277705-.10293454.08433182-.05828802.16122227-.11657604.23935338-.18106507.5097106-.36833114,1.02686288-.73666227,1.55021558-1.0789499.2777986-.18106507.5493962-.35468964.83339581-.50971119.29764111-.16742357.60768481-.29764111.93012935-.40677665.57867031-.17905976,1.17035173-.31298572,1.76972616-.40057565.28399902-.03844552.59404213-.09673354.87804174-.02604351-.5493962.31004312-1.09135191.62008623-1.64074811.92392834-.56179821.31624412-1.13723792.60768422-1.71143814.91028684-.5493962.29764111-1.09135191.62008623-1.62090561.95617285-.55559721.34228763-1.1049937.69077626-1.65314982,1.04050438-.13517876.08433153-.26539689.17486406-.40057565.2579561.07813082-.20710857.14882055-.42041815.25175509-.61388523h-.00123979Zm1.66679162,5.05122238c-.04464593.09053253-.21951058.07069003-.31004312.07069003-.15502156,0-.30384211,0-.45886367.006201-.42560113.02528184-.8463806.10360514-1.25257417.23315208-.7875095.23935309-1.52417192.62008623-2.26083434.99461837-.16122241.09053253-.33608677.22571159-.52335277.2715976-.10319415.02663487-.21197917-.01459359-.27159775-.10293454-.05594793-.10200492-.09094479-.2141635-.10293432-.32988562-.04154617-.19982775-.06109201-.40360223-.05828809-.60768422,0-.5493962.12897794-1.09135191.35468934-1.58866109.16122241-.34848863.36833121-.66473275.61388537-.94997185.25175502-.29020061.54319557-.58164071.89168405-.74286328.58784172-.2715976,1.28481869-.35468964,1.92474772-.38817364.12277705-.01240201.23935338-.01240201.36213043-.01240201.16122256,0,.35468934-.02604351.5097109.03224451.12277734.04464652.19966778.17486406.2517548.28399961.07069003.17486406.12277705.37453214.16122256.55559721.10293454.43282016.20710857.86564032.23935309,1.31086249.0198425.19346707.03224451.39437464.006201.58784172-.01240201.12277705-.0198425.2579561-.07813112.37453214l.00124008.00123949Zm4.67669024-3.26785472c-.32191467.20096789-.6640036.36764871-1.02066188.49730919-.35418402.1315481-.71942294.2311592-1.09135191.29764111-.16122256.0198425-.32244512.04464652-.48490718.03224451-.16742357,0-.31624412-.05828802-.48490718-.11037504-.32637412-.09433498-.64220606-.22191387-.94253135-.38073314-.11292439-.06073625-.21015763-.14693057-.28399961-.25175509-.04557969-.08727414-.05918097-.18774744-.03844552-.28399961.0198425-.38073314.15502156-.75526528.33608662-1.09135191.31004312-.56799921.79495029-1.01446088,1.38899302-1.28481898,1.45348204-.65233074,3.08058865-.04464652,4.31456011.81355331l.13517905.09673354c-.2579561.2777986-.51715169.5357547-.78130879.79495029-.32988562.31004312-.67217325.62628724-1.05290639.87184133l.006201-.00123949Zm3.57789784-3.18476268c-.78077184-.34143075-1.53056113-.74972779-2.24099184-1.22032996.74286328.31004312,1.54401457.49730919,2.33772537.61388523.42661916.05828802.86564032.11657604,1.29225948.12897805.46506467.0198425.93633035-.03224451,1.38899302-.12277705.90408584-.16742357,1.76972616-.50351019,2.59071996-.91028684.82099498-.40677665,1.59486092-.88548283,2.33772537-1.42123753.35468845-.25175509.71061876-.51715169,1.04670539-.8011513.03224333-.02604351.28399961-.2715976.30384329-.2579561l.06448902.05208702.89168383.69077626c.5431952.42041815,1.0851509.83959681,1.63454829,1.26001497-1.50363058.54005862-3.02220601,1.03756828-4.55391438,1.49192756-.8594405.2579561-1.71143814.49730919-2.58327947.69821735-.68457526.16122256-1.38279201.31004252-2.07976928.34228704-.83959681.03844552-1.66059061-.21951058-2.42825791-.54319579l-.00248017-.0012389Zm14.63031445,6.51710643c.12897805.03224451.24555409.07813052.35468845.11037504l.16122138.05828802c.02604351.006201.04464534.02604351.07068885.03224451l.03224333.09673354c.07813052.24555409.14882174.47746668.23315208.71681977-.24555409-.21330958-.497308-.42041815-.74286209-.62628724l-.14882174-.12277705c-.03844552-.02604351-.07813052-.03844552-.05208702-.07813052l.09673235-.18726607h-.0049556Zm-1.10499459,2.38361139l.0582892-.10293454.04464534-.07069003c.01984369-.03224451.01240201-.03844552.05208702-.0198425.21331076.08433153.42661916.18106507.63248824.2777986.40057565.18106507.7875098.38073314,1.16328143.60024373.18106507.11037504.36213013.22571159.53575352.34228763l.24555409.17486406.12277823.09053253c.05208702.04464652.07068885.10293454.09673235.16742238.16742357.46506467.36213013.93632917.55559721,1.39519402.12897805.31624294.2715976.62628605.41297766.93632917-.49014545-.60819752-1.01871039-1.18440245-1.58245891-1.72508082-.56908259-.56757817-1.16417557-1.10845996-1.78336766-1.62090561l-.53575352-.43902117-.0186042-.00619746Zm6.21450381,10.62579745l-.1996669.14882174.01240201.02604351.10293454.15502156.45266266.69077508,1.49192637,2.31912354c.51715169.79495148,1.0268617,1.59486092,1.54401576,2.38981239l.50971001.79495148.13517787.21951058c.02113995.02331852.03869389.04964825.05208702.07813052-.43282134.63248824-.86564032,1.27241579-1.29846167,1.90490403-.04464534.0582892-.08433271.12277823-.12277823.18106507-.39437583-.61388641-.7875098-1.22777045-1.18188326-1.84785668-.65853175-1.04670539-1.31086131-2.11201261-1.95699105-3.16492018-.7160782-1.16891354-1.41396616-2.3488737-2.09341078-3.53945232-.63248824-1.11739423-1.24017246-2.25463452-1.74988247-3.43651778-.4903607-1.15152755-.93632207-2.32145824-1.33690482-3.50720899.8011513.32244512,1.62090442.60768422,2.44810159.86564032.23935427.07068885.47746668.14882174.71681859.20710857l.10293454.03224333c.01240201,0,.02604351-.06448902.03224333-.08433271.03224333-.10293454.05208702-.21331076.07813052-.32244512.04464534-.20710857.08433271-.42041934.11657604-.62628605.34228645.70441894.72302077,1.39519402,1.16328143,2.04132376.35468845.52335388.73666227,1.0268617,1.13723792,1.52417207.8640815,1.08055958,1.76924361,2.12762215,2.71349701,3.13887667.76890797.81355331,1.54401576,1.6283461,2.33152319,2.42205572l.63992992.63992992c.01240201.01240201.06448902.05208702.06448902.07068885l-.05208702.08433271-.24555409.45886485-.97477468,1.76352634c-.29764111-.36213013-.59404272-.71681859-.89168383-1.0851509l-1.86025869-2.25463452c-.52335388-.63992992-1.05290757-1.27861798-1.57625909-1.9185479l-.31004312-.36833232.00496033-.00123713Z'/>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 37.05263261'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-9.97439025' y='-11.29059363' width='59.63381987' height='59.63381987'/>
+	  <path class='cls-1' d='m20.91007091,3.11035315l-.40677547-.44522187c.00619982-.006201.47746668-.43902117.68457526-.67217354.1996669-.24555409.56179703-.8011513.56799921-.8073523l.50351019.32244483c-.02604351.02604351-.38817364.59404272-.62008623.86564032s-.71061876.71061876-.73046245.73666257h.00123949Zm2.60932297,17.51743602c-.01984369-.00619982-.40057565-.25175391-.60768422-.36213013-.22991143-.11154711-.46273235-.21699848-.69821676-.31624294l.35468845-1.01446206-1.48572655-.73046127-.47126449,1.43984054c-.29019943.00619982-1.18188444.08433271-2.50018743.63992992-1.58866109.66473157-2.79038804,1.69903731-2.80279005,1.70523714l-.23935309.20710857,1.0653084.03844552.03224451-.02604351c.006201-.01240201,1.18808545-.88548401,1.84785668-1.16948362.14882055-.0582892.34228763-.12277823.5493962-.16742357-.34848863.16742357-.73046127.37453214-.99461837.52335388-.32988562.1996669-.94253135.63248824-.96857486.65233193l-.31004312.21331076,1.12979743.02604351.03224451-.01240201c.0198425-.01240201,1.92474772-1.03306389,2.95781042-1.26001615l.32244512-.07813052c.23935427-.0582892.40677547-.10293454.69821676-.10293454.2579561,0,.60768422.03224333,1.13723792.11657604.65853175.09673235,1.09135073.2579561,1.09755291.26539778l.39437583.15502156-.5295537-.72302077-.01984369-.01240201.00868117-.00744404Zm-14.84982503-12.065638h-.05208702l-1.66059121,1.51797106v.04464652c-.02604351.43902117.12897805.85943932.42661916,1.18808545.29764111.32244512.69077626.50971119,1.12979683.52335269h.07069003c.87804233,0,1.5948621-.67837425,1.64074811-1.55021558.0374887-.90290667-.65442416-1.66979928-1.55641658-1.72507964l.00124067.00123949Zm-.07813112,3.02850045h-.06448843c-.19170127-.00438435-.37976864-.05320469-.5493962-.14261955.46794696.07532156.90835369-.24296393.98367584-.7109109.01272844-.07907552.01432452-.1595431.00474153-.23906095-.06419689-.46466491-.49097867-.79070078-.95617285-.73046127-.43424238.06072443-.75232622.4398538-.73666227.87804233-.0493023-.1478661-.0732039-.30301539-.07069003-.45886367l1.50556906-1.38279201c.74277694.07474203,1.29972245.71365481,1.27241697,1.45968304-.0345792.7442305-.65017228,1.32863287-1.39519402,1.32450399l.00620041.00247898Zm15.42526651-6.16117612l-.48490836-.32244512-.67837543.43902117-.65233193-.47126568-.497308.29764111.67217325.48490718-.69077508.44522217.49110818.29764111.66473157-.42041815.63992992.46506467.50971001-.28399961-.67217325-.48490718.69821912-.44646166Zm15.66337715,25.53267101c-.35468845-.34228645-.69077508-.68457526-1.04050557-1.03306389-.79630214-.80614711-1.57814907-1.62644429-2.34516705-2.46050124-.90996396-.98277224-1.78242858-1.99961393-2.61552279-3.04834414-.37553745-.46918054-.73095919-.95411256-1.06530722-1.45348322-.41339634-.64390149-.78257785-1.31514039-1.10499459-2.00908043-.34239052-.73667646-.66127566-1.48404945-.95617285-2.24099065.40057565.34228645.76890797.73046245,1.09755291,1.14344011.03224333-.35468845.07068885-.71061876.09673235-1.0727489l.03844552-.5295537c0-.05828802.01984369-.11037504-.01240201-.16122256-.02454382-.04479436-.05499414-.08608905-.09053253-.12277705-.19346707-.24555409-.43282134-.46506467-.66473157-.68457526-.31804304-.29794743-.64094706-.59066724-.96857486-.87804233l-.29764111-.2579561c-.04464534-.04464652-.09673235-.08433153-.14261955-.12277705-.05208702-.05208702-.07068885-.16122256-.09053253-.22571159l-.2579561-.79495029c1.00825987.47126568,1.83421518,1.22777045,2.60932297,2.00907925.00619982-.36213013.00619982-.71681977,0-1.0789499,0-.18726607,0-.37453214-.01240201-.56799921,0-.05208702.01240201-.16742357-.02604351-.21330958-.01984369-.03224451-.05208702-.05828802-.07068885-.09053253-.18106507-.19346707-.38817364-.35468964-.5878429-.51715169-.28399961-.23935309-.58164071-.45886367-.87184014-.67837425-.2579561-.19346707-.52335388-.38073314-.7875098-.56799921-.03224333-.02604351-.12897805-.06448902-.11037622-.09673354l.06448902-.13517905c.03844552-.05828802.02604351-.07069003.09053253-.04464652l.28399961.09673354c.66473157.2579561,1.2848178.60768422,1.8863022,1.00825987-.20820614-.74461962-.49853567-1.46378708-.86564032-2.1442583-.65563881-1.25890203-1.46959424-2.42878067-2.42205572-3.4811643-.62615595-.7038808-1.29947171-1.36435044-2.01528025-1.97683473-.36833232-.31004312-.7552641-.60768422-1.15583975-.87804233-.18726489-.12277705-.36833232-.24555409-.56799921-.36213013-.08433271-.04464593-.17486524-.09053253-.25175391-.15502156-.29764111-.23315267-.60024254-.46506467-.90408584-.70441776.39437583.16122256.77510779.34228763,1.13723792.55559721-.20710857-.32244512-.56179703-.5493962-.89788365-.71681977-.51418543-.25650845-1.05045934-.46611966-1.60230259-.62628724.18726489-.19966778.38817364-.38073285.57544089-.57544001.18726489-.19966778.36833232-.40677665.5431952-.62008623.21331076-.24555409.42041934-.49110818.62008623-.74906398l-2.70605533-1.69903628c-.1996669.4005758-.45886485.78130865-.7552641,1.12359627-.29764111.33608662-.64612974.60768452-.99461837.89168413-.31004312.2579558-.62628724.51715199-.93012935.77510779-.08433153.07068973-.15502156.14261984-.24555409.19966778-.03844552.03844522-.15502156.006201-.20710857.006201h-.39437464c-.49110818.01240171-.98221636.05208731-1.47332454.11657634-.09673354.006201-.18726607.0198428-.29020061.01240171l-.29020061-.0198428c-.22571159-.01240171-.45266266-.02604351-.67837425-.02604351-.47746668-.006201-.95617285,0-1.43984054.03844522-.40456023.03341748-.80618022.09600232-1.20172695.18726607-.39394768.09978762-.76465136.27545061-1.09135191.51715199-.32244512.23315267-.63992873.5295537-.83339581.87804233-.19346707.34228763-.28399961.74906428-.35468964,1.13723792-.21951058.0198425-.43902117.0198425-.65853175.02604351-.67978583.03606293-1.3523068.15773294-2.00163816.36213013-.81508789.25388636-1.56763764.67642986-2.20874732,1.24017246-.32830018.30005267-.62690964.63105596-.89168383.98841737-.03224451.03844552-.06448902.08433153-.10293425.11037563-.0198428.01240201-.04464623.02604351-.05828802.04464652-.02450449.04328876-.05272095.08436938-.08433182.12277705l-.21951058.35468964c-.2777986.47126568-.45886367.98221636-.63248794,1.49812856l-.07813082.19966808.05828802-.03224451c-.01893831.1114525-.03383025.22355549-.04464623.33608662l-.01240171.16742357v.09053253l-.11037533.0198425c-.2219529.04571925-.44169382.10158624-.6585316.16742357-.19552693.05895389-.38235909.14361185-.55559735.25175509-.17486436.10293454-.32244483.25175509-.47126553.39437464-.53470711.51039244-.92674,1.15166711-1.13723814,1.86025869C-.00047122,14.62163461-.05875932,15.26032385.07021861,15.84816557c.03224448.14882055.07813087.31004312.17486431.43282016.12277708.14882055.32988588.20710857.51715187.15502156.21951051-.05828802.41297744-.19966808.61388537-.30384211l.52335269-.26539659c.74906398-.36833114,1.53781386-.73666227,2.37741068-.86564032.05828802-.006201.16122256.11037504.21330958.14882055.08433182.06448902.16742327.12277705.24555409.17486406.18106507.11657604.36833114.21330958.55559721.29764111.43282016.18726607.89168383.29020061,1.35054809.38073314.83339581.17486406,1.67919363.28399961,2.53243194.29764111.34228763.006201.68457526,0,1.03306389-.02604351.36833114-.03224451.74286328-.08433153,1.11739542-.08433153.41297766-.006201.81975431.03844552,1.22777045.09053253.42041815.05208702.83959681.11037504,1.26001497.17486406.85943932.12897805,1.70523714.2777986,2.55103495.45886367-.18726607.29764111-.37453214.60024373-.55559721.90408584-.01240201.0198425-.12277705,0-.14882055,0-.06889702-.00619746-.13821155-.00619746-.20710857,0-.12277705,0-.25175509.01240201-.37453214.03224451-.34628049.04689132-.68643449.13130683-1.01446088.25175509-.81355331.30384211-1.55641658.8011513-2.19634532,1.38279201-.36833114.32244512-.71061876.67217325-1.00825987,1.0591074-.07769174.10364181-.15294943.20908372-.22571159.31624294.16742357-.03844552.34848863-.07068885.52335269-.11657604.10293454-.02604351.19346707-.04464534.29020061-.06448902.03224451-.01240201.04464652-.02604351.08433153-.04464534.36033003-.33479036.74230148-.64550526,1.14343892-.93012935.18726607-.12897805.37453214-.25175391.58164071-.35468845.2715976-.13517787.58164071-.21331076.87804233-.28399961-.5431952.29764111-1.12359642.57544089-1.6147046.96237268-.28399961.23315208-.5431952.48490836-.81355331.73046245l1.0851509-.17486524c.01240201,0,.0198425-.00619982.03844552-.01984369l.2777986-.15502156c.18726607-.10293454.38073314-.20710857.57543971-.30384329.39437464-.20710857.79495029-.40057565,1.20792795-.56179703.39437464-.15502156.79495029-.29764111,1.21412895-.37453214.36213013-.07813052.70441776-.08433271,1.0727489,0,.56179821.12277823,1.10499341.38073196,1.60230259.68457526.03224451.02604351.05828802.0582892.09053253.02604351.02604351-.02604351.16122256-.12277823.14882055-.15502156l-.29764111-.54939738c-.02604351-.05208702-.03844552-.08433271-.08433153-.11037622l-.21951058-.12897805c-.28953356-.16791321-.56980641-.3513106-.83959681-.5493962-.06448902-.03844552-.12897805-.06448902-.13517905-.14882055-.01240201-.07069003.0198425-.14882055.04464652-.21951058.05208702-.14882055.12897805-.28399961.21330958-.41297766.05828802-.09673354.12277705-.18106507.18106507-.2715976.02604351-.03224451.0198425-.03844552.05208702-.02604351l.19966808.05828802c.38817364.12897805.77510779.26539659,1.17568344.36213013.44522217.11657604.89788483.20710857,1.35674969.29020061l.07813052.0198425c-.09053253-.05208702-.14882174-.14882055-.21951058-.22571159-.03844552-.05208702-.0582892-.08433153-.12277823-.09673354l-.17486524-.03844552c-.12277823-.02604351-.23935427-.04464652-.36833232-.07813052-.43511464-.0892824-.86422461-.20567275-1.28481898-.34848863-.62132927-.20887792-1.25299907-.38562961-1.89250321-.5295537-.8031773-.17243002-1.610817-.32337238-2.4220569-.45266266-.41297766-.07069003-.82719481-.12277705-1.24017246-.18106507-.40961518-.06287106-.82115347-.11250393-1.23397146-.14882055-.89168383-.05208702-1.77592716.14882055-2.673812.13517905-.60024373-.006201-1.21412895-.09053253-1.80817168-.17486406l-.11657604-.01240201c.42041815-.15502156.82719481-.31004312,1.24017246-.47126568.39437464-.15502156.78130879-.31624412,1.16948243-.47746668.20710857-.08433153.41297766-.17486406.61388523-.2579561.18726607-.08433153.37453214-.16742357.5431952-.28399961.67837425-.45886367,1.11739542-1.20172695,1.6147046-1.83421518.45266266-.59404272.96857486-1.15584093,1.63454711-1.49812856.21330958-.11037504.43282016-.19346707.66473275-.2579561-.47126568-.72302077-.91028684-1.53781357-1.03306389-2.40345389l.15502156.05828802c.05828802.0198425.11037504.02604351.12277705.07813112l.04464652.21950999c.04464652.14882055.09053253.29020061.14261955.43282016.12277705.31624412.26539659.62008623.43282016.91028684.36978352.65215334.79332405,1.27232236,1.26621597,1.85405769.89168383,1.13723792,1.89250321,2.1578998,2.86851856,3.21080619.23935309.2579561.45886367.5357547.67837425.81355331.25175509.31004312.50351019.62008623.7552641.92392834.1996669.23315208.38817364.47126568.5878429.70441776l.15502156.18726607c.02604351.03224451.06448902.04464652.10293454.05828802,1.00081819.49730919,2.00908043.99461837,3.00989862,1.47952673.72302077.34848863,1.43983936.69821676,2.17030181,1.03306389.38817364.18106507.77510779.36213013,1.17568344.5295537.04464534.01984369.10293454.04464534.16122138.06448902.02604351.01240201.04464534.02604351.07813052.03844552l.02604351.07813052c.04464534.12277823.08433271.23935427.12277823.36213013.08433271.23315208.16122138.45886485.24555409.68457526.54939738,1.51177006,1.14963993,3.00369643,1.89250202,4.42493633.578322,1.08265063,1.1791086,2.15315236,1.80196949,3.21080737.66473157,1.12359642,1.343107,2.23479083,2.02768226,3.34598525.54939738.88548401,1.09755291,1.77592598,1.66679162,2.65521017.23935427.37453214.47746668.76270578.72302077,1.13723792l.10293454.15502156,1.60230259-2.35136687c.01240201-.01240201.13517787-.16742357.12277823-.18106507l-.2579561-.40057565c-.47746668-.74286209-.96237268-1.48572655-1.43983936-2.22859101l-1.54401576-2.39601221,1.0851509,1.31830299,1.84785668,2.23479083c.1996669.23935427.38817364.47746668.58164071.72302077.36213013-.66473157.73046245-1.32450517,1.09755291-1.98303692.14261955-.2715976.29019943-.54939738.4390188-.81355331l-.00495796-.01239964ZM20.05063278,1.84413718c.50971001-.40677665.93012935-.93012935,1.25257447-1.49812827l1.95079123,1.23397175.29764111.18106507c-.40677547.49730919-.81975313,1.00081908-1.2848178,1.44728133-.06097634.05293118-.11933415.10880527-.17486524.16742327-.03224333.04464623-.07813052.08433182-.11657604.12277705l-.05208702.06448902c-.03844552-.01240171-.07813052-.02604351-.11657604-.03224451-.23935427-.06448902-.47746668-.12897805-.71681859-.18106507-.48385337-.10967516-.97316382-.19371042-1.46588405-.25175509-.31624412-.03844522-.63992873-.06448902-.95617285-.09673354.45266266-.38817394.91772734-.77510779,1.38279319-1.15584064l-.00000237-.00124038Zm-2.90076426,2.26703535c.38817364-.16122256.8011513-.24555409,1.20792795-.31624412.81333332-.13418557,1.6412555-.15588524,2.46050242-.06448902.5878429.06448902,1.16328143.17486406,1.72508082.34848863l-.23315208.18726607-.37453214-.10293454c-.23315208-.04464593-.46506467-.09673354-.69821676-.13517905-.41077543-.06070432-.8250115-.09508601-1.24017246-.10293454-.76375012-.01441855-1.52604905.07231982-2.26703535.2579561-.50273314.13067111-.99001049.31485561-1.45348204.5493962-.47126568.2579561-.91772734.57543971-1.28481898.96237386-.22622016.22823196-.4255346.4816405-.59404272.75526528-.09673354.14882055-.17486406.29764111-.25175509.45266266-.03753719.07754153-.06985385.15750409-.09673354.23935309l-.05208702.12277705c-.00516494.02191581-.01179409.04346025-.0198425.06448902l-.11037504-.0198425-.13517905-.01240201c.38817364-1.19552594,1.26001497-2.13185629,2.34516587-2.73210002.34228763-.18726607.70441776-.35468964,1.0727489-.45886367l-.00000118.00496151Zm-6.49726393.61388523c.43902117-.63248824,1.13723792-1.0727489,1.8863022-1.23397146.8271948-.16122256,1.67919363-.19346678,2.51879044-.17486436-.86564032.21951058-1.73748165.54319549-2.46050242,1.0789502-.56594483.12955226-1.09433828.38801929-1.54401457.75526528-.14516831.12120698-.28113388.2530277-.40677665.39437464-.0588983.06001006-.11281735.12471257-.16122256.19346707-.0198425.0198425-.04464652.04464593-.05828802.07813112h-.14261955c.03844552-.21951058.09053253-.44522217.16122256-.65853175.05208702-.14882055.11037504-.29764111.19966808-.43282016l.0074405-.00000059Zm1.45348204.09673354c-.23729515.23928035-.45347638.49861373-.64612974.77510779-.07813052.11037563-.16122256.25175509-.29764111.31004312-.14261955.06448902-.32244512-.006201-.46506467-.04464593.37108569-.46297185.85614544-.82153135,1.40759603-1.04050497h.00123949ZM3.81181355,9.56917155c.12897805-.26539659.2976414-.52335269.45266296-.76890678.02604351-.04464652.09053253-.07813052.12277705-.10293454.08433182-.05828802.16122227-.11657604.23935338-.18106507.5097106-.36833114,1.02686288-.73666227,1.55021558-1.0789499.2777986-.18106507.5493962-.35468964.83339581-.50971119.29764111-.16742357.60768481-.29764111.93012935-.40677665.57867031-.17905976,1.17035173-.31298572,1.76972616-.40057565.28399902-.03844552.59404213-.09673354.87804174-.02604351-.5493962.31004312-1.09135191.62008623-1.64074811.92392834-.56179821.31624412-1.13723792.60768422-1.71143814.91028684-.5493962.29764111-1.09135191.62008623-1.62090561.95617285-.55559721.34228763-1.1049937.69077626-1.65314982,1.04050438-.13517876.08433153-.26539689.17486406-.40057565.2579561.07813082-.20710857.14882055-.42041815.25175509-.61388523h-.00123979Zm1.66679162,5.05122238c-.04464593.09053253-.21951058.07069003-.31004312.07069003-.15502156,0-.30384211,0-.45886367.006201-.42560113.02528184-.8463806.10360514-1.25257417.23315208-.7875095.23935309-1.52417192.62008623-2.26083434.99461837-.16122241.09053253-.33608677.22571159-.52335277.2715976-.10319415.02663487-.21197917-.01459359-.27159775-.10293454-.05594793-.10200492-.09094479-.2141635-.10293432-.32988562-.04154617-.19982775-.06109201-.40360223-.05828809-.60768422,0-.5493962.12897794-1.09135191.35468934-1.58866109.16122241-.34848863.36833121-.66473275.61388537-.94997185.25175502-.29020061.54319557-.58164071.89168405-.74286328.58784172-.2715976,1.28481869-.35468964,1.92474772-.38817364.12277705-.01240201.23935338-.01240201.36213043-.01240201.16122256,0,.35468934-.02604351.5097109.03224451.12277734.04464652.19966778.17486406.2517548.28399961.07069003.17486406.12277705.37453214.16122256.55559721.10293454.43282016.20710857.86564032.23935309,1.31086249.0198425.19346707.03224451.39437464.006201.58784172-.01240201.12277705-.0198425.2579561-.07813112.37453214l.00124008.00123949Zm4.67669024-3.26785472c-.32191467.20096789-.6640036.36764871-1.02066188.49730919-.35418402.1315481-.71942294.2311592-1.09135191.29764111-.16122256.0198425-.32244512.04464652-.48490718.03224451-.16742357,0-.31624412-.05828802-.48490718-.11037504-.32637412-.09433498-.64220606-.22191387-.94253135-.38073314-.11292439-.06073625-.21015763-.14693057-.28399961-.25175509-.04557969-.08727414-.05918097-.18774744-.03844552-.28399961.0198425-.38073314.15502156-.75526528.33608662-1.09135191.31004312-.56799921.79495029-1.01446088,1.38899302-1.28481898,1.45348204-.65233074,3.08058865-.04464652,4.31456011.81355331l.13517905.09673354c-.2579561.2777986-.51715169.5357547-.78130879.79495029-.32988562.31004312-.67217325.62628724-1.05290639.87184133l.006201-.00123949Zm3.57789784-3.18476268c-.78077184-.34143075-1.53056113-.74972779-2.24099184-1.22032996.74286328.31004312,1.54401457.49730919,2.33772537.61388523.42661916.05828802.86564032.11657604,1.29225948.12897805.46506467.0198425.93633035-.03224451,1.38899302-.12277705.90408584-.16742357,1.76972616-.50351019,2.59071996-.91028684.82099498-.40677665,1.59486092-.88548283,2.33772537-1.42123753.35468845-.25175509.71061876-.51715169,1.04670539-.8011513.03224333-.02604351.28399961-.2715976.30384329-.2579561l.06448902.05208702.89168383.69077626c.5431952.42041815,1.0851509.83959681,1.63454829,1.26001497-1.50363058.54005862-3.02220601,1.03756828-4.55391438,1.49192756-.8594405.2579561-1.71143814.49730919-2.58327947.69821735-.68457526.16122256-1.38279201.31004252-2.07976928.34228704-.83959681.03844552-1.66059061-.21951058-2.42825791-.54319579l-.00248017-.0012389Zm14.63031445,6.51710643c.12897805.03224451.24555409.07813052.35468845.11037504l.16122138.05828802c.02604351.006201.04464534.02604351.07068885.03224451l.03224333.09673354c.07813052.24555409.14882174.47746668.23315208.71681977-.24555409-.21330958-.497308-.42041815-.74286209-.62628724l-.14882174-.12277705c-.03844552-.02604351-.07813052-.03844552-.05208702-.07813052l.09673235-.18726607h-.0049556Zm-1.10499459,2.38361139l.0582892-.10293454.04464534-.07069003c.01984369-.03224451.01240201-.03844552.05208702-.0198425.21331076.08433153.42661916.18106507.63248824.2777986.40057565.18106507.7875098.38073314,1.16328143.60024373.18106507.11037504.36213013.22571159.53575352.34228763l.24555409.17486406.12277823.09053253c.05208702.04464652.07068885.10293454.09673235.16742238.16742357.46506467.36213013.93632917.55559721,1.39519402.12897805.31624294.2715976.62628605.41297766.93632917-.49014545-.60819752-1.01871039-1.18440245-1.58245891-1.72508082-.56908259-.56757817-1.16417557-1.10845996-1.78336766-1.62090561l-.53575352-.43902117-.0186042-.00619746Zm6.21450381,10.62579745l-.1996669.14882174.01240201.02604351.10293454.15502156.45266266.69077508,1.49192637,2.31912354c.51715169.79495148,1.0268617,1.59486092,1.54401576,2.38981239l.50971001.79495148.13517787.21951058c.02113995.02331852.03869389.04964825.05208702.07813052-.43282134.63248824-.86564032,1.27241579-1.29846167,1.90490403-.04464534.0582892-.08433271.12277823-.12277823.18106507-.39437583-.61388641-.7875098-1.22777045-1.18188326-1.84785668-.65853175-1.04670539-1.31086131-2.11201261-1.95699105-3.16492018-.7160782-1.16891354-1.41396616-2.3488737-2.09341078-3.53945232-.63248824-1.11739423-1.24017246-2.25463452-1.74988247-3.43651778-.4903607-1.15152755-.93632207-2.32145824-1.33690482-3.50720899.8011513.32244512,1.62090442.60768422,2.44810159.86564032.23935427.07068885.47746668.14882174.71681859.20710857l.10293454.03224333c.01240201,0,.02604351-.06448902.03224333-.08433271.03224333-.10293454.05208702-.21331076.07813052-.32244512.04464534-.20710857.08433271-.42041934.11657604-.62628605.34228645.70441894.72302077,1.39519402,1.16328143,2.04132376.35468845.52335388.73666227,1.0268617,1.13723792,1.52417207.8640815,1.08055958,1.76924361,2.12762215,2.71349701,3.13887667.76890797.81355331,1.54401576,1.6283461,2.33152319,2.42205572l.63992992.63992992c.01240201.01240201.06448902.05208702.06448902.07068885l-.05208702.08433271-.24555409.45886485-.97477468,1.76352634c-.29764111-.36213013-.59404272-.71681859-.89168383-1.0851509l-1.86025869-2.25463452c-.52335388-.63992992-1.05290757-1.27861798-1.57625909-1.9185479l-.31004312-.36833232.00496033-.00123713Z'/>
+	</svg>"""
 
 out: {
 	ingress: {
 		gerrit: {
 			auth: enabled: false
-			network: input.network
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "gerrit-gerrit-service"
@@ -46,9 +46,9 @@
 	}
 
 	openPort: [{
-		name: "ssh"
+		name:    "ssh"
 		network: input.network
-		port: input.sshPort
+		port:    input.sshPort
 		service: {
 			name: "gerrit-gerrit-service"
 			port: _sshPort
@@ -59,20 +59,20 @@
 	images: {
 		gerrit: {
 			repository: "k8sgerrit"
-			name: "gerrit"
-			tag: _version
+			name:       "gerrit"
+			tag:        _version
 			pullPolicy: "Always"
 		}
 		gerritInit: {
 			repository: "k8sgerrit"
-			name: "gerrit-init"
-			tag: _version
+			name:       "gerrit-init"
+			tag:        _version
 			pullPolicy: "Always"
 		}
 		gitGC: {
 			repository: "k8sgerrit"
-			name: "git-gc"
-			tag: _version
+			name:       "git-gc"
+			tag:        _version
 			pullPolicy: "Always"
 		}
 	}
@@ -80,61 +80,61 @@
 
 	charts: {
 		ingress: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/ingress"
+			branch:  "main"
+			path:    "charts/ingress"
 		}
 		gerrit: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/gerrit"
+			branch:  "main"
+			path:    "charts/gerrit"
 		}
 		oauth2Client: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/oauth2-client"
+			branch:  "main"
+			path:    "charts/oauth2-client"
 		}
 		resourceRenderer: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/resource-renderer"
+			branch:  "main"
+			path:    "charts/resource-renderer"
 		}
 	}
 
 	volume: {
 		git: {
 			accessMode: "ReadWriteMany"
-			size: "50Gi"
+			size:       "50Gi"
 		}
 		logs: {
 			accessMode: "ReadWriteMany"
-			size: "5Gi"
+			size:       "5Gi"
 		}
 	}
 
 	helm: {
 		"oauth2-client": {
 			chart: charts.oauth2Client
-			info: "Creating OAuth2 client"
+			info:  "Creating OAuth2 client"
 			values: {
-				name: "\(release.namespace)-gerrit"
+				name:       "\(release.namespace)-gerrit"
 				secretName: _oauth2ClientCredentials
 				grantTypes: ["authorization_code"]
-				scope: "openid profile email"
+				scope:      "openid profile email"
 				hydraAdmin: "http://hydra-admin.\(global.id)-core-auth.svc.cluster.local"
 				redirectUris: ["https://\(_domain)/oauth"]
 			}
 		}
 		"config-renderer": {
 			chart: charts.resourceRenderer
-			info: "Generating Gerrit configuration"
+			info:  "Generating Gerrit configuration"
 			values: {
-				name: "config-renderer"
-				secretName: _oauth2ClientCredentials
+				name:             "config-renderer"
+				secretName:       _oauth2ClientCredentials
 				resourceTemplate: """
 apiVersion: v1
 kind: ConfigMap
@@ -210,12 +210,12 @@
 		}
 		gerrit: {
 			chart: charts.gerrit
-			info: "Installing Gerrit server"
+			info:  "Installing Gerrit server"
 			values: {
 				images: {
 					busybox: {
 						registry: _dockerIO
-						tag: "latest"
+						tag:      "latest"
 					}
 					registry: {
 						name: _dockerIO
@@ -226,34 +226,34 @@
 				}
 				storageClasses: {
 					default: {
-						name: _longhorn
+						name:   _longhorn
 						create: false
 					}
 					shared: {
-						name: _longhorn
+						name:   _longhorn
 						create: false
 					}
 				}
 				persistence: {
 					enabled: true
-					size: "10Gi"
+					size:    "10Gi"
 				}
 				nfsWorkaround: {
-					enabled: false
+					enabled:        false
 					chownOnStartup: false
-					idDomain: _domain
+					idDomain:       _domain
 				}
 				networkPolicies: enabled: false
 				gitRepositoryStorage: {
 					externalPVC: {
-						use: true
+						use:  true
 						name: volume.git.name
 					}
 				}
 				logStorage: {
 					enabled: true
 					externalPVC: {
-						use: true
+						use:  true
 						name: volume.logs.name
 					}
 				}
@@ -265,10 +265,10 @@
 				gerrit: {
 					images: {
 						gerritInit: _images.gerritInit.imageName
-						gerrit: _images.gerrit.imageName
+						gerrit:     _images.gerrit.imageName
 					}
 					service: {
-						type: "LoadBalancer"
+						type:                  "LoadBalancer"
 						externalTrafficPolicy: ""
 						additionalAnnotations: {
 							"metallb.universe.tf/address-pool": global.id
@@ -276,7 +276,7 @@
 						http: port: _httpPort
 						ssh: {
 							enabled: true
-							port: _sshPort
+							port:    _sshPort
 						}
 					}
 					pluginManagement: {
@@ -292,13 +292,13 @@
 							name: "reviewnotes"
 						}, {
 							name: "oauth"
-							url: "https://drive.google.com/uc?export=download&id=1rSUpZCAVvHZTmRgUl4enrsAM73gndjeP"
+							url:  "https://drive.google.com/uc?export=download&id=1rSUpZCAVvHZTmRgUl4enrsAM73gndjeP"
 							sha1: "cbdc5228a18b051a6e048a8e783e556394cc5db1"
 						}, {
 							name: "webhooks"
 						}, {
 							name: "serviceuser"
-							url: "https://drive.google.com/uc?export=download&id=110opG25oyvzODzYWXBK2zQV-444Ut2cA"
+							url:  "https://drive.google.com/uc?export=download&id=110opG25oyvzODzYWXBK2zQV-444Ut2cA"
 							sha1: "c8946747d9dac322e1cd2acf49c899e87355ebb3"
 						}]
 						libs: []
@@ -306,7 +306,7 @@
 					}
 					etc: {
 						secret: {
-							ssh_host_ecdsa_key: input.key.private
+							ssh_host_ecdsa_key:       input.key.private
 							"ssh_host_ecdsa_key.pub": input.key.public
 						}
 						existingConfigMapName: _gerritConfigMapName
@@ -318,12 +318,12 @@
 }
 
 _dockerIO: "docker.io"
-_version: "v0.1-728-g77fe419cb2-3.10.0"
+_version:  "v0.1-728-g77fe419cb2-3.10.0"
 
 _longhorn: "longhorn"
 
 _httpPort: 80
-_sshPort: 22
+_sshPort:  22
 
 _oauth2ClientCredentials: "gerrit-oauth2-credentials"
-_gerritConfigMapName: "gerrit-config"
+_gerritConfigMapName:     "gerrit-config"
diff --git a/core/installer/values-tmpl/headscale-controller.cue b/core/installer/values-tmpl/headscale-controller.cue
index 7d61ac2..886f318 100644
--- a/core/installer/values-tmpl/headscale-controller.cue
+++ b/core/installer/values-tmpl/headscale-controller.cue
@@ -1,31 +1,31 @@
 input: {}
 
-name: "headscale-controller"
+name:      "headscale-controller"
 namespace: "core-headscale"
 
 out: {
 	images: {
 		headscaleController: {
 			repository: "giolekva"
-			name: "headscale-controller"
-			tag: "latest"
+			name:       "headscale-controller"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 		kubeRBACProxy: {
-			registry: "gcr.io"
+			registry:   "gcr.io"
 			repository: "kubebuilder"
-			name: "kube-rbac-proxy"
-			tag: "v0.13.0"
+			name:       "kube-rbac-proxy"
+			tag:        "v0.13.0"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		headscaleController: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/headscale-controller"
+			branch:  "main"
+			path:    "charts/headscale-controller"
 		}
 	}
 
@@ -36,13 +36,13 @@
 				installCRDs: true
 				image: {
 					repository: images.headscaleController.fullName
-					tag: images.headscaleController.tag
+					tag:        images.headscaleController.tag
 					pullPolicy: images.headscaleController.pullPolicy
 				}
 				kubeRBACProxy: {
 					image: {
 						repository: images.kubeRBACProxy.fullName
-						tag: images.kubeRBACProxy.tag
+						tag:        images.kubeRBACProxy.tag
 						pullPolicy: images.kubeRBACProxy.pullPolicy
 					}
 				}
diff --git a/core/installer/values-tmpl/headscale-user.cue b/core/installer/values-tmpl/headscale-user.cue
index 036d0a3..dbc0b68 100644
--- a/core/installer/values-tmpl/headscale-user.cue
+++ b/core/installer/values-tmpl/headscale-user.cue
@@ -5,16 +5,16 @@
 	}
 }
 
-name: "headscale-user"
+name:      "headscale-user"
 namespace: "app-headscale"
 
 out: {
 	charts: {
 		headscaleUser: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/headscale-user"
+			branch:  "main"
+			path:    "charts/headscale-user"
 		}
 	}
 
@@ -22,10 +22,10 @@
 		"headscale-user-\(input.username)": {
 			chart: charts.headscaleUser
 			values: {
-				username: input.username
+				username:            input.username
 				headscaleApiAddress: "http://headscale-api.\(global.namespacePrefix)app-headscale.svc.cluster.local"
 				preAuthKey: {
-					enabled: input.preAuthKey.enabled
+					enabled:    input.preAuthKey.enabled
 					secretName: "\(input.username)-headscale-preauthkey"
 				}
 			}
diff --git a/core/installer/values-tmpl/headscale.cue b/core/installer/values-tmpl/headscale.cue
index c28926e..9bb2395 100644
--- a/core/installer/values-tmpl/headscale.cue
+++ b/core/installer/values-tmpl/headscale.cue
@@ -1,44 +1,44 @@
 input: {
-	network: #Network
+	network:   #Network
 	subdomain: string
-	ipSubnet: string
+	ipSubnet:  string
 }
 
-name: "headscale"
+name:      "headscale"
 namespace: "app-headscale"
-icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><circle cx='24' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/></svg>"
+icon:      "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><circle cx='24' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/></svg>"
 
-_domain: "\(input.subdomain).\(input.network.domain)"
+_domain:                 "\(input.subdomain).\(input.network.domain)"
 _oauth2ClientSecretName: "oauth2-client"
 
 out: {
 	images: {
 		headscale: {
 			repository: "headscale"
-			name: "headscale"
-			tag: "0.25.1"
+			name:       "headscale"
+			tag:        "0.25.1"
 			pullPolicy: "IfNotPresent"
 		}
 		api: {
 			repository: "giolekva"
-			name: "headscale-api"
-			tag: "latest"
+			name:       "headscale-api"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		oauth2Client: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/oauth2-client"
+			branch:  "main"
+			path:    "charts/oauth2-client"
 		}
 		headscale: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/headscale"
+			branch:  "main"
+			path:    "charts/headscale"
 		}
 	}
 
@@ -47,11 +47,11 @@
 			chart: charts.oauth2Client
 			// TODO(gio): remove once hydra maester is installed as part of dodo itself
 			dependsOn: [{
-				name: "auth"
+				name:      "auth"
 				namespace: "\(global.namespacePrefix)core-auth"
 			}]
 			values: {
-				name: "\(release.namespace)-headscale"
+				name:       "\(release.namespace)-headscale"
 				secretName: _oauth2ClientSecretName
 				grantTypes: ["authorization_code"]
 				responseTypes: ["code"]
@@ -63,33 +63,33 @@
 		headscale: {
 			chart: charts.headscale
 			dependsOn: [{
-				name: "auth"
+				name:      "auth"
 				namespace: "\(global.namespacePrefix)core-auth"
 			}]
 			values: {
 				image: {
 					repository: images.headscale.fullName
-					tag: images.headscale.tag
+					tag:        images.headscale.tag
 					pullPolicy: images.headscale.pullPolicy
 				}
 				storage: size: "5Gi"
-				ingressClassName: input.network.ingressClass
+				ingressClassName:  input.network.ingressClass
 				certificateIssuer: input.network.certificateIssuer
-				domain: _domain
-				publicBaseDomain: input.network.domain
-				ipAddressPool: "\(global.id)-headscale"
+				domain:            _domain
+				publicBaseDomain:  input.network.domain
+				ipAddressPool:     "\(global.id)-headscale"
 				oauth2: {
 					secretName: _oauth2ClientSecretName
-					issuer: "https://hydra.\(input.network.domain)"
+					issuer:     "https://hydra.\(input.network.domain)"
 				}
 				api: {
-					port: 8585
-					ipSubnet: input.ipSubnet
-					self: "http://headscale-api.\(release.namespace).svc.cluster"
+					port:           8585
+					ipSubnet:       input.ipSubnet
+					self:           "http://headscale-api.\(release.namespace).svc.cluster"
 					fetchUsersAddr: "http://memberships-api.\(global.namespacePrefix)core-auth-memberships.svc.cluster.local/api/users"
 					image: {
 						repository: images.api.fullName
-						tag: images.api.tag
+						tag:        images.api.tag
 						pullPolicy: images.api.pullPolicy
 					}
 				}
@@ -100,31 +100,31 @@
 }
 
 help: [{
-	title: "Install"
+	title:    "Install"
 	contents: """
 	You can install Tailscale client on any of your personal devices running: macOS, iOS, Windows, Lonux or Android. Installer packages can be found at: [https://tailscale.com/download](https://tailscale.com/download). After installing the client application you need to configure it to use https://\(_domain) as a login URL, so you can login to the VPN network with your dodo: account. See "Configure Login URL" section below for more details.
 	"""
 	children: [{
-		title: "Widnows with MSI"
+		title:    "Widnows with MSI"
 		contents: "[https://tailscale.com/kb/1189/install-windows-msi](https://tailscale.com/kb/1189/install-windows-msi)"
 	}]
 }, {
-	title: "Configure Login URL"
+	title:    "Configure Login URL"
 	contents: "After installing the client application you need to configure it to use https://\(_domain) as a login URL, so you can login to the VPN network with your dodo: account"
 	children: [{
-		title: "macOS"
+		title:    "macOS"
 		contents: "[https://headscale.\(input.network.domain)/apple](https://headscale.\(input.network.domain)/apple)"
 	}, {
-		title: "iOS"
+		title:    "iOS"
 		contents: "[https://headscale.\(input.network.domain)/apple](https://headscale.\(input.network.domain)/apple)"
 	}, {
-		title: "Windows"
+		title:    "Windows"
 		contents: "[https://tailscale.com/kb/1318/windows-mdm](https://tailscale.com/kb/1318/windows-mdm)"
 	}, {
-		title: "Linux"
+		title:    "Linux"
 		contents: "tailscale up --login-server https://\(_domain)"
 	}, {
-		title: "Android"
+		title:    "Android"
 		contents: """
 		After opening the app, the kebab menu icon (three dots) on the top bar on the right must be repeatedly opened and closed until the Change server option appears in the menu. This is where you can enter your headscale URL: https://\(_domain)
 
@@ -133,7 +133,7 @@
 		After saving and restarting the app, selecting the regular Sign in option should open up the dodo: authentication page.
 		"""
 	}, {
-		title: "Command Line"
+		title:    "Command Line"
 		contents: "tailscale up --login-server https://\(_domain)"
 	}]
 }]
diff --git a/core/installer/values-tmpl/hydra-maester.cue b/core/installer/values-tmpl/hydra-maester.cue
index 22ba9b5..4a50d6f 100644
--- a/core/installer/values-tmpl/hydra-maester.cue
+++ b/core/installer/values-tmpl/hydra-maester.cue
@@ -1,24 +1,24 @@
 input: {}
 
-name: "hydra-maester"
+name:      "hydra-maester"
 namespace: "auth"
 
 out: {
 	images: {
 		hydraMaester: {
 			repository: "giolekva"
-			name: "ory-hydra-maester"
-			tag: "latest"
+			name:       "ory-hydra-maester"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		hydraMaester: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/hydra-maester"
+			branch:  "main"
+			path:    "charts/hydra-maester"
 		}
 	}
 
@@ -27,13 +27,13 @@
 			chart: charts.hydraMaester
 			values: {
 				adminService: {
-					name: "foo.bar.svc.cluster.local"
-					port: 80
+					name:   "foo.bar.svc.cluster.local"
+					port:   80
 					scheme: "http"
 				}
 				image: {
 					repository: images.hydraMaester.fullName
-					tag: images.hydraMaester.tag
+					tag:        images.hydraMaester.tag
 					pullPolicy: images.hydraMaester.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/ingress-public.cue b/core/installer/values-tmpl/ingress-public.cue
index 119dd44..3cc7d1e 100644
--- a/core/installer/values-tmpl/ingress-public.cue
+++ b/core/installer/values-tmpl/ingress-public.cue
@@ -3,42 +3,42 @@
 )
 
 input: {
-	sshPrivateKey: string
+	sshPrivateKey:          string
 	controllerReplicaCount: int | *3
 }
 
-name: "ingress-public"
+name:      "ingress-public"
 namespace: "ingress-public"
 
 out: {
 	images: {
 		ingressNginx: {
-			registry: "registry.k8s.io"
+			registry:   "registry.k8s.io"
 			repository: "ingress-nginx"
-			name: "controller"
-			tag: "v1.8.0"
+			name:       "controller"
+			tag:        "v1.8.0"
 			pullPolicy: "IfNotPresent"
 		}
 		portAllocator: {
 			repository: "giolekva"
-			name: "port-allocator"
-			tag: "latest"
+			name:       "port-allocator"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		ingressNginx: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/ingress-nginx"
+			branch:  "main"
+			path:    "charts/ingress-nginx"
 		}
 		portAllocator: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/port-allocator"
+			branch:  "main"
+			path:    "charts/port-allocator"
 		}
 	}
 
@@ -48,7 +48,7 @@
 			values: {
 				fullnameOverride: "\(global.pcloudEnvName)-ingress-public"
 				controller: {
-					kind: "Deployment"
+					kind:         "Deployment"
 					replicaCount: input.controllerReplicaCount
 					topologySpreadConstraints: [{
 						labelSelector: {
@@ -56,8 +56,8 @@
 								"app.kubernetes.io/instance": "ingress-public"
 							}
 						}
-						maxSkew: 1
-						topologyKey: "kubernetes.io/hostname"
+						maxSkew:           1
+						topologyKey:       "kubernetes.io/hostname"
 						whenUnsatisfiable: "DoNotSchedule"
 					}]
 					hostNetwork: false
@@ -65,15 +65,15 @@
 					updateStrategy: {
 						type: "RollingUpdate"
 						rollingUpdate: {
-							maxSurge: "50%"
+							maxSurge:       "50%"
 							maxUnavailable: "30%"
 						}
 					}
 					service: {
 						enabled: true
-						type: "NodePort"
+						type:    "NodePort"
 						nodePorts: {
-							http: 80
+							http:  80
 							https: 443
 							tcp: {
 								"53": 53
@@ -85,9 +85,9 @@
 					}
 					ingressClassByName: true
 					ingressClassResource: {
-						name: networks.public.ingressClass
-						enabled: true
-						default: false
+						name:            networks.public.ingressClass
+						enabled:         true
+						default:         false
 						controllerValue: "k8s.io/\(networks.public.ingressClass)"
 					}
 					config: {
@@ -97,9 +97,9 @@
 						"""
 					}
 					image: {
-						registry: images.ingressNginx.registry
-						image: images.ingressNginx.imageName
-						tag: images.ingressNginx.tag
+						registry:   images.ingressNginx.registry
+						image:      images.ingressNginx.imageName
+						tag:        images.ingressNginx.tag
 						pullPolicy: images.ingressNginx.pullPolicy
 					}
 				}
@@ -114,12 +114,12 @@
 		"port-allocator": {
 			chart: charts.portAllocator
 			values: {
-				repoAddr: release.repoAddr
-				sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
+				repoAddr:         release.repoAddr
+				sshPrivateKey:    base64.Encode(null, input.sshPrivateKey)
 				ingressNginxPath: "\(release.appDir)/ingress-public.yaml"
 				image: {
 					repository: images.portAllocator.fullName
-					tag: images.portAllocator.tag
+					tag:        images.portAllocator.tag
 					pullPolicy: images.portAllocator.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/jellyfin.cue b/core/installer/values-tmpl/jellyfin.cue
index 3fecee0..982eb69 100644
--- a/core/installer/values-tmpl/jellyfin.cue
+++ b/core/installer/values-tmpl/jellyfin.cue
@@ -1,15 +1,15 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "Jellyfin"
-namespace: "app-jellyfin"
+name:        "Jellyfin"
+namespace:   "app-jellyfin"
 description: "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices."
-icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M24 20c-1.62 0-6.85 9.48-6.06 11.08s11.33 1.59 12.12 0S25.63 20 24 20Z'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M24 5.5c-4.89 0-20.66 28.58-18.25 33.4s34.13 4.77 36.51 0S28.9 5.5 24 5.5Zm12 29.21c-1.56 3.13-22.35 3.17-23.93 0S20.8 12.83 24 12.83s13.52 18.76 12 21.88Z'/></svg>"
+icon:        "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M24 20c-1.62 0-6.85 9.48-6.06 11.08s11.33 1.59 12.12 0S25.63 20 24 20Z'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M24 5.5c-4.89 0-20.66 28.58-18.25 33.4s34.13 4.77 36.51 0S28.9 5.5 24 5.5Zm12 29.21c-1.56 3.13-22.35 3.17-23.93 0S20.8 12.83 24 12.83s13.52 18.76 12 21.88Z'/></svg>"
 
 readme: "jellyfin application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
 
@@ -17,18 +17,18 @@
 	images: {
 		jellyfin: {
 			repository: "jellyfin"
-			name: "jellyfin"
-			tag: "10.8.10"
+			name:       "jellyfin"
+			tag:        "10.8.10"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		jellyfin: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/jellyfin"
+			branch:  "main"
+			path:    "charts/jellyfin"
 		}
 	}
 
@@ -39,11 +39,11 @@
 				pcloudInstanceId: global.id
 				ingress: {
 					className: input.network.ingressClass
-					domain: _domain
+					domain:    _domain
 				}
 				image: {
 					repository: images.jellyfin.fullName
-					tag: images.jellyfin.tag
+					tag:        images.jellyfin.tag
 					pullPolicy: images.jellyfin.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/jenkins.cue b/core/installer/values-tmpl/jenkins.cue
index 5d4110e..753a8dc 100644
--- a/core/installer/values-tmpl/jenkins.cue
+++ b/core/installer/values-tmpl/jenkins.cue
@@ -1,34 +1,34 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "Jenkins"
-namespace: "app-jenkins"
-readme: "Jenkins CI/CD"
+name:        "Jenkins"
+namespace:   "app-jenkins"
+readme:      "Jenkins CI/CD"
 description: "Build great things at any scale. The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project."
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 35.98188688 39.68503937'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-11.82596649' y='-9.97439025' width='59.63381987' height='59.63381987'/>
-  <path class='cls-1' d='m2.89767408,39.68503937h-1.61221736c-.04151253-.10751988-.08010966-.21614364-.11574902-.32575141-.35551464-1.10126905-.98221237-2.46379839-1.14426076-3.56175899-.24141925-1.62709809,1.28977381-1.71804418,2.27198598-2.42246012,1.51300388-1.09134685,2.7035648-1.6948945,4.34389196-2.67876247.48779921-.29598798,1.95450372-1.03181999,2.11820575-1.37079889.33236515-.67464935-.57047655-1.62379279-.81024217-2.14962183-.37204999-.83835295-.57047655-1.54938263-.62173702-2.3728523-1.36253013-.2149625-2.40592418-1.03677951-3.04915745-1.95946324-1.04174061-1.52953982-1.76269091-4.35712102-.86811717-6.50839708.07441016-.17031577.4200032-.50433515.47126367-.76559702.09921328-.50929467-.17362343-1.19056092-.19842656-1.73292748-.09921328-2.79781698.46960983-5.20870226,2.35631754-6.05201552.76559623-3.0425437,3.49396416-4.05617353,6.07351256-5.56752397.95906248-.56551624,2.02395278-.92929856,3.12522183-1.33441984,3.92223493-1.45016876,9.96598406-1.17733205,13.21852758,1.29473461,1.38237373,1.04670112,3.59813932,3.25750581,4.39184555,4.85980156,2.08678651,4.22483586,1.93466091,11.28552011.47457172,16.42642833-.19842813.69614639-.47953282,1.70646934-.88134388,2.53490168-.27779623.57874373-1.13929887,1.73623435-1.03347264,2.24883589.10582624.51921529,1.96773279,1.93466091,2.3678912,2.30671169.71764343.69780219,2.08348122,1.61221795,2.18930745,2.48033433.11574843.9210295-.41008061,2.20915184-.6779578,3.10041792-.35882014,1.19221515-.72095188,2.38277449-1.08142466,3.52372917H2.89436681l.00330727.02645498Zm18.36108805-5.85359054c-1.07265206-.57801045-2.22250865-.99953028-3.41459448-1.25174201-1.43859372-.27118249-1.28977341,1.96442434-1.24016717,3.29719025.04960625,1.06323607.59527967,2.17607996.84331405,2.88380119.12567063.32575141.14882031.6779578.42330967.74244576.49606718.11244314,2.13308746-.53905968,2.60435073-.79205358.99213436-.54236498,1.75938404-1.39560122,2.60269809-1.96607699.02645656-.28110468.02645656-.56220937.04960625-.8400056-.56358289-.28112045-1.18117962-.43735245-1.81064451-.45803578.51921687-.2480328,1.24016717-.2480328,1.71143044-.54898188l.02645656-.31913766c-.82016437-.04960782-1.1409531-.4200028-1.68828075-.72095188l-.10747888-.02645183Zm12.32560886,4.85318663c.30539293-.95197565.56202644-1.91891029.7689039-2.89703184.09921249-.47457172.35551484-1.5179634.29433217-1.9445831-.09755984-.7589817-1.13103248-1.32119107-1.66016997-1.79576279-.96567623-.86811639-1.57087967-1.61221795-2.57954682-2.42907386-.41173641.62008358-1.28977499,1.0169367-1.62544544,1.51134966,2.39269669-1.13929887,2.82757963,4.34058508,1.88670889,6.10162334.14882031.54402078.64654172.74410156.8499278,1.21536483l-.14220657.27449094h2.13308904c.02149704,0,.04960782,0,.07275751.02314969l.00164949-.05952686Zm-10.96969169-.01984124c-.08267813-.12236218-.16535625-.22323047-.2480328-.34559264l-.49771983.32244296h.74409998l.00165265.02314969Zm4.58034992,0c.01322749-.34559264.02976343-.6680356.04960782-.98882591-.87638593.04795202-1.36418514-.79370623-1.97765183-.87142484-.53575123-.07441016-.99213436.5969339-1.6866281.32244296-.15708828.17362265-.30260015.37535608-.46961062.52252374.25464813.29764062.48779921.62008358.70110749.96567623h1.3476492c.01156223-.26499767.23082193-.47329439.49606561-.47126327.27283829,0,.46961062.20008078.46961062.44646094h1.09134685l-.02149704.07441016Zm3.49892368,0c-.51921529-.79205358-1.56591858-1.48489467-2.77797496-.91772421l-.04960782.89457452h2.82758278v.02314969Zm-14.07176383,0l-.17197-.56882311c-.37205078-1.19055934-.59527967-2.08348122-.66968983-2.77797496-1.51134966-.72095188-3.10041792-1.4385953-4.38853868-2.35797216-.24803359-.17362265-1.83379419-2.23230153-2.03387419-2.15789137-2.87553401,1.11780499-5.5542953,3.07561558-7.96021987,4.93421053.42331046.9210295.79370702,1.88670889,1.14095389,2.87718745h14.06349586l.01984281.05126362Zm13.66664432-3.49396258c-.04795202-.84661935-.27118249-2.57954682-.79370623-2.87718745-1.09134685-.64488592-3.0524659,1.28977499-3.86932181,1.55930483.07441016.2480328.22323047.44811358.2480328.79370623.47126327-.12236218,1.06654452-.04795202,1.48489467.15212561-.49441296.04960782-1.04008638.04960782-1.36252934.27118249-.12236218.32244296.02645814.79370623-.04795202,1.26331685,1.14095468.32575141,2.48033433.5010267,3.94373197.54898188.27118249-.37535608.37205078-1.06654452.34890109-1.78914904l.04794887.07771861Zm-6.74650926-.59528125c-.07275593.62008358.0760628.84331405.19842656,1.55930483,2.08347964.64654172,1.70977621-2.87718745-.22323047-1.58575981l.02480391.02645498Zm-10.9085106-2.33151402c-.74409998.7556764,2.10001716,1.78914904,2.9995512,1.84371481,0-.47953282.27283671-.93260435.22323047-1.27323905-1.07481091-.19511968-2.48364121-.06944906-3.21616635-.57378421l-.00661532.00330845Zm9.20204126.35551484c0,.07110171-.10086672.04960782-.11244156.10582624.95906248.74575421,1.67670591.90118827,2.97970997.84331405.58535905-.43323029,1.1078828-.9309517,1.72465793-1.33441856-1.41378981.12236218-3.19301666,1.00370921-4.58696524.38031717l-.0049611.0049611ZM27.49101719,3.28861389c-2.65561278-1.49812197-7.1929702-2.63080789-10.04700796-1.20874951-2.28190778,1.14426076-5.4071296,3.0425437-6.44721599,5.44350678.99213436,2.31828574-.27449015,4.4414518-.37370343,6.79446286-.02976422,1.25174201.59528046,2.34804996.64654014,3.70727401-.33071093.5589025-1.36418357.62835155-2.08348122.58866593-.24141906-1.20544264-.66142265-2.56135824-1.909857-2.69529683-1.75938404-.19181281-3.05081128,1.26331685-3.12522104,2.78293448-.09921328,1.78584059,1.37741264,4.73578555,3.44766479,4.53901164.8069353-.0760628,1.00536186-.8929203,1.88340044-.8929203.47126327.94252654-.7358328,1.24016717-.8648103,1.90820435-.02645656.17362265.09921328.8449667.17197,1.16575701.38527827,1.56095748,1.23024576,3.57168119,2.05867731,4.76224369,1.05000858,1.48819997,3.11529963,1.73788857,5.33933319,1.88670889.39685311-.86811639,1.86025075-.79370623,2.82096746-.57213156-1.14260732-.44646094-2.20915027-1.56261013-3.10041792-2.52828635-1.0169367-1.11780499-2.03387497-2.33151402-2.08513387-3.77010775,1.909857,2.65230276,3.47246712,4.96066709,6.94493582,6.12477145,2.62915465.86811639,5.70477023-.4200028,7.71218549-1.83379261.84331405-.59362545,1.34103546-1.53780779,1.93466091-2.37946604,2.23230153-3.20128463,3.27404056-7.78824987,3.0524659-12.2263948-.09921249-1.83710106-.09921249-3.6725479-.72095188-4.88625851-.64323327-1.29142764-2.80277729-2.43238074-4.09255228-1.29142764-.2480328-1.26331685,1.04173903-2.03387419,2.55474449-1.58741404-1.09134685-1.41213717-2.20915184-3.07230753-3.74695964-3.94207814l.02976659.110783Zm-6.88706318,21.34244948c1.0169367,2.55309184,4.50428869,2.25379857,7.44926939,2.18765481-.13889812.32079031-.42331125.71929607-.7689039.85158045-.94252654.38362562-3.54687885.67464935-4.85649508-.01984124-.83669873-.44646094-1.36253092-1.44355482-1.82221935-2.02891388-.22653734-.28441156-1.31457732-1.00536186-.01984281-1.00701608l.01819174.01653594Zm.27118249-1.43859372c1.47662513.76724967,4.16696244.85488889,6.1694166.79370623.10913469.44149984.10913469.98055952.11244314,1.50969701-2.56301246.13228437-5.59894084-.50268093-6.27359177-2.30671011h-.00826797v.00330687Zm11.03748652-.96898468c-.78213139,1.48819997-1.89332263,3.13679667-4.19837852,3.18805714-.03803298-.46961062-.07441016-1.21536326,0-1.49481529,1.75938246-.17031577,2.85569041-1.06819717,4.20499226-1.68166701l-.00661375-.01157484Zm-1.07315827-1.1029217c-1.6866281,1.09134685-3.56175899,2.27363981-6.32319801,2.00080309-.58039796-.51260312-.8019742-1.65355622-.23149844-2.41088527.29929327.51756264.09921407,1.46339764.94252812,1.60394998,1.56095748.27283671,3.36994776-.95740826,4.51420773-1.38898748.69449374-1.17898608-.0760628-1.6138706-.69449374-2.36954542-1.29308028-1.53780779-3.02600776-3.4724687-2.97970839-5.80398272.51921529-.37039656.57213156.57212999.64654172.74409998.6680356,1.58741404,2.35466371,3.5964851,3.59483087,4.96066867.29764062.34724687.79370623.64488749.84331405.86646374.15212561.64488749-.4200028,1.41213717-.34559264,1.83544684l.03306873-.0380314Zm-22.22214229-1.11615077c-.51921687-.30425437-.6498478-1.63702028-1.26993139-1.67009216-.88465233-.04960625-.72425796,1.73623435-.7209503,2.77797496-.61181561-.54567343-.71929686-2.25710387-.27118328-3.12522183-.50929546-.2480328-.7358328.27118249-1.0218978.46961062.36378202-2.62915465,3.86932181-1.21371061,3.2905765,1.58741404l-.00661375-.03968563Zm-2.67545165-10.09165311c-1.13268592,1.25008857-.8929203,3.59483087-.75898249,5.27153678,2.05702387-1.29804138,4.79200554.09921407,4.76720242,2.30505746.98386561-.02645656.36874312-1.23024655.19015859-2.00907106-.58370562-2.52663371.9789053-5.26988413.06779562-7.58982331-1.75938404.13889891-3.20624573.8598492-4.26286805,2.00907106l-.00330608.01322907Zm15.08043335,1.84040794c.50764203.92929826.66803718,1.89828215,1.38898748,2.59608276.32244296.31417499.94914186.70110749.6399264,1.5708781-.07441016.20008078-.60354764.64654014-.91110889.74409998-1.11449654.32244296-3.72711525.04960625-2.84576979-1.33938123.9309517.02480391,2.17277309.59527967,2.86395996-.07441016-.51921687-.86646374-1.46339764-2.52994058-1.11449654-3.52207494l-.02149862.02480549Zm10.24874139-.02149625h.11244314c.54567343,1.10457513.99213436,2.27363902,1.66016997,3.24923744-.44646094,1.03843374-3.39475009,1.96773279-3.34514542.09425297.64488592-.28110468,1.73623277-.05787422,2.30671169-.41338906-.31913766-.91937686-.79370623-1.66347763-.71764343-2.92844792l-.01653594-.00165344Zm-11.45418403-2.67380058c-2.35135683-.54567343-3.52372917.9789053-4.23310305,2.56797277-.6349653-.15543406-.3819714-1.01693749-.22323047-1.46008997.42165703-1.15914327,2.11655152-2.70025714,3.50388478-2.49025574.59362702.09425297,1.40221497.63827296.95244874,1.37906607v.00330687Zm-5.72461147-6.42406532c-2.57954682.72756464-5.88666006,2.6026975-6.94493582,4.91767597.81851014-.11574922,1.38898748-.53079171,2.19922965-.58039796.30756124-.02645656.70772202.12236296,1.0599292.02480312.70110749-.17197,1.28977341-1.76103747,1.82221935-2.33151402.51260312-.57047694,1.13268671-.82016397,1.55434216-1.33938045.27614359-.14882012.67630515-.12236316.69449374-.54567362-.12070953-.1240168-.2480328-.22323007-.38362562-.17362343l-.00165265.02811039Z'/>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 35.98188688 39.68503937'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-11.82596649' y='-9.97439025' width='59.63381987' height='59.63381987'/>
+	  <path class='cls-1' d='m2.89767408,39.68503937h-1.61221736c-.04151253-.10751988-.08010966-.21614364-.11574902-.32575141-.35551464-1.10126905-.98221237-2.46379839-1.14426076-3.56175899-.24141925-1.62709809,1.28977381-1.71804418,2.27198598-2.42246012,1.51300388-1.09134685,2.7035648-1.6948945,4.34389196-2.67876247.48779921-.29598798,1.95450372-1.03181999,2.11820575-1.37079889.33236515-.67464935-.57047655-1.62379279-.81024217-2.14962183-.37204999-.83835295-.57047655-1.54938263-.62173702-2.3728523-1.36253013-.2149625-2.40592418-1.03677951-3.04915745-1.95946324-1.04174061-1.52953982-1.76269091-4.35712102-.86811717-6.50839708.07441016-.17031577.4200032-.50433515.47126367-.76559702.09921328-.50929467-.17362343-1.19056092-.19842656-1.73292748-.09921328-2.79781698.46960983-5.20870226,2.35631754-6.05201552.76559623-3.0425437,3.49396416-4.05617353,6.07351256-5.56752397.95906248-.56551624,2.02395278-.92929856,3.12522183-1.33441984,3.92223493-1.45016876,9.96598406-1.17733205,13.21852758,1.29473461,1.38237373,1.04670112,3.59813932,3.25750581,4.39184555,4.85980156,2.08678651,4.22483586,1.93466091,11.28552011.47457172,16.42642833-.19842813.69614639-.47953282,1.70646934-.88134388,2.53490168-.27779623.57874373-1.13929887,1.73623435-1.03347264,2.24883589.10582624.51921529,1.96773279,1.93466091,2.3678912,2.30671169.71764343.69780219,2.08348122,1.61221795,2.18930745,2.48033433.11574843.9210295-.41008061,2.20915184-.6779578,3.10041792-.35882014,1.19221515-.72095188,2.38277449-1.08142466,3.52372917H2.89436681l.00330727.02645498Zm18.36108805-5.85359054c-1.07265206-.57801045-2.22250865-.99953028-3.41459448-1.25174201-1.43859372-.27118249-1.28977341,1.96442434-1.24016717,3.29719025.04960625,1.06323607.59527967,2.17607996.84331405,2.88380119.12567063.32575141.14882031.6779578.42330967.74244576.49606718.11244314,2.13308746-.53905968,2.60435073-.79205358.99213436-.54236498,1.75938404-1.39560122,2.60269809-1.96607699.02645656-.28110468.02645656-.56220937.04960625-.8400056-.56358289-.28112045-1.18117962-.43735245-1.81064451-.45803578.51921687-.2480328,1.24016717-.2480328,1.71143044-.54898188l.02645656-.31913766c-.82016437-.04960782-1.1409531-.4200028-1.68828075-.72095188l-.10747888-.02645183Zm12.32560886,4.85318663c.30539293-.95197565.56202644-1.91891029.7689039-2.89703184.09921249-.47457172.35551484-1.5179634.29433217-1.9445831-.09755984-.7589817-1.13103248-1.32119107-1.66016997-1.79576279-.96567623-.86811639-1.57087967-1.61221795-2.57954682-2.42907386-.41173641.62008358-1.28977499,1.0169367-1.62544544,1.51134966,2.39269669-1.13929887,2.82757963,4.34058508,1.88670889,6.10162334.14882031.54402078.64654172.74410156.8499278,1.21536483l-.14220657.27449094h2.13308904c.02149704,0,.04960782,0,.07275751.02314969l.00164949-.05952686Zm-10.96969169-.01984124c-.08267813-.12236218-.16535625-.22323047-.2480328-.34559264l-.49771983.32244296h.74409998l.00165265.02314969Zm4.58034992,0c.01322749-.34559264.02976343-.6680356.04960782-.98882591-.87638593.04795202-1.36418514-.79370623-1.97765183-.87142484-.53575123-.07441016-.99213436.5969339-1.6866281.32244296-.15708828.17362265-.30260015.37535608-.46961062.52252374.25464813.29764062.48779921.62008358.70110749.96567623h1.3476492c.01156223-.26499767.23082193-.47329439.49606561-.47126327.27283829,0,.46961062.20008078.46961062.44646094h1.09134685l-.02149704.07441016Zm3.49892368,0c-.51921529-.79205358-1.56591858-1.48489467-2.77797496-.91772421l-.04960782.89457452h2.82758278v.02314969Zm-14.07176383,0l-.17197-.56882311c-.37205078-1.19055934-.59527967-2.08348122-.66968983-2.77797496-1.51134966-.72095188-3.10041792-1.4385953-4.38853868-2.35797216-.24803359-.17362265-1.83379419-2.23230153-2.03387419-2.15789137-2.87553401,1.11780499-5.5542953,3.07561558-7.96021987,4.93421053.42331046.9210295.79370702,1.88670889,1.14095389,2.87718745h14.06349586l.01984281.05126362Zm13.66664432-3.49396258c-.04795202-.84661935-.27118249-2.57954682-.79370623-2.87718745-1.09134685-.64488592-3.0524659,1.28977499-3.86932181,1.55930483.07441016.2480328.22323047.44811358.2480328.79370623.47126327-.12236218,1.06654452-.04795202,1.48489467.15212561-.49441296.04960782-1.04008638.04960782-1.36252934.27118249-.12236218.32244296.02645814.79370623-.04795202,1.26331685,1.14095468.32575141,2.48033433.5010267,3.94373197.54898188.27118249-.37535608.37205078-1.06654452.34890109-1.78914904l.04794887.07771861Zm-6.74650926-.59528125c-.07275593.62008358.0760628.84331405.19842656,1.55930483,2.08347964.64654172,1.70977621-2.87718745-.22323047-1.58575981l.02480391.02645498Zm-10.9085106-2.33151402c-.74409998.7556764,2.10001716,1.78914904,2.9995512,1.84371481,0-.47953282.27283671-.93260435.22323047-1.27323905-1.07481091-.19511968-2.48364121-.06944906-3.21616635-.57378421l-.00661532.00330845Zm9.20204126.35551484c0,.07110171-.10086672.04960782-.11244156.10582624.95906248.74575421,1.67670591.90118827,2.97970997.84331405.58535905-.43323029,1.1078828-.9309517,1.72465793-1.33441856-1.41378981.12236218-3.19301666,1.00370921-4.58696524.38031717l-.0049611.0049611ZM27.49101719,3.28861389c-2.65561278-1.49812197-7.1929702-2.63080789-10.04700796-1.20874951-2.28190778,1.14426076-5.4071296,3.0425437-6.44721599,5.44350678.99213436,2.31828574-.27449015,4.4414518-.37370343,6.79446286-.02976422,1.25174201.59528046,2.34804996.64654014,3.70727401-.33071093.5589025-1.36418357.62835155-2.08348122.58866593-.24141906-1.20544264-.66142265-2.56135824-1.909857-2.69529683-1.75938404-.19181281-3.05081128,1.26331685-3.12522104,2.78293448-.09921328,1.78584059,1.37741264,4.73578555,3.44766479,4.53901164.8069353-.0760628,1.00536186-.8929203,1.88340044-.8929203.47126327.94252654-.7358328,1.24016717-.8648103,1.90820435-.02645656.17362265.09921328.8449667.17197,1.16575701.38527827,1.56095748,1.23024576,3.57168119,2.05867731,4.76224369,1.05000858,1.48819997,3.11529963,1.73788857,5.33933319,1.88670889.39685311-.86811639,1.86025075-.79370623,2.82096746-.57213156-1.14260732-.44646094-2.20915027-1.56261013-3.10041792-2.52828635-1.0169367-1.11780499-2.03387497-2.33151402-2.08513387-3.77010775,1.909857,2.65230276,3.47246712,4.96066709,6.94493582,6.12477145,2.62915465.86811639,5.70477023-.4200028,7.71218549-1.83379261.84331405-.59362545,1.34103546-1.53780779,1.93466091-2.37946604,2.23230153-3.20128463,3.27404056-7.78824987,3.0524659-12.2263948-.09921249-1.83710106-.09921249-3.6725479-.72095188-4.88625851-.64323327-1.29142764-2.80277729-2.43238074-4.09255228-1.29142764-.2480328-1.26331685,1.04173903-2.03387419,2.55474449-1.58741404-1.09134685-1.41213717-2.20915184-3.07230753-3.74695964-3.94207814l.02976659.110783Zm-6.88706318,21.34244948c1.0169367,2.55309184,4.50428869,2.25379857,7.44926939,2.18765481-.13889812.32079031-.42331125.71929607-.7689039.85158045-.94252654.38362562-3.54687885.67464935-4.85649508-.01984124-.83669873-.44646094-1.36253092-1.44355482-1.82221935-2.02891388-.22653734-.28441156-1.31457732-1.00536186-.01984281-1.00701608l.01819174.01653594Zm.27118249-1.43859372c1.47662513.76724967,4.16696244.85488889,6.1694166.79370623.10913469.44149984.10913469.98055952.11244314,1.50969701-2.56301246.13228437-5.59894084-.50268093-6.27359177-2.30671011h-.00826797v.00330687Zm11.03748652-.96898468c-.78213139,1.48819997-1.89332263,3.13679667-4.19837852,3.18805714-.03803298-.46961062-.07441016-1.21536326,0-1.49481529,1.75938246-.17031577,2.85569041-1.06819717,4.20499226-1.68166701l-.00661375-.01157484Zm-1.07315827-1.1029217c-1.6866281,1.09134685-3.56175899,2.27363981-6.32319801,2.00080309-.58039796-.51260312-.8019742-1.65355622-.23149844-2.41088527.29929327.51756264.09921407,1.46339764.94252812,1.60394998,1.56095748.27283671,3.36994776-.95740826,4.51420773-1.38898748.69449374-1.17898608-.0760628-1.6138706-.69449374-2.36954542-1.29308028-1.53780779-3.02600776-3.4724687-2.97970839-5.80398272.51921529-.37039656.57213156.57212999.64654172.74409998.6680356,1.58741404,2.35466371,3.5964851,3.59483087,4.96066867.29764062.34724687.79370623.64488749.84331405.86646374.15212561.64488749-.4200028,1.41213717-.34559264,1.83544684l.03306873-.0380314Zm-22.22214229-1.11615077c-.51921687-.30425437-.6498478-1.63702028-1.26993139-1.67009216-.88465233-.04960625-.72425796,1.73623435-.7209503,2.77797496-.61181561-.54567343-.71929686-2.25710387-.27118328-3.12522183-.50929546-.2480328-.7358328.27118249-1.0218978.46961062.36378202-2.62915465,3.86932181-1.21371061,3.2905765,1.58741404l-.00661375-.03968563Zm-2.67545165-10.09165311c-1.13268592,1.25008857-.8929203,3.59483087-.75898249,5.27153678,2.05702387-1.29804138,4.79200554.09921407,4.76720242,2.30505746.98386561-.02645656.36874312-1.23024655.19015859-2.00907106-.58370562-2.52663371.9789053-5.26988413.06779562-7.58982331-1.75938404.13889891-3.20624573.8598492-4.26286805,2.00907106l-.00330608.01322907Zm15.08043335,1.84040794c.50764203.92929826.66803718,1.89828215,1.38898748,2.59608276.32244296.31417499.94914186.70110749.6399264,1.5708781-.07441016.20008078-.60354764.64654014-.91110889.74409998-1.11449654.32244296-3.72711525.04960625-2.84576979-1.33938123.9309517.02480391,2.17277309.59527967,2.86395996-.07441016-.51921687-.86646374-1.46339764-2.52994058-1.11449654-3.52207494l-.02149862.02480549Zm10.24874139-.02149625h.11244314c.54567343,1.10457513.99213436,2.27363902,1.66016997,3.24923744-.44646094,1.03843374-3.39475009,1.96773279-3.34514542.09425297.64488592-.28110468,1.73623277-.05787422,2.30671169-.41338906-.31913766-.91937686-.79370623-1.66347763-.71764343-2.92844792l-.01653594-.00165344Zm-11.45418403-2.67380058c-2.35135683-.54567343-3.52372917.9789053-4.23310305,2.56797277-.6349653-.15543406-.3819714-1.01693749-.22323047-1.46008997.42165703-1.15914327,2.11655152-2.70025714,3.50388478-2.49025574.59362702.09425297,1.40221497.63827296.95244874,1.37906607v.00330687Zm-5.72461147-6.42406532c-2.57954682.72756464-5.88666006,2.6026975-6.94493582,4.91767597.81851014-.11574922,1.38898748-.53079171,2.19922965-.58039796.30756124-.02645656.70772202.12236296,1.0599292.02480312.70110749-.17197,1.28977341-1.76103747,1.82221935-2.33151402.51260312-.57047694,1.13268671-.82016397,1.55434216-1.33938045.27614359-.14882012.67630515-.12236316.69449374-.54567362-.12070953-.1240168-.2480328-.22323007-.38362562-.17362343l-.00165265.02811039Z'/>
+	</svg>"""
 
 _jenkinsServiceHTTPPortNumber: 80
 
@@ -36,7 +36,7 @@
 	ingress: {
 		jenkins: {
 			auth: enabled: false
-			network: input.network
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "jenkins"
@@ -48,24 +48,24 @@
 	images: {
 		jenkins: {
 			repository: "jenkins"
-			name: "jenkins"
-			tag: "2.452-jdk17"
+			name:       "jenkins"
+			tag:        "2.452-jdk17"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		jenkins: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/jenkins"
+			branch:  "main"
+			path:    "charts/jenkins"
 		}
 		oauth2Client: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/oauth2-client"
+			branch:  "main"
+			path:    "charts/oauth2-client"
 		}
 	}
 
@@ -74,12 +74,12 @@
 	helm: {
 		"oauth2-client": {
 			chart: charts.oauth2Client
-			info: "Creating OAuth2 client"
+			info:  "Creating OAuth2 client"
 			values: {
-				name: "\(release.namespace)-jenkins"
+				name:       "\(release.namespace)-jenkins"
 				secretName: _oauth2ClientCredentials
 				grantTypes: ["authorization_code"]
-				scope: "openid profile email offline offline_access"
+				scope:      "openid profile email offline offline_access"
 				hydraAdmin: "http://hydra-admin.\(global.id)-core-auth.svc.cluster.local"
 				redirectUris: ["https://\(_domain)/securityRealm/finishLogin"]
 				tokenEndpointAuthMethod: "client_secret_post"
@@ -87,17 +87,17 @@
 		}
 		jenkins: {
 			chart: charts.jenkins
-			info: "Installing Jenkins server"
+			info:  "Installing Jenkins server"
 			values: {
 				fullnameOverride: "jenkins"
 				controller: {
 					image: {
 						repository: images.jenkins.imageName
-						tag: images.jenkins.tag
+						tag:        images.jenkins.tag
 						pullPolicy: images.jenkins.pullPolicy
 					}
 					jenkinsUrlProtocol: "https://"
-					jenkinsUrl: _domain
+					jenkinsUrl:         _domain
 					sidecars: configAutoReload: enabled: false
 					ingress: enabled: false
 					servicePort: _jenkinsServiceHTTPPortNumber
@@ -110,16 +110,16 @@
 						"oic-auth:4.239.v325750a_96f3b_",
 					]
 					additionalExistingSecrets: [{
-						name: _oauth2ClientCredentials
+						name:    _oauth2ClientCredentials
 						keyName: _oauth2ClientId
 					}, {
-						name: _oauth2ClientCredentials
+						name:    _oauth2ClientCredentials
 						keyName: _oauth2ClientSecret
 					}]
 					JCasC: {
-						defaultConfig: true
+						defaultConfig:          true
 						overwriteConfiguration: false
-						securityRealm: """
+						securityRealm:          """
 oic:
   clientId: "${\(_oauth2ClientCredentials)-\(_oauth2ClientId)}"
   clientSecret: "${\(_oauth2ClientCredentials)-\(_oauth2ClientSecret)}"
@@ -134,12 +134,12 @@
 					}
 				}
 				agent: {
-					runAsUser: 1000
+					runAsUser:  1000
 					runAsGroup: 1000
 					jenkinsUrl: "http://jenkins.\(release.namespace).svc.cluster.local"
 				}
 				persistence: {
-					enabled: true
+					enabled:       true
 					existingClaim: volume.jenkins.name
 				}
 			}
@@ -147,6 +147,6 @@
 	}
 }
 
-_oauth2ClientCredentials:  "oauth2-credentials"
-_oauth2ClientId: "client_id"
-_oauth2ClientSecret: "client_secret"
+_oauth2ClientCredentials: "oauth2-credentials"
+_oauth2ClientId:          "client_id"
+_oauth2ClientSecret:      "client_secret"
diff --git a/core/installer/values-tmpl/launcher.cue b/core/installer/values-tmpl/launcher.cue
index 09c0ec3..7b6e8b5 100644
--- a/core/installer/values-tmpl/launcher.cue
+++ b/core/installer/values-tmpl/launcher.cue
@@ -3,19 +3,19 @@
 )
 
 input: {
-	network: #Network
-    repoAddr: string
+	network:       #Network
+	repoAddr:      string
 	sshPrivateKey: string
 }
 
 _subdomain: "launcher"
-_domain: "\(_subdomain).\(input.network.domain)"
+_domain:    "\(_subdomain).\(input.network.domain)"
 
-name: "Launcher"
-namespace: "launcher"
-readme: "App Launcher application will be installed on Private or Public network and be accessible at https://\(_domain)"
+name:        "Launcher"
+namespace:   "launcher"
+readme:      "App Launcher application will be installed on Private or Public network and be accessible at https://\(_domain)"
 description: "The application is a App launcher, designed to run all accessible applications. Can be configured to be reachable only from private network or publicly."
-icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><path fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' d='M42.5 23.075L26.062 7.525a3 3 0 0 0-4.124 0L5.5 23.075m5.86 1.54v14.68a2 2 0 0 0 2 2h7.14v-9.5h7v9.5h7.14a2 2 0 0 0 2-2v-14.68'/></svg>"
+icon:        "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><path fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' d='M42.5 23.075L26.062 7.525a3 3 0 0 0-4.124 0L5.5 23.075m5.86 1.54v14.68a2 2 0 0 0 2 2h7.14v-9.5h7v9.5h7.14a2 2 0 0 0 2-2v-14.68'/></svg>"
 
 _httpPortName: "http"
 
@@ -23,7 +23,7 @@
 	ingress: {
 		launcher: {
 			auth: enabled: true
-			network: input.network
+			network:   input.network
 			subdomain: _subdomain
 			service: {
 				name: "launcher"
@@ -35,18 +35,18 @@
 	images: {
 		launcher: {
 			repository: "giolekva"
-			name: "pcloud-installer"
-			tag: "latest"
+			name:       "pcloud-installer"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		launcher: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/launcher"
+			branch:  "main"
+			path:    "charts/launcher"
 		}
 	}
 
@@ -56,14 +56,14 @@
 			values: {
 				image: {
 					repository: images.launcher.fullName
-					tag: images.launcher.tag
+					tag:        images.launcher.tag
 					pullPolicy: images.launcher.pullPolicy
 				}
-				portName: _httpPortName
-				repoAddr: input.repoAddr
+				portName:      _httpPortName
+				repoAddr:      input.repoAddr
 				sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
-				logoutUrl: "https://accounts-ui.\(networks.public.domain)/logout"
-				repoAddr: input.repoAddr
+				logoutUrl:     "https://accounts-ui.\(networks.public.domain)/logout"
+				repoAddr:      input.repoAddr
 				sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
 			}
 		}
diff --git a/core/installer/values-tmpl/longhorn.cue b/core/installer/values-tmpl/longhorn.cue
index 80a693c..8547b06 100644
--- a/core/installer/values-tmpl/longhorn.cue
+++ b/core/installer/values-tmpl/longhorn.cue
@@ -1,159 +1,158 @@
-input: {
-}
+input: {}
 
-name: "longhorn"
-namespace: "longhorn"
+name:        "longhorn"
+namespace:   "longhorn"
 _pullPolicy: "IfNotPresent"
 
 out: {
 	images: {
 		longhornEngine: {
 			repository: "longhornio"
-			name: "longhorn-engine"
-			tag: "v1.5.2"
+			name:       "longhorn-engine"
+			tag:        "v1.5.2"
 			pullPolicy: _pullPolicy
 		}
 		longhornManager: {
 			repository: "longhornio"
-			name: "longhorn-manager"
-			tag: "v1.5.2"
+			name:       "longhorn-manager"
+			tag:        "v1.5.2"
 			pullPolicy: _pullPolicy
 		}
 		longhornUI: {
 			repository: "longhornio"
-			name: "longhorn-ui"
-			tag: "v1.5.2"
+			name:       "longhorn-ui"
+			tag:        "v1.5.2"
 			pullPolicy: _pullPolicy
 		}
 		longhornInstanceManager: {
 			repository: "longhornio"
-			name: "longhorn-instance-manager"
-			tag: "v1.5.2"
+			name:       "longhorn-instance-manager"
+			tag:        "v1.5.2"
 			pullPolicy: _pullPolicy
 		}
 		longhornShareManager: {
 			repository: "longhornio"
-			name: "longhorn-share-manager"
-			tag: "v1.5.2"
+			name:       "longhorn-share-manager"
+			tag:        "v1.5.2"
 			pullPolicy: _pullPolicy
 		}
 		longhornBackingImageManager: {
 			repository: "longhornio"
-			name: "backing-image-manager"
-			tag: "v1.5.2"
+			name:       "backing-image-manager"
+			tag:        "v1.5.2"
 			pullPolicy: _pullPolicy
 		}
 		longhornSupportBundleKit: {
 			repository: "longhornio"
-			name: "support-bundle-kit"
-			tag: "v0.0.27"
+			name:       "support-bundle-kit"
+			tag:        "v0.0.27"
 			pullPolicy: _pullPolicy
 		}
 		csiAttacher: {
 			repository: "longhornio"
-			name: "csi-attacher"
-			tag: "v4.2.0"
+			name:       "csi-attacher"
+			tag:        "v4.2.0"
 			pullPolicy: _pullPolicy
 		}
 		csiProvisioner: {
 			repository: "longhornio"
-			name: "csi-provisioner"
-			tag: "v3.4.1"
+			name:       "csi-provisioner"
+			tag:        "v3.4.1"
 			pullPolicy: _pullPolicy
 		}
 		csiNodeDriverRegistrar: {
 			repository: "longhornio"
-			name: "csi-node-driver-registrar"
-			tag: "v2.7.0"
+			name:       "csi-node-driver-registrar"
+			tag:        "v2.7.0"
 			pullPolicy: _pullPolicy
 		}
 		csiResizer: {
 			repository: "longhornio"
-			name: "csi-resizer"
-			tag: "v1.7.0"
+			name:       "csi-resizer"
+			tag:        "v1.7.0"
 			pullPolicy: _pullPolicy
 		}
 		csiSnapshotter: {
 			repository: "longhornio"
-			name: "csi-snapshotter"
-			tag: "v6.2.1"
+			name:       "csi-snapshotter"
+			tag:        "v6.2.1"
 			pullPolicy: _pullPolicy
 		}
 		csiLivenessProbe: {
 			repository: "longhornio"
-			name: "livenessprobe"
-			tag: "v2.9.0"
+			name:       "livenessprobe"
+			tag:        "v2.9.0"
 			pullPolicy: _pullPolicy
 		}
 	}
 	charts: {
 		longhorn: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/longhorn"
+			branch:  "main"
+			path:    "charts/longhorn"
 		}
 	}
 	helm: {
 		longhorn: {
 			chart: charts.longhorn
-			info: "Installing distributed storage servers"
+			info:  "Installing distributed storage servers"
 			values: {
 				image: {
 					longhorn: {
 						engine: {
 							repository: images.longhornEngine.imageName
-							tag: images.longhornEngine.tag
+							tag:        images.longhornEngine.tag
 						}
 						manager: {
 							repository: images.longhornManager.imageName
-							tag: images.longhornManager.tag
+							tag:        images.longhornManager.tag
 						}
 						ui: {
 							repository: images.longhornUI.imageName
-							tag: images.longhornUI.tag
+							tag:        images.longhornUI.tag
 						}
 						instanceManager: {
 							repository: images.longhornInstanceManager.imageName
-							tag: images.longhornInstanceManager.tag
+							tag:        images.longhornInstanceManager.tag
 						}
 						shareManager: {
 							repository: images.longhornShareManager.imageName
-							tag: images.longhornShareManager.tag
+							tag:        images.longhornShareManager.tag
 						}
 						backingImageManager: {
 							repository: images.longhornBackingImageManager.imageName
-							tag: images.longhornBackingImageManager.tag
+							tag:        images.longhornBackingImageManager.tag
 						}
 						supportBundleKit: {
 							repository: images.longhornSupportBundleKit.imageName
-							tag: images.longhornSupportBundleKit.tag
+							tag:        images.longhornSupportBundleKit.tag
 						}
 					}
 					csi: {
 						attacher: {
 							repository: images.csiAttacher.imageName
-							tag: images.csiAttacher.tag
+							tag:        images.csiAttacher.tag
 						}
 						provisioner: {
 							repository: images.csiProvisioner.imageName
-							tag: images.csiProvisioner.tag
+							tag:        images.csiProvisioner.tag
 						}
 						nodeDriverRegistrar: {
 							repository: images.csiNodeDriverRegistrar.imageName
-							tag: images.csiNodeDriverRegistrar.tag
+							tag:        images.csiNodeDriverRegistrar.tag
 						}
 						resizer: {
 							repository: images.csiResizer.imageName
-							tag: images.csiResizer.tag
+							tag:        images.csiResizer.tag
 						}
 						snapshotter: {
 							repository: images.csiSnapshotter.imageName
-							tag: images.csiSnapshotter.tag
+							tag:        images.csiSnapshotter.tag
 						}
 						livenessProbe: {
 							repository: images.csiLivenessProbe.imageName
-							tag: images.csiLivenessProbe.tag
+							tag:        images.csiLivenessProbe.tag
 						}
 					}
 					pullPolicy: _pullPolicy
@@ -162,7 +161,7 @@
 				// 	defaultSettings: defaultDataPath: input.storageDir
 				// }
 				// if input.volumeDefaultReplicaCount != _|_ {
-					persistence: defaultClassReplicaCount: 1 // input.volumeDefaultReplicaCount
+				persistence: defaultClassReplicaCount: 1 // input.volumeDefaultReplicaCount
 				// }
 				service: ui: type: "ClusterIP"
 				ingress: enabled: false
diff --git a/core/installer/values-tmpl/matrix.cue b/core/installer/values-tmpl/matrix.cue
index 953c6b7..d058282 100644
--- a/core/installer/values-tmpl/matrix.cue
+++ b/core/installer/values-tmpl/matrix.cue
@@ -1,68 +1,68 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
 
-name: "Matrix"
-namespace: "app-matrix"
-readme: "matrix application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
+name:        "Matrix"
+namespace:   "app-matrix"
+readme:      "matrix application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
 description: "An open network for secure, decentralised communication"
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 39.68503937'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-9.97439025' y='-9.97439025' width='59.63381987' height='59.63381987'/>
-  <path class='cls-1' d='m1.04503942.90944884v37.86613982h2.72503927v.90945071H0V0h3.77007869v.90944884H1.04503942Zm11.64590578,12.00472508v1.91314893h.05456692c.47654392-.69956134,1.10875881-1.27913948,1.84700726-1.69322862.71598361-.40511792,1.54771632-.60354293,2.48031496-.60354293.89291332,0,1.70811022.17692893,2.44889755.51921281.74078733.34393731,1.29803124.96236184,1.68661493,1.83212566.41999952-.61842453.99212662-1.16740212,1.70976444-1.64031434.71763782-.47456723,1.57086583-.71102334,2.55637717-.71102334.74905523,0,1.44188933.09259881,2.08346495.27614143.64157561.18188998,1.18393635.47291301,1.64196855.8763783.45637641.40511792.80858321.92433073,1.06818882,1.57252004.25133929.6481893.3803142,1.42700774.3803142,2.34307056v9.47149555h-3.88417161v-8.02133831c0-.4729138-.01653581-.92433073-.0529127-1.34267762-.02666609-.3797812-.12779852-.75060537-.2976383-1.09133833-.16496703-.31157689-.41647821-.56882971-.72425151-.74078733-.32078781-.1818892-.75566893-.27448879-1.29803124-.27448879-.54897601,0-.99212662.10582699-1.32779444.3125199-.33038665.20312114-.60355081.48709839-.79370003.82511744-.19910782.35594888-.32873086.74650374-.38196842,1.15086631-.06370056.42978918-.09685576.86355382-.09921329,1.29803124v7.88409548h-3.8858274v-7.93700819c0-.41999952-.00661369-.83173271-.0297632-1.24346433-.01353647-.38990201-.09350161-.7746348-.23645611-1.13763734-.13486952-.34292964-.3751576-.63417029-.68622041-.83173271-.32078781-.20669291-.78708634-.31417253-1.41212614-.31417253-.18354341,0-.42826743.03968532-.72590573.1223628-.2976383.08433012-.59527502.23645611-.87637751.46629853-.31383822.26829772-.56214032.60483444-.72590573.98385871-.19842501.42826743-.29763751.99212662-.29763751,1.68661335v8.21149541h-3.88417713v-14.16259852l3.66259868.00000079Zm25.94905485,25.86141789V.90944884h-2.72504056v-.90944884h3.77007988v39.68503937h-3.77007988v-.90944756h2.72504056Z'/>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 39.68503937'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-9.97439025' y='-9.97439025' width='59.63381987' height='59.63381987'/>
+	  <path class='cls-1' d='m1.04503942.90944884v37.86613982h2.72503927v.90945071H0V0h3.77007869v.90944884H1.04503942Zm11.64590578,12.00472508v1.91314893h.05456692c.47654392-.69956134,1.10875881-1.27913948,1.84700726-1.69322862.71598361-.40511792,1.54771632-.60354293,2.48031496-.60354293.89291332,0,1.70811022.17692893,2.44889755.51921281.74078733.34393731,1.29803124.96236184,1.68661493,1.83212566.41999952-.61842453.99212662-1.16740212,1.70976444-1.64031434.71763782-.47456723,1.57086583-.71102334,2.55637717-.71102334.74905523,0,1.44188933.09259881,2.08346495.27614143.64157561.18188998,1.18393635.47291301,1.64196855.8763783.45637641.40511792.80858321.92433073,1.06818882,1.57252004.25133929.6481893.3803142,1.42700774.3803142,2.34307056v9.47149555h-3.88417161v-8.02133831c0-.4729138-.01653581-.92433073-.0529127-1.34267762-.02666609-.3797812-.12779852-.75060537-.2976383-1.09133833-.16496703-.31157689-.41647821-.56882971-.72425151-.74078733-.32078781-.1818892-.75566893-.27448879-1.29803124-.27448879-.54897601,0-.99212662.10582699-1.32779444.3125199-.33038665.20312114-.60355081.48709839-.79370003.82511744-.19910782.35594888-.32873086.74650374-.38196842,1.15086631-.06370056.42978918-.09685576.86355382-.09921329,1.29803124v7.88409548h-3.8858274v-7.93700819c0-.41999952-.00661369-.83173271-.0297632-1.24346433-.01353647-.38990201-.09350161-.7746348-.23645611-1.13763734-.13486952-.34292964-.3751576-.63417029-.68622041-.83173271-.32078781-.20669291-.78708634-.31417253-1.41212614-.31417253-.18354341,0-.42826743.03968532-.72590573.1223628-.2976383.08433012-.59527502.23645611-.87637751.46629853-.31383822.26829772-.56214032.60483444-.72590573.98385871-.19842501.42826743-.29763751.99212662-.29763751,1.68661335v8.21149541h-3.88417713v-14.16259852l3.66259868.00000079Zm25.94905485,25.86141789V.90944884h-2.72504056v-.90944884h3.77007988v39.68503937h-3.77007988v-.90944756h2.72504056Z'/>
+	</svg>"""
 
 out: {
 	images: {
 		matrix: {
 			repository: "matrixdotorg"
-			name: "synapse"
-			tag: "v1.126.0"
+			name:       "synapse"
+			tag:        "v1.126.0"
 			pullPolicy: "IfNotPresent"
 		}
 		postgres: {
 			repository: "library"
-			name: "postgres"
-			tag: "15.3"
+			name:       "postgres"
+			tag:        "15.3"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		oauth2Client: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/oauth2-client"
+			branch:  "main"
+			path:    "charts/oauth2-client"
 		}
 		matrix: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/matrix"
+			branch:  "main"
+			path:    "charts/matrix"
 		}
 		postgres: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/postgresql"
+			branch:  "main"
+			path:    "charts/postgresql"
 		}
 	}
 
@@ -71,9 +71,9 @@
 	helm: {
 		"oauth2-client": {
 			chart: charts.oauth2Client
-			info: "Creating OAuth2 client"
+			info:  "Creating OAuth2 client"
 			values: {
-				name: "\(release.namespace)-matrix"
+				name:       "\(release.namespace)-matrix"
 				secretName: _oauth2ClientSecretName
 				grantTypes: ["authorization_code"]
 				responseTypes: ["code"]
@@ -84,47 +84,47 @@
 		}
 		matrix: {
 			dependsOn: [{
-				name: "postgres"
+				name:      "postgres"
 				namespace: release.namespace
 			}]
 			chart: charts.matrix
-			info: "Installing Synapse server"
+			info:  "Installing Synapse server"
 			values: {
-				domain: input.network.domain
+				domain:    input.network.domain
 				subdomain: input.subdomain
 				oauth2: {
 					secretName: "oauth2-client"
-					issuer: "https://hydra.\(input.network.domain)"
+					issuer:     "https://hydra.\(input.network.domain)"
 				}
 				postgresql: {
-					host: "postgres"
-					port: 5432
+					host:     "postgres"
+					port:     5432
 					database: "matrix"
-					user: "matrix"
+					user:     "matrix"
 					password: "matrix"
 				}
 				certificateIssuer: input.network.certificateIssuer
-				ingressClassName: input.network.ingressClass
+				ingressClassName:  input.network.ingressClass
 				configMerge: {
 					configName: "config-to-merge"
-					fileName: "to-merge.yaml"
+					fileName:   "to-merge.yaml"
 				}
 				image: {
 					repository: images.matrix.fullName
-					tag: images.matrix.tag
+					tag:        images.matrix.tag
 					pullPolicy: images.matrix.pullPolicy
 				}
 			}
 		}
 		postgres: {
 			chart: charts.postgres
-			info: "Installing PostgreSQL"
+			info:  "Installing PostgreSQL"
 			values: {
 				fullnameOverride: "postgres"
 				image: {
-					registry: images.postgres.registry
+					registry:   images.postgres.registry
 					repository: images.postgres.imageName
-					tag: images.postgres.tag
+					tag:        images.postgres.tag
 					pullPolicy: images.postgres.pullPolicy
 				}
 				service: {
@@ -148,7 +148,7 @@
 						fsGroup: 0
 					}
 					containerSecurityContext: {
-						enabled: true
+						enabled:   true
 						runAsUser: 0
 					}
 				}
@@ -163,9 +163,9 @@
 }
 
 help: [{
-	title: "Client Applications"
+	title:    "Client Applications"
 	contents: "You can connect to \(_domain) Matrix server with any of the official clients. We recommend using Element. You can use official Element Web application to chat within the browser. Platform native client applications can be downloaded from: [https://element.io/download](https://element.io/download). Follow **Custom Homeserver** section to login with your dodo: account."
 }, {
-	title: "Custom Homeserver"
+	title:    "Custom Homeserver"
 	contents: "Click **Sign in** button, edit **Homeserver** address and enter **\(input.network.domain)**, click **Continue**. Choose **Continue with PCloud** option and login to your dodo: account."
 }]
diff --git a/core/installer/values-tmpl/memberships.cue b/core/installer/values-tmpl/memberships.cue
index 521c4d1..c340cb0 100644
--- a/core/installer/values-tmpl/memberships.cue
+++ b/core/installer/values-tmpl/memberships.cue
@@ -1,17 +1,17 @@
 input: {
-	network: #Network @name(Network)
-	authGroups: string @name(Allowed Groups)
+	network:    #Network @name(Network)
+	authGroups: string   @name(Allowed Groups)
 }
 
 _subdomain: "memberships"
-_domain: "\(_subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+_domain:    "\(_subdomain).\(input.network.domain)"
+url:        "https://\(_domain)"
 
-name: "Memberships"
-namespace: "core-auth-memberships"
-readme: "Memberships application will be installed on Private network and be accessible at https://\(_domain)"
+name:        "Memberships"
+namespace:   "core-auth-memberships"
+readme:      "Memberships application will be installed on Private network and be accessible at https://\(_domain)"
 description: "The application is a membership management system designed to facilitate the organization and administration of groups and memberships. Can be configured to be reachable only from private network or publicly."
-icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 24 24'><path fill='currentColor' d='M15.43 15.48c-1.1-.49-2.26-.73-3.43-.73c-1.18 0-2.33.25-3.43.73c-.23.1-.4.29-.49.52h7.85a.978.978 0 0 0-.5-.52m-2.49-6.69C12.86 8.33 12.47 8 12 8s-.86.33-.94.79l-.2 1.21h2.28z' opacity='0.3'/><path fill='currentColor' d='M10.27 12h3.46a1.5 1.5 0 0 0 1.48-1.75l-.3-1.79a2.951 2.951 0 0 0-5.82.01l-.3 1.79c-.15.91.55 1.74 1.48 1.74m.79-3.21c.08-.46.47-.79.94-.79s.86.33.94.79l.2 1.21h-2.28zm-9.4 2.32c-.13.26-.18.57-.1.88c.16.69.76 1.03 1.53 1h1.95c.83 0 1.51-.58 1.51-1.29c0-.14-.03-.27-.07-.4c-.01-.03-.01-.05.01-.08c.09-.16.14-.34.14-.53c0-.31-.14-.6-.36-.82c-.03-.03-.03-.06-.02-.1c.07-.2.07-.43.01-.65a1.12 1.12 0 0 0-.99-.74a.09.09 0 0 1-.07-.03C5.03 8.14 4.72 8 4.37 8c-.3 0-.57.1-.75.26c-.03.03-.06.03-.09.02a1.24 1.24 0 0 0-1.7 1.03c0 .02-.01.04-.03.06c-.29.26-.46.65-.41 1.05c.03.22.12.43.25.6c.03.02.03.06.02.09m14.58 2.54c-1.17-.52-2.61-.9-4.24-.9c-1.63 0-3.07.39-4.24.9A2.988 2.988 0 0 0 6 16.39V18h12v-1.61c0-1.18-.68-2.26-1.76-2.74M8.07 16a.96.96 0 0 1 .49-.52c1.1-.49 2.26-.73 3.43-.73c1.18 0 2.33.25 3.43.73c.23.1.4.29.49.52zm-6.85-1.42A2.01 2.01 0 0 0 0 16.43V18h4.5v-1.61c0-.83.23-1.61.63-2.29c-.37-.06-.74-.1-1.13-.1c-.99 0-1.93.21-2.78.58m21.56 0A6.95 6.95 0 0 0 20 14c-.39 0-.76.04-1.13.1c.4.68.63 1.46.63 2.29V18H24v-1.57c0-.81-.48-1.53-1.22-1.85M22 11v-.5c0-1.1-.9-2-2-2h-2c-.42 0-.65.48-.39.81l.7.63c-.19.31-.31.67-.31 1.06c0 1.1.9 2 2 2s2-.9 2-2'/></svg>"
+icon:        "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 24 24'><path fill='currentColor' d='M15.43 15.48c-1.1-.49-2.26-.73-3.43-.73c-1.18 0-2.33.25-3.43.73c-.23.1-.4.29-.49.52h7.85a.978.978 0 0 0-.5-.52m-2.49-6.69C12.86 8.33 12.47 8 12 8s-.86.33-.94.79l-.2 1.21h2.28z' opacity='0.3'/><path fill='currentColor' d='M10.27 12h3.46a1.5 1.5 0 0 0 1.48-1.75l-.3-1.79a2.951 2.951 0 0 0-5.82.01l-.3 1.79c-.15.91.55 1.74 1.48 1.74m.79-3.21c.08-.46.47-.79.94-.79s.86.33.94.79l.2 1.21h-2.28zm-9.4 2.32c-.13.26-.18.57-.1.88c.16.69.76 1.03 1.53 1h1.95c.83 0 1.51-.58 1.51-1.29c0-.14-.03-.27-.07-.4c-.01-.03-.01-.05.01-.08c.09-.16.14-.34.14-.53c0-.31-.14-.6-.36-.82c-.03-.03-.03-.06-.02-.1c.07-.2.07-.43.01-.65a1.12 1.12 0 0 0-.99-.74a.09.09 0 0 1-.07-.03C5.03 8.14 4.72 8 4.37 8c-.3 0-.57.1-.75.26c-.03.03-.06.03-.09.02a1.24 1.24 0 0 0-1.7 1.03c0 .02-.01.04-.03.06c-.29.26-.46.65-.41 1.05c.03.22.12.43.25.6c.03.02.03.06.02.09m14.58 2.54c-1.17-.52-2.61-.9-4.24-.9c-1.63 0-3.07.39-4.24.9A2.988 2.988 0 0 0 6 16.39V18h12v-1.61c0-1.18-.68-2.26-1.76-2.74M8.07 16a.96.96 0 0 1 .49-.52c1.1-.49 2.26-.73 3.43-.73c1.18 0 2.33.25 3.43.73c.23.1.4.29.49.52zm-6.85-1.42A2.01 2.01 0 0 0 0 16.43V18h4.5v-1.61c0-.83.23-1.61.63-2.29c-.37-.06-.74-.1-1.13-.1c-.99 0-1.93.21-2.78.58m21.56 0A6.95 6.95 0 0 0 20 14c-.39 0-.76.04-1.13.1c.4.68.63 1.46.63 2.29V18H24v-1.57c0-.81-.48-1.53-1.22-1.85M22 11v-.5c0-1.1-.9-2-2-2h-2c-.42 0-.65.48-.39.81l.7.63c-.19.31-.31.67-.31 1.06c0 1.1.9 2 2 2s2-.9 2-2'/></svg>"
 
 _httpPortName: "http"
 
@@ -20,9 +20,9 @@
 		memberships: {
 			auth: {
 				enabled: true
-				groups: input.authGroups
+				groups:  input.authGroups
 			}
-			network: input.network
+			network:   input.network
 			subdomain: _subdomain
 			service: {
 				name: "memberships"
@@ -34,18 +34,18 @@
 	images: {
 		memberships: {
 			repository: "giolekva"
-			name: "memberships"
-			tag: "latest"
+			name:       "memberships"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		memberships: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/memberships"
+			branch:  "main"
+			path:    "charts/memberships"
 		}
 	}
 
@@ -57,10 +57,10 @@
 			values: {
 				image: {
 					repository: images.memberships.fullName
-					tag: images.memberships.tag
+					tag:        images.memberships.tag
 					pullPolicy: images.memberships.pullPolicy
 				}
-				portName: _httpPortName
+				portName:        _httpPortName
 				volumeClaimName: volume.data.name
 			}
 		}
diff --git a/core/installer/values-tmpl/metallb-ipaddresspool.cue b/core/installer/values-tmpl/metallb-ipaddresspool.cue
index a0bb4e5..36c11bb 100644
--- a/core/installer/values-tmpl/metallb-ipaddresspool.cue
+++ b/core/installer/values-tmpl/metallb-ipaddresspool.cue
@@ -1,21 +1,21 @@
 input: {
-	name: string
-	from: string
-	to: string
+	name:       string
+	from:       string
+	to:         string
 	autoAssign: bool | *false
-	namespace: string
+	namespace:  string
 }
 
-name: "metallb-ipaddresspool"
+name:      "metallb-ipaddresspool"
 namespace: "metallb-ipaddresspool"
 
 out: {
 	charts: {
 		metallbIPAddressPool: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/metallb-ipaddresspool"
+			branch:  "main"
+			path:    "charts/metallb-ipaddresspool"
 		}
 	}
 
@@ -23,11 +23,11 @@
 		"metallb-ipaddresspool-\(input.name)": {
 			chart: charts.metallbIPAddressPool
 			values: {
-				name: input.name
-				from: input.from
-				to: input.to
+				name:       input.name
+				from:       input.from
+				to:         input.to
 				autoAssign: input.autoAssign
-				namespace: input.namespace
+				namespace:  input.namespace
 			}
 		}
 	}
diff --git a/core/installer/values-tmpl/open-project.cue b/core/installer/values-tmpl/open-project.cue
index 10234b4..b1d3795 100644
--- a/core/installer/values-tmpl/open-project.cue
+++ b/core/installer/values-tmpl/open-project.cue
@@ -1,16 +1,16 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "OpenProject"
-namespace: "app-open-project"
-readme: "Open source project management software. Powerful classic, agile or hybrid project management in a secure environment."
+name:        "OpenProject"
+namespace:   "app-open-project"
+readme:      "Open source project management software. Powerful classic, agile or hybrid project management in a secure environment."
 description: "Open source project management software. Powerful classic, agile or hybrid project management in a secure environment."
-icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 24 24'><path fill='currentColor' d='M19.35.37h-1.86a4.63 4.63 0 0 0-4.652 4.624v5.609H4.652A4.63 4.63 0 0 0 0 15.23v3.721c0 2.569 2.083 4.679 4.652 4.679h1.86c2.57 0 4.652-2.11 4.652-4.679v-3.72c0-.063 0-.158-.005-.158H8.373v3.88c0 1.026-.835 1.886-1.861 1.886h-1.86c-1.027 0-1.861-.864-1.861-1.886V15.23a1.84 1.84 0 0 1 1.86-1.833h14.697c2.57 0 4.652-2.11 4.652-4.679V4.997A4.63 4.63 0 0 0 19.35.37m1.861 8.345c0 1.026-.835 1.886-1.861 1.886h-3.721V4.997a1.84 1.84 0 0 1 1.86-1.833h1.86a1.84 1.84 0 0 1 1.862 1.833zm-8.373 9.706v.03c0 .746.629 1.344 1.396 1.344s1.395-.594 1.395-1.34v-3.384h-2.791z'/></svg>"
+icon:        "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 24 24'><path fill='currentColor' d='M19.35.37h-1.86a4.63 4.63 0 0 0-4.652 4.624v5.609H4.652A4.63 4.63 0 0 0 0 15.23v3.721c0 2.569 2.083 4.679 4.652 4.679h1.86c2.57 0 4.652-2.11 4.652-4.679v-3.72c0-.063 0-.158-.005-.158H8.373v3.88c0 1.026-.835 1.886-1.861 1.886h-1.86c-1.027 0-1.861-.864-1.861-1.886V15.23a1.84 1.84 0 0 1 1.86-1.833h14.697c2.57 0 4.652-2.11 4.652-4.679V4.997A4.63 4.63 0 0 0 19.35.37m1.861 8.345c0 1.026-.835 1.886-1.861 1.886h-3.721V4.997a1.84 1.84 0 0 1 1.86-1.833h1.86a1.84 1.84 0 0 1 1.862 1.833zm-8.373 9.706v.03c0 .746.629 1.344 1.396 1.344s1.395-.594 1.395-1.34v-3.384h-2.791z'/></svg>"
 
 _httpPort: 8080
 
@@ -18,7 +18,7 @@
 	ingress: {
 		gerrit: {
 			auth: enabled: false
-			network: input.network
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "open-project"
@@ -30,44 +30,44 @@
 	images: {
 		openProject: {
 			repository: "openproject"
-			name: "openproject"
-			tag: "13.4.1"
+			name:       "openproject"
+			tag:        "13.4.1"
 			pullPolicy: "Always"
 		}
 		postgres: {
 			repository: "library"
-			name: "postgres"
-			tag: "15.3"
+			name:       "postgres"
+			tag:        "15.3"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		openProject: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/openproject"
+			branch:  "main"
+			path:    "charts/openproject"
 		}
 		volume: {
-			path: "charts/volumes"
-			kind: "GitRepository"
+			path:    "charts/volumes"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
+			branch:  "main"
 		}
 		postgres: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/postgresql"
+			branch:  "main"
+			path:    "charts/postgresql"
 		}
 	}
 
 	volume: {
 		openProject: {
-			name: "open-project"
+			name:       "open-project"
 			accessMode: "ReadWriteMany"
-			size: "50Gi"
+			size:       "50Gi"
 		}
 	}
 
@@ -76,29 +76,29 @@
 			chart: charts.openProject
 			values: {
 				image: {
-					registry: images.openProject.registry
-					repository: images.openProject.imageName
-					tag: images.openProject.tag
+					registry:        images.openProject.registry
+					repository:      images.openProject.imageName
+					tag:             images.openProject.tag
 					imagePullPolicy: images.openProject.pullPolicy
 				}
 				nameOverride: "open-project"
-				ingress: enabled: false
+				ingress: enabled:   false
 				memcached: bundled: true
-				s3: enabled: false
+				s3: enabled:        false
 				openproject: {
-					host: _domain
+					host:  _domain
 					https: false
-					hsts: false
+					hsts:  false
 					oidc: enabled: false // TODO(gio): enable
 					admin_user: {
-						password: "admin"
+						password:       "admin"
 						password_reset: false
-						name: "admin"
-						mail: "op-admin@\(networks.public.domain)"
+						name:           "admin"
+						mail:           "op-admin@\(networks.public.domain)"
 					}
 				}
 				persistence: {
-					enabled: true
+					enabled:       true
 					existingClaim: volume.openProject.name
 				}
 				postgresql: {
@@ -115,20 +115,20 @@
 				}
 				service: {
 					enabled: true
-					type: "ClusterIP"
+					type:    "ClusterIP"
 				}
 				initDb: {
 					image: {
-						registry: images.postgres.registry
-						repository: images.postgres.imageName
-						tag: images.postgres.tag
+						registry:        images.postgres.registry
+						repository:      images.postgres.imageName
+						tag:             images.postgres.tag
 						imagePullPolicy: images.postgres.pullPolicy
 					}
 				}
 			}
 		}
 		"open-project-volume": {
-			chart: charts.volume
+			chart:  charts.volume
 			values: volume.openProject
 		}
 		postgres: {
@@ -136,9 +136,9 @@
 			values: {
 				fullnameOverride: "postgres"
 				image: {
-					registry: images.postgres.registry
+					registry:   images.postgres.registry
 					repository: images.postgres.imageName
-					tag: images.postgres.tag
+					tag:        images.postgres.tag
 					pullPolicy: images.postgres.pullPolicy
 				}
 				service: {
@@ -162,7 +162,7 @@
 						fsGroup: 0
 					}
 					containerSecurityContext: {
-						enabled: true
+						enabled:   true
 						runAsUser: 0
 					}
 				}
diff --git a/core/installer/values-tmpl/penpot.cue b/core/installer/values-tmpl/penpot.cue
index 21004f4..7434afd 100644
--- a/core/installer/values-tmpl/penpot.cue
+++ b/core/installer/values-tmpl/penpot.cue
@@ -1,63 +1,63 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "Penpot"
-namespace: "app-penpot"
-readme: "penpot application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
+name:        "Penpot"
+namespace:   "app-penpot"
+readme:      "penpot application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
 description: "Penpot is the first Open Source design and prototyping platform meant for cross-domain teams. Non dependent on operating systems, Penpot is web based and works with open standards (SVG). Penpot invites designers all over the world to fall in love with open source while getting developers excited about the design process in return."
-icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 24 24'><path fill='currentColor' d='M7.654 0L5.13 3.554v2.01L2.934 6.608l-.02-.009v13.109l8.563 4.045L12 24l.523-.247l8.563-4.045V6.6l-.017.008l-2.196-1.045V3.555l-.077-.108L16.349.001l-2.524 3.554v.004L11.989.973l-1.823 2.566l-.065-.091zm.447 2.065l.976 1.374H6.232l.964-1.358zm8.694 0l.976 1.374h-2.845l.965-1.358zm-4.36.971l.976 1.375h-2.845l.965-1.359zM5.962 4.132h1.35v4.544l-1.35-.638Zm2.042 0h1.343v5.506l-1.343-.635zm6.652 0h1.35V9l-1.35.637zm2.042 0h1.343v3.905l-1.343.634zm-6.402.972h1.35v5.62l-1.35-.638zm2.042 0h1.343v4.993l-1.343.634zm6.534 1.493l1.188.486l-1.188.561zM5.13 6.6v1.047l-1.187-.561ZM3.96 8.251l7.517 3.55v10.795l-7.516-3.55zm16.08 0v10.794l-7.517 3.55V11.802z'/></svg>"
+icon:        "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 24 24'><path fill='currentColor' d='M7.654 0L5.13 3.554v2.01L2.934 6.608l-.02-.009v13.109l8.563 4.045L12 24l.523-.247l8.563-4.045V6.6l-.017.008l-2.196-1.045V3.555l-.077-.108L16.349.001l-2.524 3.554v.004L11.989.973l-1.823 2.566l-.065-.091zm.447 2.065l.976 1.374H6.232l.964-1.358zm8.694 0l.976 1.374h-2.845l.965-1.358zm-4.36.971l.976 1.375h-2.845l.965-1.359zM5.962 4.132h1.35v4.544l-1.35-.638Zm2.042 0h1.343v5.506l-1.343-.635zm6.652 0h1.35V9l-1.35.637zm2.042 0h1.343v3.905l-1.343.634zm-6.402.972h1.35v5.62l-1.35-.638zm2.042 0h1.343v4.993l-1.343.634zm6.534 1.493l1.188.486l-1.188.561zM5.13 6.6v1.047l-1.187-.561ZM3.96 8.251l7.517 3.55v10.795l-7.516-3.55zm16.08 0v10.794l-7.517 3.55V11.802z'/></svg>"
 
 out: {
 	images: {
 		postgres: {
 			repository: "library"
-			name: "postgres"
-			tag: "15.3"
+			name:       "postgres"
+			tag:        "15.3"
 			pullPolicy: "IfNotPresent"
 		}
 		backend: {
 			repository: "penpotapp"
-			name: "backend"
-			tag: "1.16.0-beta"
+			name:       "backend"
+			tag:        "1.16.0-beta"
 			pullPolicy: "IfNotPresent"
 		}
 		frontend: {
 			repository: "penpotapp"
-			name: "frontend"
-			tag: "1.16.0-beta"
+			name:       "frontend"
+			tag:        "1.16.0-beta"
 			pullPolicy: "IfNotPresent"
 		}
 		exporter: {
 			repository: "penpotapp"
-			name: "exporter"
-			tag: "1.16.0-beta"
+			name:       "exporter"
+			tag:        "1.16.0-beta"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		postgres: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/postgresql"
+			branch:  "main"
+			path:    "charts/postgresql"
 		}
 		oauth2Client: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/oauth2-client"
+			branch:  "main"
+			path:    "charts/oauth2-client"
 		}
 		penpot: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/penpot"
+			branch:  "main"
+			path:    "charts/penpot"
 		}
 	}
 
@@ -67,13 +67,13 @@
 		"oauth2-client": {
 			chart: charts.oauth2Client
 			values: {
-				name: "\(release.namespace)-penpot"
+				name:       "\(release.namespace)-penpot"
 				secretName: _oauth2SecretName
 				grantTypes: ["authorization_code"]
 				responseTypes: ["code"]
 				scope: "openid profile email"
 				redirectUris: ["https://\(_domain)/api/auth/oauth/oidc/callback"]
-				hydraAdmin: "http://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
+				hydraAdmin:              "http://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
 				tokenEndpointAuthMethod: "client_secret_post"
 			}
 		}
@@ -82,9 +82,9 @@
 			values: {
 				fullnameOverride: "postgres"
 				image: {
-					registry: images.postgres.registry
+					registry:   images.postgres.registry
 					repository: images.postgres.imageName
-					tag: images.postgres.tag
+					tag:        images.postgres.tag
 					pullPolicy: images.postgres.pullPolicy
 				}
 				auth: {
@@ -99,29 +99,29 @@
 			values: {
 				"global": {
 					postgresqlEnabled: false
-					redisEnabled: true // TODO(gio): provide redis from outside
+					redisEnabled:      true // TODO(gio): provide redis from outside
 				}
 				fullnameOverride: "penpot"
 				backend: {
 					image: {
-						repository: images.backend.fullName
-						tag: images.backend.tag
+						repository:      images.backend.fullName
+						tag:             images.backend.tag
 						imagePullPolicy: images.backend.pullPolicy
 					}
 				}
 				frontend: {
 					image: {
-						repository: images.frontend.fullName
-						tag: images.frontend.tag
+						repository:      images.frontend.fullName
+						tag:             images.frontend.tag
 						imagePullPolicy: images.frontend.pullPolicy
 					}
 					ingress: {
-						enabled: true
+						enabled:   true
 						className: input.network.ingressClass
 						if input.network.certificateIssuer != "" {
 							annotations: {
 								"acme.cert-manager.io/http01-edit-in-place": "true"
-								"cert-manager.io/cluster-issuer": input.network.certificateIssuer
+								"cert-manager.io/cluster-issuer":            input.network.certificateIssuer
 							}
 						}
 						hosts: [_domain]
@@ -134,9 +134,9 @@
 				persistence: enabled: true
 				config: {
 					publicURI: _domain
-					flags: "enable-login-with-oidc enable-registration enable-insecure-register disable-demo-users disable-demo-warning" // TODO(gio): remove enable-insecure-register?
+					flags:     "enable-login-with-oidc enable-registration enable-insecure-register disable-demo-users disable-demo-warning" // TODO(gio): remove enable-insecure-register?
 					postgresql: {
-						host: "postgres.\(release.namespace).svc.cluster.local"
+						host:     "postgres.\(release.namespace).svc.cluster.local"
 						database: "penpot"
 						username: "penpot"
 						password: "penpot"
@@ -144,30 +144,30 @@
 					redis: host: "penpot-redis-headless.\(release.namespace).svc.cluster.local"
 					providers: {
 						oidc: {
-							enabled: true
-							baseURI: "https://hydra.\(networks.public.domain)"
-							clientID: ""
-							clientSecret: ""
-							authURI: ""
-							tokenURI: ""
-							userURI: ""
-							roles: ""
+							enabled:        true
+							baseURI:        "https://hydra.\(networks.public.domain)"
+							clientID:       ""
+							clientSecret:   ""
+							authURI:        ""
+							tokenURI:       ""
+							userURI:        ""
+							roles:          ""
 							rolesAttribute: ""
-							scopes: ""
-							nameAttribute: "name"
+							scopes:         ""
+							nameAttribute:  "name"
 							emailAttribute: "email"
 						}
 						existingSecret: _oauth2SecretName
 						secretKeys: {
-							oidcClientIDKey: "client_id"
+							oidcClientIDKey:     "client_id"
 							oidcClientSecretKey: "client_secret"
 						}
 					}
 				}
 				exporter: {
 					image: {
-						repository: images.exporter.fullName
-						tag: images.exporter.tag
+						repository:      images.exporter.fullName
+						tag:             images.exporter.tag
 						imagePullPolicy: images.exporter.pullPolicy
 					}
 				}
diff --git a/core/installer/values-tmpl/pihole.cue b/core/installer/values-tmpl/pihole.cue
index 6607409..297b7d6 100644
--- a/core/installer/values-tmpl/pihole.cue
+++ b/core/installer/values-tmpl/pihole.cue
@@ -1,44 +1,44 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
-	auth: #Auth @name(Authentication)
+	network:     #Network @name(Network)
+	subdomain:   string   @name(Subdomain)
+	auth:        #Auth    @name(Authentication)
 	storageSize: string
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "Pi-hole"
-namespace: "app-pihole"
-readme: "Installs pihole at https://\(_domain)"
+name:        "Pi-hole"
+namespace:   "app-pihole"
+readme:      "Installs pihole at https://\(_domain)"
 description: "Pi-hole is a Linux network-level advertisement and Internet tracker blocking application which acts as a DNS sinkhole and optionally a DHCP server, intended for use on a private network."
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27.39405994 39.68503937'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-16.11987996' y='-9.97439025' width='59.63381987' height='59.63381987'/>
-  <path class='cls-1' d='m13.6958581,39.68503937c-.01621089,0-.03242178-.00078125-.04863267-.0015625l-.11503872-.00937497c-.16074171-.00390624-.32304592-.01249996-.48378764-.02968741-.01210934-.00078125-.02441399-.00234374-.03652333-.00468749-1.49179248-.15312455-2.89628053-.81952884-3.9587774-1.87890072l-7.1394321-7.14294771C.69648232,29.39991341-.00039062,27.71476212.00019531,25.9928922v-.01484371c-.00019531-.01562495-.00019531-.03046866-.00019531-.04531237.00019531-.75312278.14335895-1.49608934.42597531-2.20233726.31581938-.87890366.84413814-1.71171371,1.51952677-2.38671172l7.14704926-7.14294771c.48613138-.48515482,1.03534851-.88515364,1.62929208-1.19140274C3.81366064,11.92027739,1.05409846,5.75779554.80214608.68437298c-.00058594-.01093747-.00078125-.02187494-.00078125-.0328124.00019531-.16718701.06425762-.32734279.17968697-.44921743.12324182-.12890587.29394445-.20234315.47265486-.20234315,6.407403,0,10.65289831,3.19686558,12.00894901,8.89059882,2.40448511-5.62810842,7.81462542-4.90154806,7.87712524-4.89373559.30351473.04531237.53456874.29609288.55488118.60234198.01269528.19140569.01894526.38124888.01894526.56952957.00019531,1.88436945-.63163876,3.58748943-1.84374457,4.95545416-1.04277037,1.17655903-2.48260988,2.05780644-4.13436282,2.56092996.90038797.32656154,1.72226055.84687251,2.39901637,1.52108927l7.14294771,7.14685395c1.22050422,1.2218714,1.8982366,2.84061663,1.9130803,4.56483031.00234374.02265618.00351561.04453112.00351561.0671873,0,.02343743-.00136718.04765611-.00410155.07109354l-.00800779.15312455c-.00937497.30859284-.04335925.63202939-.10058564.94843471l-.02070306.10781218c-.25214769,1.27812124-.87011462,2.43749282-1.78769005,3.35702136l-7.14724458,7.14138522c-1.19374648,1.19218399-2.83612446,1.88593195-4.52186168,1.91171312-.03535146.00624998-.07148416.00937497-.10800749.00937497Zm-.00468749-1.31327738c.00507811-.00546873.00937497-.00078125.01386715,0,1.37714438,0,2.72440604-.55781086,3.69842661-1.53124549l7.14665864-7.14060397c.73398221-.73515408,1.22851201-1.66327635,1.4298786-2.68358585l.01874994-.09687471c.04433581-.24687427.07167948-.50624851.07949195-.763279l.00546873-.11015593v-.00234374c0-.00859372.00097656-.02656242.00253906-.04687486-.00019531-.00468749-.00019531-.00937497-.00019531-.01406246v-.00859372c-.00039062-1.39687089-.54413902-2.71014827-1.53163611-3.69920786l-7.14158053-7.14529146c-.61738099-.61484194-1.38671467-1.07030935-2.2242122-1.31718362l-.10703093-.03046866c-.43261591-.12421838-.88085678-.18749945-1.33339451-.18749945-.00996091,0-.02968741-.00078125-.04960923-.0015625-1.39081622.00390624-2.6992108.54687339-3.68377821,1.53124549l-7.14685395,7.14216646c-.5404281.54062341-.9630831,1.2070277-1.22245734,1.92733807-.22871026.57187332-.340624,1.15234036-.34081931,1.74530736,0,.01249996.00019531.02421868.00019531.03593739v.01171872c-.00058594,1.38515217.55722492,2.73436695,1.53163611,3.70936408l7.13845554,7.14216646c.85761466.85468498,1.99472069,1.3906209,3.20116245,1.50702681.01425777.0015625.02832023.00312499.04238269.00546873.04140613.00390624.08281226.00703123.12421838.01015622.03066397-.00312499.0623045-.00468749.09355441-.00234374l.10820281.00624998c.03749989.00312499.07480447.00546873.11269498.00624998l.03398427.00078125Zm-1.58065941-26.05773576c0,.05859358-.00234374.11640591-.00703123.17265574.1162106-.02890616.23359306-.05546859.35175678-.07812477-.10859343-.17656198-.24003836-.36718642-.39081916-.57031082.03027335.16484326.04628893.32343655.04609361.47577985Zm8.4613032-7.05935421c-1.50272995,0-5.46775733.58046704-6.61619145,6.52419953,2.09218134-.26718671,3.93651184-1.16484032,5.13787549-2.52030508.97675494-1.1023405,1.49491747-2.47733645,1.51464398-4.00389446h-.03632802ZM2.15331397,1.31874612c.58261547,6.57576188,4.61092392,9.62184666,8.53884204,10.35856324-.68027143-2.00936908-4.21483134-5.63513965-6.5759572-7.69372734-.03574208-.03046866-.06796855-.06562481-.09609347-.10390594-.08496069-.11484341-.1261715-.2539055-.1261715-.39218634,0-.19609317.08222632-.3914051.23808524-.52109222.26621015-.22187435.6845683-.19609317.92070041.05859358.20351503.17109325,4.80408741,4.15155027,7.33845495,7.14216646C11.47340371,4.6531113,7.90075798,1.54921419,2.15331397,1.31874612Zm6.50251991,33.47880765c-.33847557,0-.62382629-.26093673-.64980277-.60234198l-.01269528-.16640576c-.01074216-.14687457-.01562495-.29218664-.01562495-.43437372.00019531-1.51874553.57206863-2.82030419,1.12675449-4.08358172.51972503-1.18280902,1.0105439-2.29999323,1.0105439-3.5312396-.10839812-1.42968329-.6550762-2.62342977-1.57929222-3.40311498-.85624748-.72265412-2.03534557-1.06562186-3.2396389-.95624718-.35839738.04921861-.6748027-.22656183-.71093541-.58359203-.00234374-.02187494-.0033203-.04453112-.0033203-.06640605-.00019531-.32890528.24824146-.61171695.58261547-.64765434.17089793-.01874994.34687398-.03593739.52988125-.04609361,1.69374501-.12031215,3.12186581.50546726,4.50291643,1.11249672,1.18280902.51952972,2.29999323,1.01015327,3.53182554,1.01015327,3.07577219-.23046807,4.28651081-2.28280578,4.37791679-4.1257691.01738276-.35234271.3144522-.62968565.66347461-.62031067.3521474.00624998.63574032.29140539.6404278.6437481.00039062.02734367.00058594.05468734.00039062.08203101-.00039062,1.51718303-.57011551,2.82030419-1.12128576,4.08045673-.51738129,1.18359026-1.00605172,2.30077447-1.00605172,3.53202085.24804614,3.3429589,2.60526576,4.45936187,4.54471318,4.37889335.34843647-.04218738.65273245.25468675.67675582.60702946.00117187.01484371.0015625.02968741.0015625.04531237.00019531.33281152-.25273363.61562319-.58906077.64843559l-.19433537.01718745c-1.69433095.11484341-3.12264705-.50390477-4.50447892-1.11015298-1.18222308-.51874847-2.29901667-1.00937203-3.53006773-1.00937203-3.03631918.22421809-4.38436209,2.31952442-4.38475271,4.35936216,0,.06328106.00136718.12656213.00390624.19062444.00039062.00859372.00058594.0179687.00058594.02656242.00019531.34374899-.26796796.63124814-.61406069.65156058-.0130859.00078125-.02597649.00078125-.03886707.00078125Zm2.76210124-8.85700516c-.00039062,1.18359026-.33222558,2.21796222-.73398221,3.19842808.79550547-.47031111,1.77733852-.78671643,2.95741316-.87343493h.00703123c1.18925431,0,2.22811844.33515526,3.21268585.73906032-.47382673-.79687265-.79296641-1.78124475-.88007553-2.96561627v-.00859372c.00039062-1.17187155.32441311-2.19764978.71933382-3.16952192-.77753677.44687368-1.74296362.75312278-2.92284295.84140377h-.00742185c-1.19804335,0-2.24315746-.33984275-3.23397485-.74765405.49765478.84140377.79745859,1.84608831.88183334,2.97655373v.00937497Z'/>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27.39405994 39.68503937'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-16.11987996' y='-9.97439025' width='59.63381987' height='59.63381987'/>
+	  <path class='cls-1' d='m13.6958581,39.68503937c-.01621089,0-.03242178-.00078125-.04863267-.0015625l-.11503872-.00937497c-.16074171-.00390624-.32304592-.01249996-.48378764-.02968741-.01210934-.00078125-.02441399-.00234374-.03652333-.00468749-1.49179248-.15312455-2.89628053-.81952884-3.9587774-1.87890072l-7.1394321-7.14294771C.69648232,29.39991341-.00039062,27.71476212.00019531,25.9928922v-.01484371c-.00019531-.01562495-.00019531-.03046866-.00019531-.04531237.00019531-.75312278.14335895-1.49608934.42597531-2.20233726.31581938-.87890366.84413814-1.71171371,1.51952677-2.38671172l7.14704926-7.14294771c.48613138-.48515482,1.03534851-.88515364,1.62929208-1.19140274C3.81366064,11.92027739,1.05409846,5.75779554.80214608.68437298c-.00058594-.01093747-.00078125-.02187494-.00078125-.0328124.00019531-.16718701.06425762-.32734279.17968697-.44921743.12324182-.12890587.29394445-.20234315.47265486-.20234315,6.407403,0,10.65289831,3.19686558,12.00894901,8.89059882,2.40448511-5.62810842,7.81462542-4.90154806,7.87712524-4.89373559.30351473.04531237.53456874.29609288.55488118.60234198.01269528.19140569.01894526.38124888.01894526.56952957.00019531,1.88436945-.63163876,3.58748943-1.84374457,4.95545416-1.04277037,1.17655903-2.48260988,2.05780644-4.13436282,2.56092996.90038797.32656154,1.72226055.84687251,2.39901637,1.52108927l7.14294771,7.14685395c1.22050422,1.2218714,1.8982366,2.84061663,1.9130803,4.56483031.00234374.02265618.00351561.04453112.00351561.0671873,0,.02343743-.00136718.04765611-.00410155.07109354l-.00800779.15312455c-.00937497.30859284-.04335925.63202939-.10058564.94843471l-.02070306.10781218c-.25214769,1.27812124-.87011462,2.43749282-1.78769005,3.35702136l-7.14724458,7.14138522c-1.19374648,1.19218399-2.83612446,1.88593195-4.52186168,1.91171312-.03535146.00624998-.07148416.00937497-.10800749.00937497Zm-.00468749-1.31327738c.00507811-.00546873.00937497-.00078125.01386715,0,1.37714438,0,2.72440604-.55781086,3.69842661-1.53124549l7.14665864-7.14060397c.73398221-.73515408,1.22851201-1.66327635,1.4298786-2.68358585l.01874994-.09687471c.04433581-.24687427.07167948-.50624851.07949195-.763279l.00546873-.11015593v-.00234374c0-.00859372.00097656-.02656242.00253906-.04687486-.00019531-.00468749-.00019531-.00937497-.00019531-.01406246v-.00859372c-.00039062-1.39687089-.54413902-2.71014827-1.53163611-3.69920786l-7.14158053-7.14529146c-.61738099-.61484194-1.38671467-1.07030935-2.2242122-1.31718362l-.10703093-.03046866c-.43261591-.12421838-.88085678-.18749945-1.33339451-.18749945-.00996091,0-.02968741-.00078125-.04960923-.0015625-1.39081622.00390624-2.6992108.54687339-3.68377821,1.53124549l-7.14685395,7.14216646c-.5404281.54062341-.9630831,1.2070277-1.22245734,1.92733807-.22871026.57187332-.340624,1.15234036-.34081931,1.74530736,0,.01249996.00019531.02421868.00019531.03593739v.01171872c-.00058594,1.38515217.55722492,2.73436695,1.53163611,3.70936408l7.13845554,7.14216646c.85761466.85468498,1.99472069,1.3906209,3.20116245,1.50702681.01425777.0015625.02832023.00312499.04238269.00546873.04140613.00390624.08281226.00703123.12421838.01015622.03066397-.00312499.0623045-.00468749.09355441-.00234374l.10820281.00624998c.03749989.00312499.07480447.00546873.11269498.00624998l.03398427.00078125Zm-1.58065941-26.05773576c0,.05859358-.00234374.11640591-.00703123.17265574.1162106-.02890616.23359306-.05546859.35175678-.07812477-.10859343-.17656198-.24003836-.36718642-.39081916-.57031082.03027335.16484326.04628893.32343655.04609361.47577985Zm8.4613032-7.05935421c-1.50272995,0-5.46775733.58046704-6.61619145,6.52419953,2.09218134-.26718671,3.93651184-1.16484032,5.13787549-2.52030508.97675494-1.1023405,1.49491747-2.47733645,1.51464398-4.00389446h-.03632802ZM2.15331397,1.31874612c.58261547,6.57576188,4.61092392,9.62184666,8.53884204,10.35856324-.68027143-2.00936908-4.21483134-5.63513965-6.5759572-7.69372734-.03574208-.03046866-.06796855-.06562481-.09609347-.10390594-.08496069-.11484341-.1261715-.2539055-.1261715-.39218634,0-.19609317.08222632-.3914051.23808524-.52109222.26621015-.22187435.6845683-.19609317.92070041.05859358.20351503.17109325,4.80408741,4.15155027,7.33845495,7.14216646C11.47340371,4.6531113,7.90075798,1.54921419,2.15331397,1.31874612Zm6.50251991,33.47880765c-.33847557,0-.62382629-.26093673-.64980277-.60234198l-.01269528-.16640576c-.01074216-.14687457-.01562495-.29218664-.01562495-.43437372.00019531-1.51874553.57206863-2.82030419,1.12675449-4.08358172.51972503-1.18280902,1.0105439-2.29999323,1.0105439-3.5312396-.10839812-1.42968329-.6550762-2.62342977-1.57929222-3.40311498-.85624748-.72265412-2.03534557-1.06562186-3.2396389-.95624718-.35839738.04921861-.6748027-.22656183-.71093541-.58359203-.00234374-.02187494-.0033203-.04453112-.0033203-.06640605-.00019531-.32890528.24824146-.61171695.58261547-.64765434.17089793-.01874994.34687398-.03593739.52988125-.04609361,1.69374501-.12031215,3.12186581.50546726,4.50291643,1.11249672,1.18280902.51952972,2.29999323,1.01015327,3.53182554,1.01015327,3.07577219-.23046807,4.28651081-2.28280578,4.37791679-4.1257691.01738276-.35234271.3144522-.62968565.66347461-.62031067.3521474.00624998.63574032.29140539.6404278.6437481.00039062.02734367.00058594.05468734.00039062.08203101-.00039062,1.51718303-.57011551,2.82030419-1.12128576,4.08045673-.51738129,1.18359026-1.00605172,2.30077447-1.00605172,3.53202085.24804614,3.3429589,2.60526576,4.45936187,4.54471318,4.37889335.34843647-.04218738.65273245.25468675.67675582.60702946.00117187.01484371.0015625.02968741.0015625.04531237.00019531.33281152-.25273363.61562319-.58906077.64843559l-.19433537.01718745c-1.69433095.11484341-3.12264705-.50390477-4.50447892-1.11015298-1.18222308-.51874847-2.29901667-1.00937203-3.53006773-1.00937203-3.03631918.22421809-4.38436209,2.31952442-4.38475271,4.35936216,0,.06328106.00136718.12656213.00390624.19062444.00039062.00859372.00058594.0179687.00058594.02656242.00019531.34374899-.26796796.63124814-.61406069.65156058-.0130859.00078125-.02597649.00078125-.03886707.00078125Zm2.76210124-8.85700516c-.00039062,1.18359026-.33222558,2.21796222-.73398221,3.19842808.79550547-.47031111,1.77733852-.78671643,2.95741316-.87343493h.00703123c1.18925431,0,2.22811844.33515526,3.21268585.73906032-.47382673-.79687265-.79296641-1.78124475-.88007553-2.96561627v-.00859372c.00039062-1.17187155.32441311-2.19764978.71933382-3.16952192-.77753677.44687368-1.74296362.75312278-2.92284295.84140377h-.00742185c-1.19804335,0-2.24315746-.33984275-3.23397485-.74765405.49765478.84140377.79745859,1.84608831.88183334,2.97655373v.00937497Z'/>
+	</svg>"""
 
 _serviceWebPort: 80
 
 out: {
 	ingress: {
 		pihole: {
-			auth: input.auth
-			network: input.network
+			auth:      input.auth
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "pihole-web"
@@ -50,18 +50,18 @@
 	images: {
 		pihole: {
 			repository: "pihole"
-			name: "pihole"
-			tag: "v5.8.1"
+			name:       "pihole"
+			tag:        "v5.8.1"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		pihole: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/pihole"
+			branch:  "main"
+			path:    "charts/pihole"
 		}
 	}
 
@@ -70,11 +70,11 @@
 	helm: {
 		pihole: {
 			chart: charts.pihole
-			info: "Installing Pi-hole server"
+			info:  "Installing Pi-hole server"
 			values: {
 				fullnameOverride: "pihole"
 				persistentVolumeClaim: {
-					enabled: true
+					enabled:       true
 					existingClaim: volume.data.name
 				}
 				admin: {
@@ -93,7 +93,7 @@
 					type: "ClusterIP"
 					http: {
 						enabled: true
-						port: _serviceWebPort
+						port:    _serviceWebPort
 					}
 					https: {
 						enabled: false
@@ -102,17 +102,17 @@
 				virtualHost: _domain
 				resources: {
 					requests: {
-						cpu: "250m"
+						cpu:    "250m"
 						memory: "100M"
 					}
 					limits: {
-						cpu: "500m"
+						cpu:    "500m"
 						memory: "250M"
 					}
 				}
 				image: {
 					repository: images.pihole.fullName
-					tag: images.pihole.tag
+					tag:        images.pihole.tag
 					pullPolicy: images.pihole.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/private-network.cue b/core/installer/values-tmpl/private-network.cue
index 1fcf783..c74480f 100644
--- a/core/installer/values-tmpl/private-network.cue
+++ b/core/installer/values-tmpl/private-network.cue
@@ -8,78 +8,78 @@
 		username: string
 		ipSubnet: string // TODO(gio): use cidr type
 	}
-	sshPrivateKey: string
+	sshPrivateKey:          string
 	controllerReplicaCount: int | *3
 }
 
-name: "private-network"
+name:      "private-network"
 namespace: "ingress-private"
 
 out: {
 	images: {
 		"ingress-nginx": {
-			registry: "registry.k8s.io"
+			registry:   "registry.k8s.io"
 			repository: "ingress-nginx"
-			name: "controller"
-			tag: "v1.8.0"
+			name:       "controller"
+			tag:        "v1.8.0"
 			pullPolicy: "IfNotPresent"
 		}
 		nginx: {
 			repository: "library"
-			name: "nginx"
-			tag: "1.27.1-alpine3.20-slim"
+			name:       "nginx"
+			tag:        "1.27.1-alpine3.20-slim"
 			pullPolicy: "IfNotPresent"
 		}
 		tailscale: {
 			repository: "tailscale"
-			name: "tailscale"
-			tag: "v1.82.0"
+			name:       "tailscale"
+			tag:        "v1.82.0"
 			pullPolicy: "IfNotPresent"
 		}
 		portAllocator: {
 			repository: "giolekva"
-			name: "port-allocator"
-			tag: "latest"
+			name:       "port-allocator"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		"access-secrets": {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/access-secrets"
+			branch:  "main"
+			path:    "charts/access-secrets"
 		}
 		service: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/service"
+			branch:  "main"
+			path:    "charts/service"
 		}
 		"ingress-nginx": {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/ingress-nginx"
+			branch:  "main"
+			path:    "charts/ingress-nginx"
 		}
 		"tailscale-proxy": {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/tailscale-proxy"
+			branch:  "main"
+			path:    "charts/tailscale-proxy"
 		}
 		portAllocator: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/port-allocator"
+			branch:  "main"
+			path:    "charts/port-allocator"
 		}
 		headscaleUser: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/headscale-user"
+			branch:  "main"
+			path:    "charts/headscale-user"
 		}
 	}
 
@@ -112,7 +112,7 @@
 					}
 					service: {
 						enabled: true
-						type: "LoadBalancer"
+						type:    "LoadBalancer"
 						annotations: {
 							"metallb.universe.tf/address-pool": _ingressPrivate
 						}
@@ -123,13 +123,13 @@
 					}
 					ingressClassByName: true
 					ingressClassResource: {
-						name: _ingressPrivate
-						enabled: true
-						default: false
+						name:            _ingressPrivate
+						enabled:         true
+						default:         false
 						controllerValue: "k8s.io/\(_ingressPrivate)"
 					}
 					config: {
-						"proxy-body-size": "200M" // TODO(giolekva): configurable
+						"proxy-body-size":    "200M" // TODO(giolekva): configurable
 						"force-ssl-redirect": "true"
 						"server-snippet": """
 						more_clear_headers "X-Frame-Options";
@@ -156,7 +156,7 @@
 					}]
 					shareProcessNamespace: true
 					extraContainers: [{
-						name: "proxy"
+						name:  "proxy"
 						image: images.tailscale.fullNameWithTag
 						securityContext: {
 							capabilities: {
@@ -165,7 +165,7 @@
 							privileged: true
 						}
 						env: [{
-							name: "TS_STATE_DIR"
+							name:  "TS_STATE_DIR"
 							value: "/ts-state"
 						}, {
 							name: "TS_HOSTNAME"
@@ -175,57 +175,57 @@
 								}
 							}
 						}, {
-							name: "TS_EXTRA_ARGS"
+							name:  "TS_EXTRA_ARGS"
 							value: "--login-server=https://headscale.\(global.domain)"
 						}, {
-							name: "TS_USERSPACE"
+							name:  "TS_USERSPACE"
 							value: "false"
 						}]
 						command: ["/bin/sh"]
 						args: [
 							"-c",
-							"TS_AUTHKEY=$(wget --post-data=\"\" -O /tmp/authkey http://headscale-api.\(global.namespacePrefix)app-headscale.svc.cluster.local/user/private-network-proxy/preauthkey > /dev/null 2>&1 && cat /tmp/authkey) /usr/local/bin/containerboot"
-						],
+							"TS_AUTHKEY=$(wget --post-data=\"\" -O /tmp/authkey http://headscale-api.\(global.namespacePrefix)app-headscale.svc.cluster.local/user/private-network-proxy/preauthkey > /dev/null 2>&1 && cat /tmp/authkey) /usr/local/bin/containerboot",
+						]
 						volumeMounts: [{
 							mountPath: "/ts-state"
-							name: "ts-proxy-state"
-							readOnly: false
+							name:      "ts-proxy-state"
+							readOnly:  false
 						}]
 					}, {
-						name: "proxy-backend"
-						image: images.nginx.fullNameWithTag
+						name:            "proxy-backend"
+						image:           images.nginx.fullNameWithTag
 						imagePullPolicy: images.nginx.pullPolicy
 						ports: [{
-							name: "proxy"
+							name:          "proxy"
 							containerPort: 9090
-							protocol: "TCP"
+							protocol:      "TCP"
 						}]
 						volumeMounts: [{
-							name: _proxyBackendConfigName
+							name:      _proxyBackendConfigName
 							mountPath: "/etc/nginx"
-							readOnly: true
+							readOnly:  true
 						}, {
-							name: "proxy-backend-pid"
+							name:      "proxy-backend-pid"
 							mountPath: "/var/run/nginx"
-							readOnly: false
+							readOnly:  false
 						}]
 					}, {
-						name: "reload-config"
-						image: "giolekva/reload:latest"
+						name:            "reload-config"
+						image:           "giolekva/reload:latest"
 						imagePullPolicy: "Always"
 						command: [
 							"/usr/bin/reload",
 							"--watch=/etc/nginx/nginx.conf",
 							"--reload=/var/run/nginx/nginx.pid",
-					    ]
+						]
 						volumeMounts: [{
-							name: "proxy-backend-config"
+							name:      "proxy-backend-config"
 							mountPath: "/etc/nginx"
-							readOnly: true
+							readOnly:  true
 						}, {
-							name: "proxy-backend-pid"
+							name:      "proxy-backend-pid"
 							mountPath: "/var/run/nginx"
-							readOnly: true
+							readOnly:  true
 						}]
 						securityContext: {
 							capabilities: {
@@ -237,9 +237,9 @@
 						enabled: false
 					}
 					image: {
-						registry: images["ingress-nginx"].registry
-						image: images["ingress-nginx"].imageName
-						tag: images["ingress-nginx"].tag
+						registry:   images["ingress-nginx"].registry
+						image:      images["ingress-nginx"].imageName
+						tag:        images["ingress-nginx"].tag
 						pullPolicy: images["ingress-nginx"].pullPolicy
 					}
 				}
@@ -248,15 +248,15 @@
 		"tailscale-proxy": {
 			chart: charts["tailscale-proxy"]
 			values: {
-				hostname: input.privateNetwork.hostname
-				apiServer: "http://headscale-api.\(global.namespacePrefix)app-headscale.svc.cluster.local"
-				loginServer: "https://headscale.\(networks.public.domain)" // TODO(gio): take headscale subdomain from configuration
-				ipSubnet: input.privateNetwork.ipSubnet
-				username: input.privateNetwork.username // TODO(gio): maybe install headscale-user chart separately?
+				hostname:         input.privateNetwork.hostname
+				apiServer:        "http://headscale-api.\(global.namespacePrefix)app-headscale.svc.cluster.local"
+				loginServer:      "https://headscale.\(networks.public.domain)" // TODO(gio): take headscale subdomain from configuration
+				ipSubnet:         input.privateNetwork.ipSubnet
+				username:         input.privateNetwork.username // TODO(gio): maybe install headscale-user chart separately?
 				preAuthKeySecret: "headscale-preauth-key"
 				image: {
 					repository: images.tailscale.fullName
-					tag: images.tailscale.tag
+					tag:        images.tailscale.tag
 					pullPolicy: images.tailscale.pullPolicy
 				}
 			}
@@ -264,12 +264,12 @@
 		"port-allocator": {
 			chart: charts.portAllocator
 			values: {
-				repoAddr: release.repoAddr
-				sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
+				repoAddr:         release.repoAddr
+				sshPrivateKey:    base64.Encode(null, input.sshPrivateKey)
 				ingressNginxPath: "\(release.appDir)/resources/ingress-nginx.yaml"
 				image: {
 					repository: images.portAllocator.fullName
-					tag: images.portAllocator.tag
+					tag:        images.portAllocator.tag
 					pullPolicy: images.portAllocator.pullPolicy
 				}
 			}
@@ -282,14 +282,14 @@
 				type: "ClusterIP"
 				selector: {
 					"app.kubernetes.io/component": "controller"
-					"app.kubernetes.io/instance": "ingress-nginx"
-					"app.kubernetes.io/name": "ingress-nginx"
+					"app.kubernetes.io/instance":  "ingress-nginx"
+					"app.kubernetes.io/name":      "ingress-nginx"
 				}
-				ports:[{
-					name: "http"
-					port: 80
+				ports: [{
+					name:       "http"
+					port:       80
 					targetPort: 9090
-					protocol: "TCP"
+					protocol:   "TCP"
 				}]
 			}
 		}
@@ -298,31 +298,31 @@
 resources: {
 	"proxy-backend-config": {
 		apiVersion: "v1"
-		kind: "ConfigMap"
+		kind:       "ConfigMap"
 		metadata: {
-			name: "proxy-backend-config"
+			name:      "proxy-backend-config"
 			namespace: release.namespace
 		}
 		data: {
 			"nginx.conf": """
-worker_processes  1;
-worker_rlimit_nofile 8192;
-pid /var/run/nginx/nginx.pid;
-events {
-	worker_connections  1024;
-}
-http {
-	map $http_host $backend {
-	}
-	server {
-		listen 9090;
-		location / {
-			resolver 135.181.48.180;
-			proxy_pass http://$backend;
-		}
-	}
-}
-"""
+				worker_processes  1;
+				worker_rlimit_nofile 8192;
+				pid /var/run/nginx/nginx.pid;
+				events {
+					worker_connections  1024;
+				}
+				http {
+					map $http_host $backend {
+					}
+					server {
+						listen 9090;
+						location / {
+							resolver 135.181.48.180;
+							proxy_pass http://$backend;
+						}
+					}
+				}
+				"""
 		}
 	}
 }
diff --git a/core/installer/values-tmpl/qbittorrent.cue b/core/installer/values-tmpl/qbittorrent.cue
index bec6a3c..279258e 100644
--- a/core/installer/values-tmpl/qbittorrent.cue
+++ b/core/installer/values-tmpl/qbittorrent.cue
@@ -1,34 +1,34 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "qBitorrent"
-namespace: "app-qbittorrent"
-readme: "qbittorrent application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
+name:        "qBitorrent"
+namespace:   "app-qbittorrent"
+readme:      "qbittorrent application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
 description: "qBittorrent is a cross-platform free and open-source BitTorrent client written in native C++. It relies on Boost, Qt 6 toolkit and the libtorrent-rasterbar library, with an optional search engine written in Python."
-icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><circle cx='24' cy='24' r='21.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M26.651 22.364a5.034 5.034 0 0 1 5.035-5.035h0a5.034 5.034 0 0 1 5.034 5.035v3.272a5.034 5.034 0 0 1-5.034 5.035h0a5.034 5.034 0 0 1-5.035-5.035m0 5.035V10.533m-5.302 15.103a5.034 5.034 0 0 1-5.035 5.035h0a5.034 5.034 0 0 1-5.034-5.035v-3.272a5.034 5.034 0 0 1 5.034-5.035h0a5.034 5.034 0 0 1 5.035 5.035m0-5.035v20.138'/></svg>"
+icon:        "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><circle cx='24' cy='24' r='21.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><path fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='M26.651 22.364a5.034 5.034 0 0 1 5.035-5.035h0a5.034 5.034 0 0 1 5.034 5.035v3.272a5.034 5.034 0 0 1-5.034 5.035h0a5.034 5.034 0 0 1-5.035-5.035m0 5.035V10.533m-5.302 15.103a5.034 5.034 0 0 1-5.035 5.035h0a5.034 5.034 0 0 1-5.034-5.035v-3.272a5.034 5.034 0 0 1 5.034-5.035h0a5.034 5.034 0 0 1 5.035 5.035m0-5.035v20.138'/></svg>"
 
 out: {
 	images: {
 		qbittorrent: {
-			registry: "lscr.io"
+			registry:   "lscr.io"
 			repository: "linuxserver"
-			name: "qbittorrent"
-			tag: "4.5.3"
+			name:       "qbittorrent"
+			tag:        "4.5.3"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		qbittorrent: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/qbittorrent"
+			branch:  "main"
+			path:    "charts/qbittorrent"
 		}
 	}
 
@@ -39,14 +39,14 @@
 				pcloudInstanceId: global.id
 				ingress: {
 					className: input.network.ingressClass
-					domain: _domain
+					domain:    _domain
 				}
-				webui: port: 8080
+				webui: port:      8080
 				bittorrent: port: 6881
-				storage: size: "100Gi"
+				storage: size:    "100Gi"
 				image: {
 					repository: images.qbittorrent.fullName
-					tag: images.qbittorrent.tag
+					tag:        images.qbittorrent.tag
 					pullPolicy: images.qbittorrent.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/resource-renderer-controller.cue b/core/installer/values-tmpl/resource-renderer-controller.cue
index 1169be7..b8e721c 100644
--- a/core/installer/values-tmpl/resource-renderer-controller.cue
+++ b/core/installer/values-tmpl/resource-renderer-controller.cue
@@ -1,31 +1,31 @@
 input: {}
 
-name: "resource-renderer-controller"
+name:      "resource-renderer-controller"
 namespace: "rr-controller"
 
 out: {
 	images: {
 		resourceRenderer: {
 			repository: "giolekva"
-			name: "resource-renderer-controller"
-			tag: "latest"
+			name:       "resource-renderer-controller"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 		kubeRBACProxy: {
-			registry: "gcr.io"
+			registry:   "gcr.io"
 			repository: "kubebuilder"
-			name: "kube-rbac-proxy"
-			tag: "v0.13.0"
+			name:       "kube-rbac-proxy"
+			tag:        "v0.13.0"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		resourceRenderer: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/resource-renderer-controller"
+			branch:  "main"
+			path:    "charts/resource-renderer-controller"
 		}
 	}
 
@@ -36,13 +36,13 @@
 				installCRDs: true
 				image: {
 					repository: images.resourceRenderer.fullName
-					tag: images.resourceRenderer.tag
+					tag:        images.resourceRenderer.tag
 					pullPolicy: images.resourceRenderer.pullPolicy
 				}
 				kubeRBACProxy: {
 					image: {
 						repository: images.kubeRBACProxy.fullName
-						tag: images.kubeRBACProxy.tag
+						tag:        images.kubeRBACProxy.tag
 						pullPolicy: images.kubeRBACProxy.pullPolicy
 					}
 				}
diff --git a/core/installer/values-tmpl/rpuppy.cue b/core/installer/values-tmpl/rpuppy.cue
index ab77052..bf5f42e 100644
--- a/core/installer/values-tmpl/rpuppy.cue
+++ b/core/installer/values-tmpl/rpuppy.cue
@@ -1,42 +1,42 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
-	auth: #Auth @name(Authentication)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
+	auth:      #Auth    @name(Authentication)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
 
-name: "rPuppy"
-namespace: "app-rpuppy"
-readme: "rpuppy application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
+name:        "rPuppy"
+namespace:   "app-rpuppy"
+readme:      "rpuppy application will be installed on \(input.network.name) network and be accessible to any user on https://\(_domain)"
 description: "Delights users with randomly generate puppy pictures. Can be configured to be reachable only from private network or publicly."
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 35.28811582'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-9.97439025' y='-12.17285203' width='59.63381987' height='59.63381987'/>
-  <path class='cls-1' d='m14.69492647,20.58774252c0,.81187845-.65815748,1.47003733-1.47003733,1.47003733s-1.47003733-.65815888-1.47003733-1.47003733.65815748-1.47003733,1.47003733-1.47003733,1.47003733.65815888,1.47003733,1.47003733Zm11.76029864,1.47003733c.81187845,0,1.47003733-.65815888,1.47003733-1.47003733s-.65815888-1.47003733-1.47003733-1.47003733-1.47003733.65815888-1.47003733,1.47003733.65815888,1.47003733,1.47003733,1.47003733Zm11.93302847-1.67400512c-.28823261.13266248-.60148138.20220416-.91877333.20396779-.67326615-.00164868-1.30777436-.31516942-1.71810725-.84894566l-.47592391-.60455162v9.53870259c0,3.65345583-2.96171215,6.61516798-6.61516798,6.61516798H11.01983314c-3.65345653,0-6.61516798-2.96171215-6.61516798-6.61516798v-9.53870539l-.46489908.60087854c-.4112799.53507163-1.04691527.84983729-1.72178173.85262154-.31731614-.00153652-.63061468-.07108941-.91877333-.20396779-.93389637-.40992073-1.45678447-1.41441689-1.25688194-2.4145362L3.05958106,1.79882791C3.28415382.60189453,4.43651156-.18635988,5.63344528.03821253c.0427079.00801312.08516977.01728658.12732951.02780882h.02940072l9.74634766,2.88127322h8.60706789L33.89728908.08072171h.02940142c1.1815748-.29489426,2.3784896.42390294,2.67338421,1.6054781.01052294.04215975.01979535.08462091.02780882.12732881l3.01725128,16.17041062c.19308035.99533591-.3287598,1.99171485-1.25688124,2.39983549ZM14.18960113,4.08289846L5.38591511,1.49563243c-.05549777-.01236298-.1121963-.01852589-.16905396-.01837519-.35274343.00096593-.655062.25238438-.72031866.5990399L1.47929086,18.24670707c-.07691341.39858747.18385385.78405561.58244062.86096867.27107851.05230907.54860733-.05169782.7185424-.26927842L14.18960113,4.08289846Zm19.61581061,13.1513214l-9.92275197-12.81688797h-8.08520531l-9.92275197,12.81688797v11.43872797c0,2.84157738,2.30355327,5.14513065,5.14513065,5.14513065h8.08520531v-3.3700599l-2.72508204-2.72508204c-.28720218-.28720359-.28720218-.7528485,0-1.04005208s.7528499-.28720359,1.04005208,0l2.42004862,2.42004862,2.42004862-2.42004862c.28720359-.28720359.7528485-.28720359,1.04005208,0s.28720359.7528485,0,1.04005208l-2.72508204,2.72508204v3.3700599h8.08520531c2.84157738,0,5.14513065-2.30355327,5.14513065-5.14513065v-11.43872797Zm4.39541128,1.00697619l-3.01725128-16.17041062c-.07464473-.39901786-.45862401-.66197355-.85764328-.58732812-.01062388.00198795-.02120289.00420932-.03172863.00666341l-8.80368673,2.59277845,11.41300243,14.75182508c.25293745.31750505.71537192.36984776,1.03287697.11691312.21288131-.1695895.31462267-.44293353.26443052-.71044131Z'/>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 35.28811582'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-9.97439025' y='-12.17285203' width='59.63381987' height='59.63381987'/>
+	  <path class='cls-1' d='m14.69492647,20.58774252c0,.81187845-.65815748,1.47003733-1.47003733,1.47003733s-1.47003733-.65815888-1.47003733-1.47003733.65815748-1.47003733,1.47003733-1.47003733,1.47003733.65815888,1.47003733,1.47003733Zm11.76029864,1.47003733c.81187845,0,1.47003733-.65815888,1.47003733-1.47003733s-.65815888-1.47003733-1.47003733-1.47003733-1.47003733.65815888-1.47003733,1.47003733.65815888,1.47003733,1.47003733,1.47003733Zm11.93302847-1.67400512c-.28823261.13266248-.60148138.20220416-.91877333.20396779-.67326615-.00164868-1.30777436-.31516942-1.71810725-.84894566l-.47592391-.60455162v9.53870259c0,3.65345583-2.96171215,6.61516798-6.61516798,6.61516798H11.01983314c-3.65345653,0-6.61516798-2.96171215-6.61516798-6.61516798v-9.53870539l-.46489908.60087854c-.4112799.53507163-1.04691527.84983729-1.72178173.85262154-.31731614-.00153652-.63061468-.07108941-.91877333-.20396779-.93389637-.40992073-1.45678447-1.41441689-1.25688194-2.4145362L3.05958106,1.79882791C3.28415382.60189453,4.43651156-.18635988,5.63344528.03821253c.0427079.00801312.08516977.01728658.12732951.02780882h.02940072l9.74634766,2.88127322h8.60706789L33.89728908.08072171h.02940142c1.1815748-.29489426,2.3784896.42390294,2.67338421,1.6054781.01052294.04215975.01979535.08462091.02780882.12732881l3.01725128,16.17041062c.19308035.99533591-.3287598,1.99171485-1.25688124,2.39983549ZM14.18960113,4.08289846L5.38591511,1.49563243c-.05549777-.01236298-.1121963-.01852589-.16905396-.01837519-.35274343.00096593-.655062.25238438-.72031866.5990399L1.47929086,18.24670707c-.07691341.39858747.18385385.78405561.58244062.86096867.27107851.05230907.54860733-.05169782.7185424-.26927842L14.18960113,4.08289846Zm19.61581061,13.1513214l-9.92275197-12.81688797h-8.08520531l-9.92275197,12.81688797v11.43872797c0,2.84157738,2.30355327,5.14513065,5.14513065,5.14513065h8.08520531v-3.3700599l-2.72508204-2.72508204c-.28720218-.28720359-.28720218-.7528485,0-1.04005208s.7528499-.28720359,1.04005208,0l2.42004862,2.42004862,2.42004862-2.42004862c.28720359-.28720359.7528485-.28720359,1.04005208,0s.28720359.7528485,0,1.04005208l-2.72508204,2.72508204v3.3700599h8.08520531c2.84157738,0,5.14513065-2.30355327,5.14513065-5.14513065v-11.43872797Zm4.39541128,1.00697619l-3.01725128-16.17041062c-.07464473-.39901786-.45862401-.66197355-.85764328-.58732812-.01062388.00198795-.02120289.00420932-.03172863.00666341l-8.80368673,2.59277845,11.41300243,14.75182508c.25293745.31750505.71537192.36984776,1.03287697.11691312.21288131-.1695895.31462267-.44293353.26443052-.71044131Z'/>
+	</svg>"""
 
 _httpPortName: "http"
 
 out: {
 	ingress: {
 		rpuppy: {
-			auth: input.auth
-			network: input.network
+			auth:      input.auth
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "rpuppy"
@@ -48,29 +48,29 @@
 	images: {
 		rpuppy: {
 			repository: "giolekva"
-			name: "rpuppy"
-			tag: "latest"
+			name:       "rpuppy"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		rpuppy: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/rpuppy"
+			branch:  "main"
+			path:    "charts/rpuppy"
 		}
 	}
 
 	helm: {
 		rpuppy: {
 			chart: charts.rpuppy
-			info: "Installing rPuppy server"
+			info:  "Installing rPuppy server"
 			values: {
 				image: {
 					repository: images.rpuppy.fullName
-					tag: images.rpuppy.tag
+					tag:        images.rpuppy.tag
 					pullPolicy: images.rpuppy.pullPolicy
 				}
 				portName: _httpPortName
diff --git a/core/installer/values-tmpl/soft-serve.cue b/core/installer/values-tmpl/soft-serve.cue
index dead3db..a094eb7 100644
--- a/core/installer/values-tmpl/soft-serve.cue
+++ b/core/installer/values-tmpl/soft-serve.cue
@@ -1,65 +1,64 @@
 input: {
-	network: #Network @name(Network)
-	subdomain: string @name(Subdomain)
-	sshPort: int @name(SSH Port) @role(port)
-	adminKey: string @name(Admin SSH Public Key)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
+	sshPort:   int      @name(SSH Port) @role(port)
+	adminKey:  string   @name(Admin SSH Public Key)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
 
-name: "Soft-Serve"
+name:      "Soft-Serve"
 namespace: "app-soft-serve"
 // TODO(gio): make public network an option
-readme: "softserve application will be installed on private network and be accessible to any user on https://\(_domain)"
+readme:      "softserve application will be installed on private network and be accessible to any user on https://\(_domain)"
 description: "A tasty, self-hostable Git server for the command line. 🍦"
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28.17637795 39.68590646'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-15.72872096' y='-9.97395671' width='59.63381987' height='59.63381987'/>
-  <g>
-    <path class='cls-1' d='m14.08828766,39.68590646c-.24966985,0-.47802402-.14131246-.58973401-.36472824l-2.87761777-5.75512747-5.45346067-13.9623024c-.13243358-.33946568.03513141-.72156194.37420873-.85419039.33927469-.13262845.72157548.03473602.85381169.3742017l5.42918447,13.90783,2.26321282,4.52199865,2.28827849-4.57647105,5.40471091-13.8533576c.13243358-.33788677.51374753-.5060407.85381169-.3742017.33907732.13262845.50664231.51472471.37420873.85419039l-5.42898711,13.90783-2.90209134,5.80959987c-.11151262.22341579-.33986679.36472824-.58953664.36472824Z'/>
-    <path class='cls-1' d='m18.88431728,29.13483942h-9.59205924c-.36414299,0-.65920736-.2952562-.65920736-.65919498s.29506437-.65919498.65920736-.65919498h9.59205924c.36414299,0,.65920736.2952562.65920736.65919498s-.29506437.65919498-.65920736.65919498Z'/>
-    <path class='cls-1' d='m5.45484225,20.50214821c-.08269697,0-.16559131-.0157891-.24414357-.0473673-.21276214-.08447169-5.21069868-2.14337052-5.21069868-7.32614307,0-4.61041762,4.65846449-6.74115686,5.90878744-7.230619.52262907-1.25207574,2.82373645-5.89801884,8.17950022-5.89801884s7.65687115,4.6459431,8.17950022,5.89801884c1.25032295.48946214,5.90859007,2.62099084,5.90859007,7.230619,0,5.18277255-4.99773918,7.24167137-5.21050131,7.32614307-.18572279.07499823-.39670862.05999859-.57078673-.0386833-.03236827-.01894692-3.28912895-1.83232522-8.30680224-1.83232522s-8.27443398,1.8133783-8.30680224,1.83232522c-.10065741.05684077-.21335424.0860506-.32664317.0860506ZM14.08828766,1.31838997c-5.19806716,0-6.97555863,5.08882739-7.0485846,5.30592754-.06592074.1949954-.22045947.3497286-.41585327.41525337-.05309185.01736801-5.30543507,1.83311468-5.30543507,6.08906697,0,3.70728102,3.15531381,5.5175015,4.1153092,5.98170108.96295591-.47840977,4.11215132-1.8449565,8.65456373-1.8449565s7.69160783,1.36654673,8.65456373,1.8449565c.95979803-.46419958,4.11511183-2.27442006,4.11511183-5.98170108,0-4.25595229-5.25234322-6.07169896-5.3052377-6.08906697-.1953938-.06552477-.34993253-.22025797-.41585327-.41525337-.07302597-.21710014-1.85051744-5.30592754-7.0485846-5.30592754Zm-7.67364739,5.09593249h.00809207-.00809207Z'/>
-  </g>
-</svg>"""
-
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28.17637795 39.68590646'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-15.72872096' y='-9.97395671' width='59.63381987' height='59.63381987'/>
+	  <g>
+	    <path class='cls-1' d='m14.08828766,39.68590646c-.24966985,0-.47802402-.14131246-.58973401-.36472824l-2.87761777-5.75512747-5.45346067-13.9623024c-.13243358-.33946568.03513141-.72156194.37420873-.85419039.33927469-.13262845.72157548.03473602.85381169.3742017l5.42918447,13.90783,2.26321282,4.52199865,2.28827849-4.57647105,5.40471091-13.8533576c.13243358-.33788677.51374753-.5060407.85381169-.3742017.33907732.13262845.50664231.51472471.37420873.85419039l-5.42898711,13.90783-2.90209134,5.80959987c-.11151262.22341579-.33986679.36472824-.58953664.36472824Z'/>
+	    <path class='cls-1' d='m18.88431728,29.13483942h-9.59205924c-.36414299,0-.65920736-.2952562-.65920736-.65919498s.29506437-.65919498.65920736-.65919498h9.59205924c.36414299,0,.65920736.2952562.65920736.65919498s-.29506437.65919498-.65920736.65919498Z'/>
+	    <path class='cls-1' d='m5.45484225,20.50214821c-.08269697,0-.16559131-.0157891-.24414357-.0473673-.21276214-.08447169-5.21069868-2.14337052-5.21069868-7.32614307,0-4.61041762,4.65846449-6.74115686,5.90878744-7.230619.52262907-1.25207574,2.82373645-5.89801884,8.17950022-5.89801884s7.65687115,4.6459431,8.17950022,5.89801884c1.25032295.48946214,5.90859007,2.62099084,5.90859007,7.230619,0,5.18277255-4.99773918,7.24167137-5.21050131,7.32614307-.18572279.07499823-.39670862.05999859-.57078673-.0386833-.03236827-.01894692-3.28912895-1.83232522-8.30680224-1.83232522s-8.27443398,1.8133783-8.30680224,1.83232522c-.10065741.05684077-.21335424.0860506-.32664317.0860506ZM14.08828766,1.31838997c-5.19806716,0-6.97555863,5.08882739-7.0485846,5.30592754-.06592074.1949954-.22045947.3497286-.41585327.41525337-.05309185.01736801-5.30543507,1.83311468-5.30543507,6.08906697,0,3.70728102,3.15531381,5.5175015,4.1153092,5.98170108.96295591-.47840977,4.11215132-1.8449565,8.65456373-1.8449565s7.69160783,1.36654673,8.65456373,1.8449565c.95979803-.46419958,4.11511183-2.27442006,4.11511183-5.98170108,0-4.25595229-5.25234322-6.07169896-5.3052377-6.08906697-.1953938-.06552477-.34993253-.22025797-.41585327-.41525337-.07302597-.21710014-1.85051744-5.30592754-7.0485846-5.30592754Zm-7.67364739,5.09593249h.00809207-.00809207Z'/>
+	  </g>
+	</svg>"""
 
 out: {
 	images: {
 		softserve: {
 			repository: "charmcli"
-			name: "soft-serve"
-			tag: "v0.7.1"
+			name:       "soft-serve"
+			tag:        "v0.7.1"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		softserve: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/soft-serve"
+			branch:  "main"
+			path:    "charts/soft-serve"
 		}
 	}
 
 	ingress: {
 		softserve: {
 			auth: enabled: false
-			network: input.network
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "soft-serve"
@@ -69,9 +68,9 @@
 	}
 
 	openPort: [{
-		name: "ssh"
+		name:    "ssh"
 		network: input.network
-		port: input.sshPort
+		port:    input.sshPort
 		service: {
 			name: "soft-serve"
 			port: 22
@@ -83,16 +82,16 @@
 	helm: {
 		softserve: {
 			chart: charts.softserve
-			info: "Installing SoftServe server"
+			info:  "Installing SoftServe server"
 			values: {
-				serviceType: "ClusterIP"
-				adminKey: input.adminKey
-				host: _domain
-				sshPublicPort: input.sshPort
+				serviceType:               "ClusterIP"
+				adminKey:                  input.adminKey
+				host:                      _domain
+				sshPublicPort:             input.sshPort
 				persistentVolumeClaimName: volume.data.name
 				image: {
 					repository: images.softserve.fullName
-					tag: images.softserve.tag
+					tag:        images.softserve.tag
 					pullPolicy: images.softserve.pullPolicy
 				}
 			}
@@ -101,7 +100,7 @@
 }
 
 help: [{
-	title: "Access"
+	title:    "Access"
 	contents: """
 	SSH CLI: ssh \(_domain) -p \(input.sshPort) help  
 	SSH TUI: ssh \(_domain) -p \(input.sshPort)  
diff --git a/core/installer/values-tmpl/url-shortener.cue b/core/installer/values-tmpl/url-shortener.cue
index 9f401fb..1065463 100644
--- a/core/installer/values-tmpl/url-shortener.cue
+++ b/core/installer/values-tmpl/url-shortener.cue
@@ -1,48 +1,48 @@
 input: {
-    network: #Network @name(Network)
-    subdomain: string @name(Subdomain)
-	auth: #Auth @name(Authentication)
-	storageSize: string @name(Storage Size)
+	network:     #Network @name(Network)
+	subdomain:   string   @name(Subdomain)
+	auth:        #Auth    @name(Authentication)
+	storageSize: string   @name(Storage Size)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "URL Shortener"
-namespace: "app-url-shortener"
-readme: "URL shortener application will be installed on \(input.network.name) network and be accessible at https://\(_domain)"
+name:        "URL Shortener"
+namespace:   "app-url-shortener"
+readme:      "URL shortener application will be installed on \(input.network.name) network and be accessible at https://\(_domain)"
 description: "Provides URL shortening service. Can be configured to be reachable only from private network or publicly."
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36.43807123 39.68503937'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-11.59787432' y='-9.97439025' width='59.63381987' height='59.63381987'/>
-  <g>
-    <circle class='cls-1' cx='3.31578123' cy='26.42191445' r='3.31578123'/>
-    <circle class='cls-1' cx='3.31578123' cy='13.15878954' r='3.31578123'/>
-    <path class='cls-1' d='m11.6052343,39.68503937c-.19894668,0-.36473638,0-.56368306-.09947255-.85909349-.31306169-1.30368349-1.26152142-.994735-2.12210113L23.30994116.98987217c.37099907-.83910142,1.3519786-1.21857512,2.19107766-.84757764.75807463.33517241,1.1530841,1.1778629.92575531,1.97494297l-13.26312492,36.47359431c-.23210526.66315561-.89526087,1.09420755-1.55841648,1.09420755m9.94734369,0c-.19894668,0-.36473638,0-.56368306-.09947255-.85909349-.31306169-1.3036827-1.26152142-.994735-2.12210113L33.25728168.98987217c.37099907-.83910142,1.3519786-1.21857512,2.19107766-.84757764.75807463.33517241,1.1530841,1.1778629.92575531,1.97494297l-13.26312492,36.47359431c-.23210526.66315561-.89526087,1.09420755-1.55841648,1.09420755'/>
-  </g>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 36.43807123 39.68503937'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-11.59787432' y='-9.97439025' width='59.63381987' height='59.63381987'/>
+	  <g>
+	    <circle class='cls-1' cx='3.31578123' cy='26.42191445' r='3.31578123'/>
+	    <circle class='cls-1' cx='3.31578123' cy='13.15878954' r='3.31578123'/>
+	    <path class='cls-1' d='m11.6052343,39.68503937c-.19894668,0-.36473638,0-.56368306-.09947255-.85909349-.31306169-1.30368349-1.26152142-.994735-2.12210113L23.30994116.98987217c.37099907-.83910142,1.3519786-1.21857512,2.19107766-.84757764.75807463.33517241,1.1530841,1.1778629.92575531,1.97494297l-13.26312492,36.47359431c-.23210526.66315561-.89526087,1.09420755-1.55841648,1.09420755m9.94734369,0c-.19894668,0-.36473638,0-.56368306-.09947255-.85909349-.31306169-1.3036827-1.26152142-.994735-2.12210113L33.25728168.98987217c.37099907-.83910142,1.3519786-1.21857512,2.19107766-.84757764.75807463.33517241,1.1530841,1.1778629.92575531,1.97494297l-13.26312492,36.47359431c-.23210526.66315561-.89526087,1.09420755-1.55841648,1.09420755'/>
+	  </g>
+	</svg>"""
 
 _httpPortName: "http"
 
 out: {
 	ingress: {
 		"url-shorteners": {
-			auth: input.auth
-			network: input.network
+			auth:      input.auth
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "url-shortener"
@@ -54,36 +54,36 @@
 	images: {
 		urlShortener: {
 			repository: "giolekva"
-			name: "url-shortener"
-			tag: "latest"
+			name:       "url-shortener"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		urlShortener: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/url-shortener"
+			branch:  "main"
+			path:    "charts/url-shortener"
 		}
 	}
 
-		volume: data: size: input.storageSize
+	volume: data: size: input.storageSize
 
 	helm: {
 		"url-shortener": {
 			chart: charts.urlShortener
-			info: "Installing server"
+			info:  "Installing server"
 			values: {
 				image: {
 					repository: images.urlShortener.fullName
-					tag: images.urlShortener.tag
+					tag:        images.urlShortener.tag
 					pullPolicy: images.urlShortener.pullPolicy
 				}
-				portName: _httpPortName
+				portName:                  _httpPortName
 				persistentVolumeClaimNama: volume.data.name
-				requireAuth: input.auth.enabled
+				requireAuth:               input.auth.enabled
 			}
 		}
 	}
diff --git a/core/installer/values-tmpl/vaultwarden.cue b/core/installer/values-tmpl/vaultwarden.cue
index 7b68190..0df1756 100644
--- a/core/installer/values-tmpl/vaultwarden.cue
+++ b/core/installer/values-tmpl/vaultwarden.cue
@@ -1,41 +1,41 @@
 input: {
-    network: #Network @name(Network)
-    subdomain: string @name(Subdomain)
+	network:     #Network @name(Network)
+	subdomain:   string   @name(Subdomain)
 	storageSize: string
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "Vaultwarden"
-namespace: "app-vaultwarden"
-readme: "Installs vaultwarden on private network accessible at \(_domain)"
+name:        "Vaultwarden"
+namespace:   "app-vaultwarden"
+readme:      "Installs vaultwarden on private network accessible at \(_domain)"
 description: "Alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal."
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 33.20961473 39.68503937'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-13.21210257' y='-9.97439025' width='59.63381987' height='59.63381987'/>
-  <path class='cls-1' d='m16.59579535,39.68503937c-.31541688,0-.63121702-.07051848-.92555501-.21155543l-1.05816041-.49976138c-.48500615-.2368501-1.24959508-.66149397-2.27996967-1.26396705-1.22238414-.71514934-2.19948662-1.35211514-3.07502717-2.00364455-1.11583992-.82092705-2.19661223-1.72003763-3.20954883-2.67050406-1.0945694-.97882712-2.11363804-2.07876206-3.01753928-3.26071305-.8868465-1.18501701-1.60889438-2.47811126-2.15023867-3.84785602-.57832816-1.42493314-.87515729-2.93341534-.87975632-4.47715678V2.24126116C.00747343,1.01102034,1.01121196.00766505,2.23762026,0h28.73053054c1.23024082.00766505,2.23397936,1.01102034,2.24145278,2.23742863v19.16109658c.00210789,1.56060455-.29472124,3.08671637-.88205584,4.53387816-.53732013,1.38124234-1.26281729,2.6911997-2.15292143,3.88541478-.90620075,1.18501701-1.92526939,2.28571846-3.03382752,3.27757616-1.01025383.92747127-2.09447541,1.80971874-3.21625575,2.6168487-1.1200557.77263722-2.08834337,1.40347099-3.0577808,1.99214697-.71150844.43230892-1.2898366.73661148-1.71198933.95889798-.20983079.11037675-.38651024.20312387-.53042159.28590643l-1.10759999.52582256c-.29203847.13950394-.6063056.21002242-.92095598.21002242ZM30.96431827,1.28006366H2.24145278c-.52505605.00306602-.95813148.43614145-.96138913.96503003v19.20248786c.00421578,1.37740981.26942657,2.72569243.78815895,4.00345657.50167764,1.27009909,1.16796227,2.46278115,1.98256566,3.55198502.85101238,1.11219902,1.8152759,2.15311306,2.86155548,3.08901589.98706705.92593826,2.02836434,1.79208912,3.10607063,2.58465548.83989805.62546823,1.77944178,1.23713937,2.96024302,1.92776054,1.24921182.73124595,1.87947071,1.0646757,2.18798905,1.21567722l1.05336975.49746186c.23934124.11420927.51068408.11420927.7469593.00153301l1.06390919-.5028274c.10941861-.06591945.30047003-.16633162.52754719-.28590643.43039266-.22688553.96579653-.50819294,1.64377037-.92057273.94778366-.57564539,1.89633382-1.19344857,2.98515444-1.94385715,1.07042449-.77033771,2.1147878-1.62039196,3.09399817-2.51873603,1.05471113-.94433439,2.01878303-1.98524843,2.87171167-3.10051347.81632802-1.09610241,1.4858703-2.30488109,1.98486517-3.58724426.5283137-1.3015258.79333286-2.66437202.79160823-4.06017796V2.24279417c-.0044074-.52812207-.43690795-.95966449-.96522165-.96273051Zm-14.35951648,33.14751666c-.11535903,0-.23033481-.03142671-.33208837-.09274713-.19124304-.11650879-.30794346-.32346519-.30794346-.5472847V5.42455718c0-.35335889.28648131-.64003183.64003183-.64003183h11.18024461c.35355052,0,.64003183.28667294.64003183.64003183v15.77237716c.01935426.06132041.02951045.12647336.02951045.1923928,0,3.12887416-2.06649797,6.31983524-6.14219766,9.48473514-1.68688628,1.31915542-3.50848585,2.49114185-5.4122931,3.48146654-.09274713.04828983-.19411744.07205149-.29529612.07205149Zm.64003183-28.3629913v26.64985222c1.49621812-.83932318,2.93245721-1.79592164,4.2805482-2.85063278,3.66581104-2.84603375,5.5638695-5.63534611,5.64626881-8.29358609-.01724637-.05518837-.02663606-.11267626-.02663606-.17169716V6.06458901h-9.90018095Z'/>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 33.20961473 39.68503937'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-13.21210257' y='-9.97439025' width='59.63381987' height='59.63381987'/>
+	  <path class='cls-1' d='m16.59579535,39.68503937c-.31541688,0-.63121702-.07051848-.92555501-.21155543l-1.05816041-.49976138c-.48500615-.2368501-1.24959508-.66149397-2.27996967-1.26396705-1.22238414-.71514934-2.19948662-1.35211514-3.07502717-2.00364455-1.11583992-.82092705-2.19661223-1.72003763-3.20954883-2.67050406-1.0945694-.97882712-2.11363804-2.07876206-3.01753928-3.26071305-.8868465-1.18501701-1.60889438-2.47811126-2.15023867-3.84785602-.57832816-1.42493314-.87515729-2.93341534-.87975632-4.47715678V2.24126116C.00747343,1.01102034,1.01121196.00766505,2.23762026,0h28.73053054c1.23024082.00766505,2.23397936,1.01102034,2.24145278,2.23742863v19.16109658c.00210789,1.56060455-.29472124,3.08671637-.88205584,4.53387816-.53732013,1.38124234-1.26281729,2.6911997-2.15292143,3.88541478-.90620075,1.18501701-1.92526939,2.28571846-3.03382752,3.27757616-1.01025383.92747127-2.09447541,1.80971874-3.21625575,2.6168487-1.1200557.77263722-2.08834337,1.40347099-3.0577808,1.99214697-.71150844.43230892-1.2898366.73661148-1.71198933.95889798-.20983079.11037675-.38651024.20312387-.53042159.28590643l-1.10759999.52582256c-.29203847.13950394-.6063056.21002242-.92095598.21002242ZM30.96431827,1.28006366H2.24145278c-.52505605.00306602-.95813148.43614145-.96138913.96503003v19.20248786c.00421578,1.37740981.26942657,2.72569243.78815895,4.00345657.50167764,1.27009909,1.16796227,2.46278115,1.98256566,3.55198502.85101238,1.11219902,1.8152759,2.15311306,2.86155548,3.08901589.98706705.92593826,2.02836434,1.79208912,3.10607063,2.58465548.83989805.62546823,1.77944178,1.23713937,2.96024302,1.92776054,1.24921182.73124595,1.87947071,1.0646757,2.18798905,1.21567722l1.05336975.49746186c.23934124.11420927.51068408.11420927.7469593.00153301l1.06390919-.5028274c.10941861-.06591945.30047003-.16633162.52754719-.28590643.43039266-.22688553.96579653-.50819294,1.64377037-.92057273.94778366-.57564539,1.89633382-1.19344857,2.98515444-1.94385715,1.07042449-.77033771,2.1147878-1.62039196,3.09399817-2.51873603,1.05471113-.94433439,2.01878303-1.98524843,2.87171167-3.10051347.81632802-1.09610241,1.4858703-2.30488109,1.98486517-3.58724426.5283137-1.3015258.79333286-2.66437202.79160823-4.06017796V2.24279417c-.0044074-.52812207-.43690795-.95966449-.96522165-.96273051Zm-14.35951648,33.14751666c-.11535903,0-.23033481-.03142671-.33208837-.09274713-.19124304-.11650879-.30794346-.32346519-.30794346-.5472847V5.42455718c0-.35335889.28648131-.64003183.64003183-.64003183h11.18024461c.35355052,0,.64003183.28667294.64003183.64003183v15.77237716c.01935426.06132041.02951045.12647336.02951045.1923928,0,3.12887416-2.06649797,6.31983524-6.14219766,9.48473514-1.68688628,1.31915542-3.50848585,2.49114185-5.4122931,3.48146654-.09274713.04828983-.19411744.07205149-.29529612.07205149Zm.64003183-28.3629913v26.64985222c1.49621812-.83932318,2.93245721-1.79592164,4.2805482-2.85063278,3.66581104-2.84603375,5.5638695-5.63534611,5.64626881-8.29358609-.01724637-.05518837-.02663606-.11267626-.02663606-.17169716V6.06458901h-9.90018095Z'/>
+	</svg>"""
 
 out: {
 	ingress: {
 		vaultwarden: {
 			auth: enabled: false
-			network: input.network
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "server"
@@ -47,18 +47,18 @@
 	images: {
 		vaultwarden: {
 			repository: "vaultwarden"
-			name: "server"
-			tag: "1.28.1"
+			name:       "server"
+			tag:        "1.28.1"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		vaultwarden: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/vaultwarden"
+			branch:  "main"
+			path:    "charts/vaultwarden"
 		}
 	}
 
@@ -67,23 +67,23 @@
 	helm: {
 		vaultwarden: {
 			chart: charts.vaultwarden
-			info: "Installing Vaultwarden server"
+			info:  "Installing Vaultwarden server"
 			values: {
 				image: {
 					repository: images.vaultwarden.fullName
-					tag: images.vaultwarden.tag
+					tag:        images.vaultwarden.tag
 					pullPolicy: images.vaultwarden.pullPolicy
 				}
-				domain: _domain
+				domain:                    _domain
 				persistentVolumeClaimName: volume.data.name
-				httpPortName: _httpPortName
+				httpPortName:              _httpPortName
 			}
 		}
 	}
 }
 
 help: [{
-	title: "Access"
+	title:    "Access"
 	contents: "Open [\(url)](\(url)) in a new tab."
 }]
 
diff --git a/core/installer/values-tmpl/virtual-machine.cue b/core/installer/values-tmpl/virtual-machine.cue
index 2c0bea0..f531799 100644
--- a/core/installer/values-tmpl/virtual-machine.cue
+++ b/core/installer/values-tmpl/virtual-machine.cue
@@ -1,36 +1,36 @@
 input: {
-	name: string @name(Hostname)
-	username: string @name(Username)
-	authKey?: string @name(Auth Key) @role(VPNAuthKey) @usernameField(username) @enabledField(vpnEnabled)
-	cpuCores: int | *1 @name(CPU Cores)
-	memory: string | *"2Gi" @name(Memory)
-	vpnEnabled?: bool @name(Enable VPN)
-	codeServerEnabled?: bool @name(Install VSCode Server)
+	name:               string          @name(Hostname)
+	username:           string          @name(Username)
+	authKey?:           string          @name(Auth Key) @role(VPNAuthKey) @usernameField(username) @enabledField(vpnEnabled)
+	cpuCores:           int | *1        @name(CPU Cores)
+	memory:             string | *"2Gi" @name(Memory)
+	vpnEnabled?:        bool            @name(Enable VPN)
+	codeServerEnabled?: bool            @name(Install VSCode Server)
 }
 
-name: "Virtual Machine"
-namespace: "app-vm"
-readme: "Virtual Machine"
+name:        "Virtual Machine"
+namespace:   "app-vm"
+readme:      "Virtual Machine"
 description: "Virtual Machine"
 icon: """
-	   <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 2048 2048"><path fill="currentColor" d="M1280 384H640V256h640zm0 1024H640v-128h640zm0 256H640v-128h640zM1408 0q27 0 50 10t40 27t28 41t10 50v1792H384V128q0-27 10-50t27-40t41-28t50-10zm0 128H512v1664h896z"/></svg>"""
+		   <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 2048 2048"><path fill="currentColor" d="M1280 384H640V256h640zm0 1024H640v-128h640zm0 256H640v-128h640zM1408 0q27 0 50 10t40 27t28 41t10 50v1792H384V128q0-27 10-50t27-40t41-28t50-10zm0 128H512v1664h896z"/></svg>"""
 
 out: {
 	vm: {
 		"\(input.name)": {
 			username: input.username
-			domain: global.domain
+			domain:   global.domain
 			cpuCores: input.cpuCores
-			memory: input.memory
+			memory:   input.memory
 			if input.vpnEnabled != _|_ {
 				if !input.vpnEnabled {
 					vpn: enabled: false
 				}
 				if input.vpnEnabled {
 					vpn: {
-						enabled: true
+						enabled:     true
 						loginServer: "https://headscale.\(global.domain)"
-						authKey: input.authKey
+						authKey:     input.authKey
 					}
 				}
 			}
diff --git a/core/installer/values-tmpl/welcome.cue b/core/installer/values-tmpl/welcome.cue
index 6022fb7..bf6aa99 100644
--- a/core/installer/values-tmpl/welcome.cue
+++ b/core/installer/values-tmpl/welcome.cue
@@ -3,30 +3,30 @@
 )
 
 input: {
-	network: #Network
-	repoAddr: string
+	network:       #Network
+	repoAddr:      string
 	sshPrivateKey: string
 }
 
-name: "welcome"
+name:      "welcome"
 namespace: "app-welcome"
 
 out: {
 	images: {
 		welcome: {
 			repository: "giolekva"
-			name: "pcloud-installer"
-			tag: "latest"
+			name:       "pcloud-installer"
+			tag:        "latest"
 			pullPolicy: "Always"
 		}
 	}
 
 	charts: {
 		welcome: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/welcome"
+			branch:  "main"
+			path:    "charts/welcome"
 		}
 	}
 
@@ -34,20 +34,20 @@
 		welcome: {
 			chart: charts.welcome
 			values: {
-				repoAddr: input.repoAddr
-				sshPrivateKey: base64.Encode(null, input.sshPrivateKey)
+				repoAddr:          input.repoAddr
+				sshPrivateKey:     base64.Encode(null, input.sshPrivateKey)
 				createAccountAddr: "http://api.\(global.namespacePrefix)core-auth.svc.cluster.local/identities"
-				loginAddr: "https://launcher.\(networks.public.domain)"
-				membershipsAddr: "http://memberships-api.\(global.namespacePrefix)core-auth-memberships.svc.cluster.local"
+				loginAddr:         "https://launcher.\(networks.public.domain)"
+				membershipsAddr:   "http://memberships-api.\(global.namespacePrefix)core-auth-memberships.svc.cluster.local"
 				ingress: {
-					className: input.network.ingressClass
-					domain: "welcome.\(input.network.domain)"
+					className:         input.network.ingressClass
+					domain:            "welcome.\(input.network.domain)"
 					certificateIssuer: input.network.certificateIssuer
 				}
 				clusterRoleName: "\(global.id)-welcome"
 				image: {
 					repository: images.welcome.fullName
-					tag: images.welcome.tag
+					tag:        images.welcome.tag
 					pullPolicy: images.welcome.pullPolicy
 				}
 			}
diff --git a/core/installer/values-tmpl/zot.cue b/core/installer/values-tmpl/zot.cue
index 4f98388..cf16533 100644
--- a/core/installer/values-tmpl/zot.cue
+++ b/core/installer/values-tmpl/zot.cue
@@ -4,46 +4,46 @@
 )
 
 input: {
-    network: #Network @name(Network)
-    subdomain: string @name(Subdomain)
+	network:   #Network @name(Network)
+	subdomain: string   @name(Subdomain)
 }
 
 _domain: "\(input.subdomain).\(input.network.domain)"
-url: "https://\(_domain)"
+url:     "https://\(_domain)"
 
-name: "Zot"
-namespace: "app-zot"
-readme: "OCI-native container image registry, simplified"
+name:        "Zot"
+namespace:   "app-zot"
+readme:      "OCI-native container image registry, simplified"
 description: "OCI-native container image registry, simplified"
 icon: """
-<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 36.27146462'>
-  <defs>
-    <style>
-      .cls-1 {
-        fill: currentColor;
-      }
-
-      .cls-2 {
-        fill: none;
-        stroke: #3a3a3a;
-        stroke-miterlimit: 10;
-        stroke-width: .98133445px;
-      }
-    </style>
-  </defs>
-  <rect class='cls-2' x='-9.97439025' y='-11.68117763' width='59.63381987' height='59.63381987'/>
-  <g>
-    <path class='cls-1' d='m29.74314495,24.98575641c-.75549716.74180664-1.41447384,1.43782557-2.10953123,2.09286451,1.88242421.2298085,3.61301638.54546895,5.1121059.94080001,3.75092895.97523237,4.57602343,2.025465,4.57602343,2.25055737,0,.22504658-.82509448,1.27527921-4.57602343,2.25055737-3.45092789.90018632-8.02713447,1.3878254-12.90334211,1.3878254-1.50330199,0-2.98132917-.04670346-4.40734152-.13717997,3.86411616-1.46447402,11.01249296-5.7430605,20.91142889-17.34213977C25.02701114,26.53182412,10.52274765,29.31182475,2.37253582,30.22290854c.09505528-.29812376,1.02930765-1.28379573,4.56668274-2.20348761.98370309-.2566401,2.06154572-.47848154,3.20898565-.66630271,2.60660258-.52536815,7.09562936-1.84945706,10.511026-3.07968117-.27252843-.00302199-.54505686-.00494507-.81685269-.00494507-9.56486882,0-19.84237751,1.87546447-19.84237751,6.00148632s10.27750869,6.00148632,19.84237751,6.00148632,19.87992343-1.87546447,19.84256066-6.00148632c0-2.67107167-4.30917267-4.3977261-9.94179322-5.28422189Z'/>
-    <path class='cls-1' d='m19.84237751,12.00297264c4.12895226,0,8.39600024-.35036753,11.91139722-1.07953677-.06043977,4.29255173-6.00643139,9.89499819-8.79288808,11.37302537,3.02968099-1.43677245,16.76031538-5.95079933,16.72405152-16.29497492C39.68493817,1.87546447,29.40724633,0,19.84237751,0S0,1.87546447,0,6.00148632s10.27750869,6.00148632,19.84237751,6.00148632ZM6.93921856,3.75092895c3.45092789-.90027789,8.02695132-1.38787118,12.90315895-1.38787118s9.48996013.48759329,12.90334211,1.38787118c3.75092895.97518658,4.57602343,2.025465,4.57602343,2.25055737,0,.22500079-.82509448,1.27527921-4.57602343,2.25055737-3.45092789.90018632-8.02713447,1.3878254-12.90334211,1.3878254s-9.48977698-.48763908-12.90315895-1.3878254c-3.75092895-.97527816-4.57602343-2.02555658-4.57602343-2.25055737,0-.22509237.82509448-1.27537079,4.57602343-2.25055737Z'/>
-    <path class='cls-1' d='m22.96088665,22.29646124c-.10128241.0480313-.19120946.09281168-.26776651.13406641.08553144-.03988109.17490904-.08484462.26776651-.13406641Z'/>
-  </g>
-</svg>"""
+	<svg width='50px' height='50px' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 39.68503937 36.27146462'>
+	  <defs>
+	    <style>
+	      .cls-1 {
+	        fill: currentColor;
+	      }
+	
+	      .cls-2 {
+	        fill: none;
+	        stroke: #3a3a3a;
+	        stroke-miterlimit: 10;
+	        stroke-width: .98133445px;
+	      }
+	    </style>
+	  </defs>
+	  <rect class='cls-2' x='-9.97439025' y='-11.68117763' width='59.63381987' height='59.63381987'/>
+	  <g>
+	    <path class='cls-1' d='m29.74314495,24.98575641c-.75549716.74180664-1.41447384,1.43782557-2.10953123,2.09286451,1.88242421.2298085,3.61301638.54546895,5.1121059.94080001,3.75092895.97523237,4.57602343,2.025465,4.57602343,2.25055737,0,.22504658-.82509448,1.27527921-4.57602343,2.25055737-3.45092789.90018632-8.02713447,1.3878254-12.90334211,1.3878254-1.50330199,0-2.98132917-.04670346-4.40734152-.13717997,3.86411616-1.46447402,11.01249296-5.7430605,20.91142889-17.34213977C25.02701114,26.53182412,10.52274765,29.31182475,2.37253582,30.22290854c.09505528-.29812376,1.02930765-1.28379573,4.56668274-2.20348761.98370309-.2566401,2.06154572-.47848154,3.20898565-.66630271,2.60660258-.52536815,7.09562936-1.84945706,10.511026-3.07968117-.27252843-.00302199-.54505686-.00494507-.81685269-.00494507-9.56486882,0-19.84237751,1.87546447-19.84237751,6.00148632s10.27750869,6.00148632,19.84237751,6.00148632,19.87992343-1.87546447,19.84256066-6.00148632c0-2.67107167-4.30917267-4.3977261-9.94179322-5.28422189Z'/>
+	    <path class='cls-1' d='m19.84237751,12.00297264c4.12895226,0,8.39600024-.35036753,11.91139722-1.07953677-.06043977,4.29255173-6.00643139,9.89499819-8.79288808,11.37302537,3.02968099-1.43677245,16.76031538-5.95079933,16.72405152-16.29497492C39.68493817,1.87546447,29.40724633,0,19.84237751,0S0,1.87546447,0,6.00148632s10.27750869,6.00148632,19.84237751,6.00148632ZM6.93921856,3.75092895c3.45092789-.90027789,8.02695132-1.38787118,12.90315895-1.38787118s9.48996013.48759329,12.90334211,1.38787118c3.75092895.97518658,4.57602343,2.025465,4.57602343,2.25055737,0,.22500079-.82509448,1.27527921-4.57602343,2.25055737-3.45092789.90018632-8.02713447,1.3878254-12.90334211,1.3878254s-9.48977698-.48763908-12.90315895-1.3878254c-3.75092895-.97527816-4.57602343-2.02555658-4.57602343-2.25055737,0-.22509237.82509448-1.27537079,4.57602343-2.25055737Z'/>
+	    <path class='cls-1' d='m22.96088665,22.29646124c-.10128241.0480313-.19120946.09281168-.26776651.13406641.08553144-.03988109.17490904-.08484462.26776651-.13406641Z'/>
+	  </g>
+	</svg>"""
 
 out: {
 	ingress: {
 		zot: {
 			auth: enabled: false
-			network: input.network
+			network:   input.network
 			subdomain: input.subdomain
 			service: {
 				name: "zot"
@@ -55,51 +55,51 @@
 	// TODO(gio): configure busybox
 	images: {
 		zot: {
-			registry: "ghcr.io"
+			registry:   "ghcr.io"
 			repository: "project-zot"
-			name: "zot-linux-amd64"
-			tag: "v2.0.3"
+			name:       "zot-linux-amd64"
+			tag:        "v2.0.3"
 			pullPolicy: "IfNotPresent"
 		}
 	}
 
 	charts: {
 		zot: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/zot"
+			branch:  "main"
+			path:    "charts/zot"
 		}
 		oauth2Client: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/oauth2-client"
+			branch:  "main"
+			path:    "charts/oauth2-client"
 		}
 		resourceRenderer: {
-			kind: "GitRepository"
+			kind:    "GitRepository"
 			address: "https://code.v1.dodo.cloud/helm-charts"
-			branch: "main"
-			path: "charts/resource-renderer"
+			branch:  "main"
+			path:    "charts/resource-renderer"
 		}
 	}
 
 	volume: zot: size: "100Gi"
 
-	_httpPort: 80
+	_httpPort:               80
 	_oauth2ClientSecretName: "oauth2-client"
 
 	helm: {
 		"oauth2-client": {
 			chart: charts.oauth2Client
-			info: "Creating OAuth2 client"
+			info:  "Creating OAuth2 client"
 			// TODO(gio): remove once hydra maester is installed as part of dodo itself
 			dependsOn: [{
-				name: "auth"
+				name:      "auth"
 				namespace: "\(global.namespacePrefix)core-auth"
 			}]
 			values: {
-				name: "\(release.namespace)-zot"
+				name:       "\(release.namespace)-zot"
 				secretName: _oauth2ClientSecretName
 				grantTypes: ["authorization_code"]
 				responseTypes: ["code"]
@@ -110,30 +110,30 @@
 		}
 		"config-renderer": {
 			chart: charts.resourceRenderer
-			info: "Generating Zot configuration"
+			info:  "Generating Zot configuration"
 			values: {
-				name: "config-renderer"
+				name:       "config-renderer"
 				secretName: _oauth2ClientSecretName
 				resourceTemplate: yaml.Marshal({
 					apiVersion: "v1"
-					kind: "ConfigMap"
+					kind:       "ConfigMap"
 					metadata: {
-						name: _zotConfigMapName
+						name:      _zotConfigMapName
 						namespace: "\(release.namespace)"
 					}
 					data: {
 						"config.json": json.Marshal({
 							storage: rootDirectory: "/var/lib/registry"
 							http: {
-								address: "0.0.0.0"
-								port: "5000"
+								address:     "0.0.0.0"
+								port:        "5000"
 								externalUrl: url
 								auth: openid: providers: oidc: {
-									name: "dodo:"
-									issuer: "https://hydra.\(networks.public.domain)"
-									clientid: "{{ .client_id }}"
+									name:         "dodo:"
+									issuer:       "https://hydra.\(networks.public.domain)"
+									clientid:     "{{ .client_id }}"
 									clientsecret: "{{ .client_secret }}"
-									keypath: ""
+									keypath:      ""
 									scopes: ["openid", "profile", "email", "groups"]
 								}
 								accessControl: {
@@ -147,7 +147,7 @@
 							}
 							log: level: "debug"
 							extensions: {
-								ui: enable: true
+								ui: enable:     true
 								search: enable: true
 							}
 						})
@@ -157,11 +157,11 @@
 		}
 		zot: {
 			chart: charts.zot
-			info: "Installing Zot server"
+			info:  "Installing Zot server"
 			values: {
 				image: {
 					repository: images.zot.fullName
-					tag: images.zot.tag
+					tag:        images.zot.tag
 					pullPolicy: images.zot.pullPolicy
 				}
 				service: {
@@ -176,14 +176,14 @@
 				persistence: true
 				pvc: {
 					create: false
-					name: volume.zot.name
+					name:   volume.zot.name
 				}
 				extraVolumes: [{
 					name: "config"
 					configMap: name: _zotConfigMapName
 				}]
 				extraVolumeMounts: [{
-					name: "config"
+					name:      "config"
 					mountPath: "/etc/zot"
 				}]
 				startupProbe: {}
@@ -195,7 +195,7 @@
 _zotConfigMapName: "zot-config"
 
 help: [{
-	title: "Authenticate"
+	title:    "Authenticate"
 	contents: """
 	First generate new API key.  
 	docker login \\-\\-username=**\\<YOUR-USERNAME\\>**@\(networks.public.domain) \\-\\-password=**\\<YOUR-API-KEY\\>** \(_domain)