installer: helmrelease for app namespaces
diff --git a/core/installer/values-tmpl/certificate-issuer.yaml b/core/installer/values-tmpl/certificate-issuer.yaml
index db2ed7b..61134eb 100644
--- a/core/installer/values-tmpl/certificate-issuer.yaml
+++ b/core/installer/values-tmpl/certificate-issuer.yaml
@@ -4,6 +4,9 @@
   name: certificate-issuer
   namespace: {{ .Global.NamespacePrefix }}ingress-private
 spec:
+  dependsOn:
+  - name: ingress-private
+    namespace: {{ .Global.NamespacePrefix }}ingress-private
   chart:
     spec:
       chart: charts/certificate-issuer
@@ -11,9 +14,6 @@
         kind: GitRepository
         name: pcloud
         namespace: {{ .Global.Id }}
-  dependsOn:
-  - name: ingress-private
-    namespace: {{ .Global.NamespacePrefix }}ingress-private
   interval: 1m0s
   values:
     pcloudInstanceId: {{ .Global.Id }}
diff --git a/core/installer/values-tmpl/core-auth-storage.yaml b/core/installer/values-tmpl/core-auth-storage.yaml
index d1ad1d9..a29d269 100644
--- a/core/installer/values-tmpl/core-auth-storage.yaml
+++ b/core/installer/values-tmpl/core-auth-storage.yaml
@@ -1,9 +1,32 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-core-auth
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-core-auth
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: core-auth-storage
   namespace: {{ .Global.NamespacePrefix }}core-auth
 spec:
+  dependsOn:
+    - name: namespaces-core-auth
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: charts/postgresql
diff --git a/core/installer/values-tmpl/headscale.yaml b/core/installer/values-tmpl/headscale.yaml
index b908419..5c8a333 100644
--- a/core/installer/values-tmpl/headscale.yaml
+++ b/core/installer/values-tmpl/headscale.yaml
@@ -1,11 +1,34 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-headscale
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-headscale
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: headscale
   namespace: {{ .Global.NamespacePrefix }}app-headscale
   annotations:
     version: 2-with-oidc-hydra-admin
 spec:
+  dependsOn:
+    - name: namespaces-headscale
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: charts/headscale
diff --git a/core/installer/values-tmpl/ingress-private.yaml b/core/installer/values-tmpl/ingress-private.yaml
index a0e4246..e0fd9af 100644
--- a/core/installer/values-tmpl/ingress-private.yaml
+++ b/core/installer/values-tmpl/ingress-private.yaml
@@ -1,9 +1,32 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-ingress-private
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-ingress-private
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: ingress-private
   namespace: {{ .Global.NamespacePrefix }}ingress-private
 spec:
+  dependsOn:
+    - name: namespaces-ingress-private
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: charts/ingress-nginx
diff --git a/core/installer/values-tmpl/ingress-public.yaml b/core/installer/values-tmpl/ingress-public.yaml
index f3c4748..010bed9 100644
--- a/core/installer/values-tmpl/ingress-public.yaml
+++ b/core/installer/values-tmpl/ingress-public.yaml
@@ -1,9 +1,32 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-ingress-public
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-ingress-public
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: ingress-public
   namespace: {{ .Values.NamespacePrefix }}ingress-public
 spec:
+  dependsOn:
+    - name: namespaces-ingress-public
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: ingress-nginx
diff --git a/core/installer/values-tmpl/jellyfin.yaml b/core/installer/values-tmpl/jellyfin.yaml
index d68109a..9743bff 100644
--- a/core/installer/values-tmpl/jellyfin.yaml
+++ b/core/installer/values-tmpl/jellyfin.yaml
@@ -1,22 +1,42 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
-  name: jellyfin
-  namespace: {{ .Values.NamespacePrefix }}app-jellyfin
+  name: namespaces-jellyfin
+  namespace: {{ .Global.Id }}
 spec:
   chart:
     spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-jellyfin
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: jellyfin
+  namespace: {{ .Global.NamespacePrefix }}app-jellyfin
+spec:
+  dependsOn:
+    - name: namespaces-jellyfin
+      namespace: {{ .Global.Id }}
+  chart:
+    spec:
       chart: charts/jellyfin
       sourceRef:
         kind: GitRepository
         name: pcloud
-        namespace: {{ .Values.Id }}
-  dependsOn:
-    - name: namespaces
-      namespace: {{ .Values.Id }}
+        namespace: {{ .Global.Id }}
   interval: 1m0s
   values:
-    pcloudInstanceId: {{ .Values.Id }}
+    pcloudInstanceId: {{ .Global.Id }}
     ingress:
-      className: {{ .Values.Id }}-ingress-private
-      domain: jellyfin.p.{{ .Values.Domain }}
+      className: {{ .Global.Id }}-ingress-private
+      domain: {{ .Values.Subdomain }}.{{ .Global.PrivateDomain }}
diff --git a/core/installer/values-tmpl/maddy.yaml b/core/installer/values-tmpl/maddy.yaml
index 3476438..73ad395 100644
--- a/core/installer/values-tmpl/maddy.yaml
+++ b/core/installer/values-tmpl/maddy.yaml
@@ -1,9 +1,32 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-maddy
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-maddy
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: maddy
   namespace: {{ .Values.NamespacePrefix }}app-maddy
 spec:
+  dependsOn:
+    - name: namespaces-maddy
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: charts/maddy
@@ -11,9 +34,6 @@
         kind: GitRepository
         name: pcloud
         namespace: {{ .Values.Id }}
