From 062ff799eba6df9b3007187df47e1b7291149d94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Felix=20Schr=C3=B6ter?= <dev@felschr.com>
Date: Sat, 17 May 2025 21:18:34 +0200
Subject: [PATCH] chore(services): remove immich

---
 hosts/home-server/default.nix    |   1 -
 secrets/immich/db-password.age   | Bin 605 -> 0 bytes
 secrets/immich/env.age           |  11 --
 secrets/immich/typesense/env.age |  12 --
 secrets/secrets.nix              |  15 ---
 services/immich.nix              | 187 -------------------------------
 6 files changed, 226 deletions(-)
 delete mode 100644 secrets/immich/db-password.age
 delete mode 100644 secrets/immich/env.age
 delete mode 100644 secrets/immich/typesense/env.age
 delete mode 100644 services/immich.nix

diff --git a/hosts/home-server/default.nix b/hosts/home-server/default.nix
index f3c7e0a..e8a4eda 100644
--- a/hosts/home-server/default.nix
+++ b/hosts/home-server/default.nix
@@ -40,7 +40,6 @@ in
     ../../services/wkd.nix
     ../../services/home-assistant
     ../../services/matrix
-    ../../services/immich.nix
     ../../services/miniflux.nix
     ../../services/paperless.nix
     ../../services/nextcloud.nix
diff --git a/secrets/immich/db-password.age b/secrets/immich/db-password.age
deleted file mode 100644
index 951b3b6d7d9c1be598846baf32faa7c0fa0445e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 605
zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUlcZ>?ma8#%)2+j@9
z_11RN4zzI0E-Wan@~$X~%+D`R@=Z0d49W{FsPc0y%M5o8^5jZ%&38{sGRh9~atbjv
zan%kCv~)N1%Fl5!OtmmJD=pA2@(U?5Oij)3$VRs<$1Bl0&ru;i-P}YwvphS=!zaif
zt;9Xi%`)82(JQL5%FiM!#H1jpFet~}G9|g7(v>Sq+dC-GDBr!*zt|`>JF=iMHOoRf
zyrd{2+_NYnDAzR0)yKojM?crV)dbx(bEC{G^Ku0bH&gSR%EY8{_ozTK1J`_G6YYXZ
zOVj)?ui(-|BTI|0sG<<x%F2?UN)s-lu)y%}+<>wSPp>q`LMKbVy!0^3vNAI>b1%b?
zfSe59s)~}pFtf;ra0`%ag)u(5=|!oD#i<I;A*lsPcK(_QX{FlLhTeG!*3PyOW_hk&
z3Pqv5c~M;6W+sNIE<s`brb(`@Zib~5N!|s;MHMDhi3VXom43+q`Vqkf{>7<omIjsi
z#vZ=mo>A%Mf#wA+ftiVp=7nBd0gld&eif!hj{Zg!QI-a|uG*2FT)Mit3W1)kC5|~o
z<^j$TmZn}gMoDggPL`PlP8k)E>H5YwsTl$JfdLin5l+62T*+0-B`y1J{mM+)cI)DH
zhV`f1)>YNSPG7QP!-TF&Z+A~}-eUOtX!IO$8ULuWn*TeGPOJUg*wEwdl)JsMO(*nj
PMDIRxt-U`Vdl>@&?b*&#

diff --git a/secrets/immich/env.age b/secrets/immich/env.age
deleted file mode 100644
index 718ba10..0000000
--- a/secrets/immich/env.age
+++ /dev/null
@@ -1,11 +0,0 @@
-age-encryption.org/v1
--> ssh-ed25519 OAZQhA inqJ3LPwmFLYYnfuawS0lgr98XC4l+VTmsGXzPfy1VM
-CHVm2Z8mVLazAQ1ymhfMqNrY/qlAYeSIsU2DwmIQca8
--> ssh-ed25519 lJaKnA LhTLdgpRsi3BmQspSqvdnr8J/4WybyBpu9Lvhtb1jyk
-XW51R8uatTy9niBELlJjkWXh3saNxRuIQVTBvCPGG9Y
--> ssh-ed25519 72ij7w 68Wzb9LtJPe7WcgViMVD1hhuki9dGmC2bFsvxxmkXmw
-NH03Fu3kJop0y4XiXY1Rm7WvFHg+sWI7oJvKnYttD4k
--> @U.p1-grease 9r? @v.; 1zLdC6u
-RJMgIa4ri2Dqq4S+dGTyDOA0MJlQvRcvmldt6CeweQ
---- FbkM4UZTqL5ZT0cRM1tMfYBULiV+h0YlAjC/8YdgFB8
-=�,~���슞�0+��F�x@�~U�i_M�2g<�'+\�)	?��/��D��s�eе�=��;>�rf>@Ą9*(��p����@�d'��.B��>
��waPމ'�E<��X���Uɴ��yH��L�RσR���[.F���qLy���ޥ	�ʐ
\ No newline at end of file
diff --git a/secrets/immich/typesense/env.age b/secrets/immich/typesense/env.age
deleted file mode 100644
index 1e773d9..0000000
--- a/secrets/immich/typesense/env.age
+++ /dev/null
@@ -1,12 +0,0 @@
-age-encryption.org/v1
--> ssh-ed25519 OAZQhA wSU2o2QZ09JlsQ9fjqh8/wLvJi30tXHlrQ6UgcYotic
-o5UnLub9dUm7rVT5bcanOOQOd/+Laiqhe+CPtRLkz/o
--> ssh-ed25519 lJaKnA eOwn2JPKFv/8h/HEFUn+vnuJt8vQ0ynD7igtWUAqXkA
-eGaK6kV1TK03H9RBPB2qwTQXi3XeyhHnAjg73tqghHY
--> ssh-ed25519 72ij7w 3XiCOok7DkQVm48K01F4GtHQAZrqbFFA90lPr/h4hWo
-HckvW0PBNT1KJivCqfByz/H+xQJylA2y3OpKnnbdzlQ
--> %U)HsVtW-grease
-5L/0ySnJDDEC+gGBhnwVD9Hy8i2Xbb3Dyj4XZZvO77c5A2wQqBEO8lLCBTcPAB7h
-m9UOpo654UbPvb0KsA7J9Piw/SM2Wt3oZrBzO/BF5jotKtil5yMjGyHxGg
---- dnAuqgpzLdEXoTiv7hjOFZs2tY5u3/ILDoDJN9YjRes
-z���#t��6���Fl*]���ѕ0�3:���1���F�&2��U�ǎ�l���ߢY 0�k���k��{�}&���Y��z	������
\ No newline at end of file
diff --git a/secrets/secrets.nix b/secrets/secrets.nix
index 66943b6..84ab83f 100644
--- a/secrets/secrets.nix
+++ b/secrets/secrets.nix
@@ -67,21 +67,6 @@ in
     home-pc
     home-server
   ];