-  dependsOn:
-    - name: namespaces
-      namespace: {{ .Values.Id }}
   interval: 1m0s
   values:
     ingress:
diff --git a/core/installer/values-tmpl/matrix-storage.yaml b/core/installer/values-tmpl/matrix-storage.yaml
index 7c00497..0684427 100644
--- a/core/installer/values-tmpl/matrix-storage.yaml
+++ b/core/installer/values-tmpl/matrix-storage.yaml
@@ -1,9 +1,32 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-matrix
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-matrix
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: matrix-storage
   namespace: {{ .Values.NamespacePrefix }}app-matrix
 spec:
+  dependsOn:
+    - name: namespaces-matrix
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: postgresql
@@ -12,9 +35,6 @@
         kind: HelmRepository
         name: bitnami
         namespace: {{ .Values.Id }}
-  dependsOn:
-  - name: namespaces
-    namespace: {{ .Values.Id }}
   interval: 1m0s
   values:
     fullnameOverride: postgres
diff --git a/core/installer/values-tmpl/pihole.yaml b/core/installer/values-tmpl/pihole.yaml
index 2e38278..ad34321 100644
--- a/core/installer/values-tmpl/pihole.yaml
+++ b/core/installer/values-tmpl/pihole.yaml
@@ -1,9 +1,32 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-pihole
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-pihole
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: pihole
   namespace: {{ .Global.NamespacePrefix }}app-pihole
 spec:
+  dependsOn:
+    - name: namespaces-pihole
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: charts/pihole
diff --git a/core/installer/values-tmpl/qbittorrent.yaml b/core/installer/values-tmpl/qbittorrent.yaml
index 0eaf507..57b6e12 100644
--- a/core/installer/values-tmpl/qbittorrent.yaml
+++ b/core/installer/values-tmpl/qbittorrent.yaml
@@ -1,29 +1,49 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
-  name: qbittorrent
-  namespace: {{ .Values.NamespacePrefix }}app-torrent # TODO(giolekva): qbittorrent
+  name: namespaces-qbittorrent
+  namespace: {{ .Global.Id }}
 spec:
   chart:
     spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-qbittorrent
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: qbittorrent
+  namespace: {{ .Global.NamespacePrefix }}app-qbittorrent
+spec:
+  dependsOn:
+    - name: namespaces-qbittorrent
+      namespace: {{ .Global.Id }}
+  chart:
+    spec:
       chart: charts/qbittorrent
       sourceRef:
         kind: GitRepository
         name: pcloud
-        namespace: {{ .Values.Id }}
-  dependsOn:
-    - name: namespaces
-      namespace: {{ .Values.Id }}
+        namespace: {{ .Global.Id }}
   interval: 1m0s
   values:
-    pcloudInstanceId: {{ .Values.Id }}
+    pcloudInstanceId: {{ .Global.Id }}
     image:
       repository: lscr.io/linuxserver/qbittorrent
-      tag: latest
+      tag: 4.5.3
       pullPolicy: IfNotPresent
     ingress:
-      className: {{ .Values.Id }}-ingress-private
-      domain: torrent.p.{{ .Values.Domain }}
+      className: {{ .Global.Id }}-ingress-private
+      domain: {{ .Values.Subdomain }}.{{ .Global.PrivateDomain }}
     webui:
       port: 8080
     bittorrent:
diff --git a/core/installer/values-tmpl/rpuppy.yaml b/core/installer/values-tmpl/rpuppy.yaml
index e6014a3..4c2efda 100644
--- a/core/installer/values-tmpl/rpuppy.yaml
+++ b/core/installer/values-tmpl/rpuppy.yaml
@@ -1,9 +1,32 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-rpuppy
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-rpuppy
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: rpuppy
   namespace: {{ .Global.NamespacePrefix }}app-rpuppy
 spec:
+  dependsOn:
+    - name: namespaces-rpuppy
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: charts/rpuppy
diff --git a/core/installer/values-tmpl/vaultwarden.yaml b/core/installer/values-tmpl/vaultwarden.yaml
index 3de6b75..301b122 100644
--- a/core/installer/values-tmpl/vaultwarden.yaml
+++ b/core/installer/values-tmpl/vaultwarden.yaml
@@ -1,9 +1,32 @@
 apiVersion: helm.toolkit.fluxcd.io/v2beta1
 kind: HelmRelease
 metadata:
+  name: namespaces-vaultwarden
+  namespace: {{ .Global.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Global.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Global.Id }}
+    namespacePrefix: {{ .Global.NamespacePrefix }}
+    namespaces:
+    - app-vaultwarden
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
   name: vaultwarden
   namespace: {{ .Global.NamespacePrefix }}app-vaultwarden
 spec:
+  dependsOn:
+    - name: namespaces-vaultwarden
+      namespace: {{ .Global.Id }}
   chart:
     spec:
       chart: charts/vaultwarden
diff --git a/core/installer/values-tmpl/vpn-mesh-config.yaml b/core/installer/values-tmpl/vpn-mesh-config.yaml
index 20279a4..d42e1c8 100644
--- a/core/installer/values-tmpl/vpn-mesh-config.yaml
+++ b/core/installer/values-tmpl/vpn-mesh-config.yaml
@@ -11,9 +11,6 @@
         kind: GitRepository
         name: pcloud
         namespace: {{ .Values.Id }}
-  dependsOn:
-  - name: namespaces
-    namespace: {{ .Values.Id }}
   interval: 1m0s
   values:
     domain: {{ .Values.Domain }}