-  "immich/env.age".publicKeys = [
-    felschr
-    home-pc
-    home-server
-  ];
-  "immich/db-password.age".publicKeys = [
-    felschr
-    home-pc
-    home-server
-  ];
-  "immich/typesense/env.age".publicKeys = [
-    felschr
-    home-pc
-    home-server
-  ];
 
   "firefox/site-data-exceptions.toml.age".publicKeys = [
     felschr
diff --git a/services/immich.nix b/services/immich.nix
deleted file mode 100644
index 1d65243..0000000
--- a/services/immich.nix
+++ /dev/null
@@ -1,187 +0,0 @@
-{ config, pkgs, ... }:
-
-let
-  tag = "v1.88.2";
-  dataDir = "/var/lib/immich";
-  typesenseDataDir = "/var/lib/immich/typesense/data";
-  uploadDir = "${dataDir}/upload";
-  dbuser = "immich";
-  dbname = "immich";
-  dbPasswordFile = config.age.secrets.immich-db-password.path;
-  ociBackend = config.virtualisation.oci-containers.backend;
-  containersHost = "localhost";
-  domain = "photos.felschr.com";
-
-  inherit (config.users.users.immich) uid;
-  inherit (config.users.groups.immich) gid;
-
-  pgSuperUser = config.services.postgresql.superUser;
-
-  immichBase = {
-    user = "${toString uid}:${toString gid}";
-    environment = {
-      PUID = toString uid;
-      PGID = toString gid;
-      NODE_ENV = "production";
-      DB_HOSTNAME = containersHost;
-      DB_PORT = toString config.services.postgresql.settings.port;
-      DB_USERNAME = dbuser;
-      DB_DATABASE_NAME = dbname;
-      REDIS_HOSTNAME = containersHost;
-      REDIS_PORT = toString config.services.redis.servers.immich.port;
-      TYPESENSE_HOST = "immich-typesense";
-    };
-    # only secrets need to be included, e.g. DB_PASSWORD, JWT_SECRET, MAPBOX_KEY
-    environmentFiles = [
-      config.age.secrets.immich-env.path
-      config.age.secrets.immich-typesense-env.path
-    ];
-    extraOptions = [
-      "--runtime-flag=network=host"
-      "--uidmap=0:65534:1"
-      "--gidmap=0:65534:1"
-      "--uidmap=${toString uid}:${toString uid}:1"
-      "--gidmap=${toString gid}:${toString gid}:1"
-      "--network=host"
-      "--add-host=immich-server:127.0.0.1"
-      "--add-host=immich-microservices:127.0.0.1"
-      "--add-host=immich-machine-learning:127.0.0.1"
-      "--add-host=immich-typesense:127.0.0.1"
-      "--label=io.containers.autoupdate=registry"
-    ];
-  };
-in
-{
-  age.secrets.immich-env.file = ../secrets/immich/env.age;
-  age.secrets.immich-db-password.file = ../secrets/immich/db-password.age;
-  age.secrets.immich-typesense-env.file = ../secrets/immich/typesense/env.age;
-
-  services.postgresql = {
-    enable = true;
-    enableTCPIP = true;
-    ensureDatabases = [ dbname ];
-    ensureUsers = [
-      {
-        name = dbuser;
-        ensureDBOwnership = true;
-      }
-    ];
-  };
-
-  services.redis.servers.immich = {
-    enable = true;
-    port = 31640;
-  };
-
-  systemd.services.immich-init = {
-    enable = true;
-    description = "Set up paths & database access";
-    requires = [ "postgresql.service" ];
-    after = [ "postgresql.service" ];
-    before = [
-      "${ociBackend}-immich-server.service"
-      "${ociBackend}-immich-microservices.service"
-      "${ociBackend}-immich-machine-learning.service"
-      "${ociBackend}-immich-typesense.service"
-    ];
-    wantedBy = [ "multi-user.target" ];
-    serviceConfig = {
-      Type = "oneshot";
-      LoadCredential = [ "db_password:${dbPasswordFile}" ];
-    };
-    script = ''
-      mkdir -p ${dataDir} ${uploadDir} ${typesenseDataDir}
-      echo "Set immich postgres user password"
-      db_password="$(<"$CREDENTIALS_DIRECTORY/db_password")"
-      ${pkgs.sudo}/bin/sudo -u ${pgSuperUser} ${pkgs.postgresql}/bin/psql postgres \
-        -c "alter user ${dbuser} with password '$db_password'"
-    '';
-  };
-
-  virtualisation.oci-containers.containers = {
-    immich-server = immichBase // {
-      image = "ghcr.io/immich-app/immich-server:${tag}";
-      ports = [ "3001:3001" ];
-      entrypoint = "/bin/sh";
-      cmd = [ "./start-server.sh" ];
-      volumes = [ "${uploadDir}:/usr/src/app/upload" ];
-      dependsOn = [ "immich-typesense" ];
-    };
-
-    immich-microservices = immichBase // {
-      image = "ghcr.io/immich-app/immich-server:${tag}";
-      entrypoint = "/bin/sh";
-      cmd = [ "./start-microservices.sh" ];
-      volumes = [ "${uploadDir}:/usr/src/app/upload" ];
-      dependsOn = [ "immich-typesense" ];
-    };
-
-    immich-machine-learning = immichBase // {
-      image = "ghcr.io/immich-app/immich-machine-learning:${tag}";
-      volumes = [ "${uploadDir}:/usr/src/app/upload" ];
-    };
-
-    immich-typesense = {
-      image = "docker.io/typesense/typesense:0.24.0";
-      environment.TYPESENSE_DATA_DIR = "/data";
-      environmentFiles = [ config.age.secrets.immich-typesense-env.path ];
-      volumes = [ "${typesenseDataDir}:/data" ];
-      extraOptions = [
-        "--uidmap=0:${toString uid}:1"
-        "--gidmap=0:${toString gid}:1"
-        "--network=host"
-        "--label=io.containers.autoupdate=registry"
-      ];
-    };
-  };
-
-  systemd.services = {
-    "${ociBackend}-immich-server" = {
-      requires = [
-        "postgresql.service"
-        "redis-immich.service"
-      ];
-      after = [
-        "postgresql.service"
-        "redis-immich.service"
-      ];
-    };
-
-    "${ociBackend}-immich-microservices" = {
-      requires = [
-        "postgresql.service"
-        "redis-immich.service"
-      ];
-      after = [
-        "postgresql.service"
-        "redis-immich.service"
-      ];
-    };
-
-    "${ociBackend}-immich-machine-learning" = {
-      requires = [ "postgresql.service" ];
-      after = [ "postgresql.service" ];
-    };
-  };
-
-  services.nginx.virtualHosts.${domain} = {
-    enableACME = true;
-    forceSSL = true;
-    locations."/" = {
-      proxyPass = "http://localhost:3001";
-      extraConfig = ''
-        client_max_body_size 50000M;
-      '';
-    };
-  };
-
-  users.users.immich = {
-    isSystemUser = true;
-    group = "immich";
-    uid = 980;
-  };
-
-  users.groups.immich = {
-    gid = 977;
-  };
-}