From 6fa6e6626edd8add8ef5c8111c84b0154f62e255 Mon Sep 17 00:00:00 2001 From: Ryan Yin Date: Mon, 2 Nov 2026 01:07:01 +0800 Subject: [PATCH] refactor(youko): run homepage from the native NixOS module services.homepage-dashboard runs the nixpkgs package with DynamicUser, replacing the :latest container, its system user and the activation script that rsynced the YAML into place. The YAML stays as is and is linked into /etc/homepage-dashboard. Assisted-by: Claude Code (claude-opus-5-5) --- .../homelab-services/README.md | 2 +- .../config => homepage}/bookmarks.yaml | 0 .../homelab-services/homepage/default.nix | 18 ++++++++ .../config => homepage}/services.yaml | 0 .../config => homepage}/settings.yaml | 0 .../homepage/config => homepage}/widgets.yaml | 0 .../homelab-services/immich/README.md | 2 +- .../oci-containers/homepage/config/custom.css | 0 .../oci-containers/homepage/config/custom.js | 0 .../homepage/config/docker.yaml | 3 -- .../homepage/config/kubernetes.yaml | 6 --- .../oci-containers/homepage/default.nix | 44 ------------------- hosts/12kingdoms-youko/service-user-ids.nix | 2 - 13 files changed, 20 insertions(+), 57 deletions(-) rename hosts/12kingdoms-youko/homelab-services/{oci-containers/homepage/config => homepage}/bookmarks.yaml (100%) create mode 100644 hosts/12kingdoms-youko/homelab-services/homepage/default.nix rename hosts/12kingdoms-youko/homelab-services/{oci-containers/homepage/config => homepage}/services.yaml (100%) rename hosts/12kingdoms-youko/homelab-services/{oci-containers/homepage/config => homepage}/settings.yaml (100%) rename hosts/12kingdoms-youko/homelab-services/{oci-containers/homepage/config => homepage}/widgets.yaml (100%) delete mode 100644 hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/custom.css delete mode 100644 hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/custom.js delete mode 100644 hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/docker.yaml delete mode 100644 hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/kubernetes.yaml delete mode 100644 hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/default.nix diff --git a/hosts/12kingdoms-youko/homelab-services/README.md b/hosts/12kingdoms-youko/homelab-services/README.md index 1030a80c..3fd2f65b 100644 --- a/hosts/12kingdoms-youko/homelab-services/README.md +++ b/hosts/12kingdoms-youko/homelab-services/README.md @@ -32,7 +32,7 @@ retired `aquamarine` VM — the name now belongs to the inference server, not th 1. caddy: Reverse proxy / TLS front end and the `file.writefor.fun` file server (`caddy.nix`). 1. victoriametrics + vmalert + alertmanager + grafana: Monitor the metrics of my homelab (`monitoring/`). -1. homepage + uptime-kuma: Service dashboard and uptime checks (`oci-containers/`). +1. homepage (`homepage/`) + uptime-kuma (`oci-containers/`): Service dashboard and uptime checks. All the services assume a reverse proxy in front: they listen on localhost, and a caddy service listens on the local network interface and proxies requests to them. The exception is transmission, diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/bookmarks.yaml b/hosts/12kingdoms-youko/homelab-services/homepage/bookmarks.yaml similarity index 100% rename from hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/bookmarks.yaml rename to hosts/12kingdoms-youko/homelab-services/homepage/bookmarks.yaml diff --git a/hosts/12kingdoms-youko/homelab-services/homepage/default.nix b/hosts/12kingdoms-youko/homelab-services/homepage/default.nix new file mode 100644 index 00000000..9778942d --- /dev/null +++ b/hosts/12kingdoms-youko/homelab-services/homepage/default.nix @@ -0,0 +1,18 @@ +{ lib, ... }: +{ + services.homepage-dashboard = { + enable = true; + listenPort = 54401; + allowedHosts = "home.writefor.fun"; + }; + + # Keep the config as plain YAML instead of the module's Nix options. + environment.etc = lib.listToAttrs ( + map (f: lib.nameValuePair "homepage-dashboard/${f}" { source = lib.mkForce ./${f}; }) [ + "bookmarks.yaml" + "services.yaml" + "settings.yaml" + "widgets.yaml" + ] + ); +} diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/services.yaml b/hosts/12kingdoms-youko/homelab-services/homepage/services.yaml similarity index 100% rename from hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/services.yaml rename to hosts/12kingdoms-youko/homelab-services/homepage/services.yaml diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/settings.yaml b/hosts/12kingdoms-youko/homelab-services/homepage/settings.yaml similarity index 100% rename from hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/settings.yaml rename to hosts/12kingdoms-youko/homelab-services/homepage/settings.yaml diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/widgets.yaml b/hosts/12kingdoms-youko/homelab-services/homepage/widgets.yaml similarity index 100% rename from hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/widgets.yaml rename to hosts/12kingdoms-youko/homelab-services/homepage/widgets.yaml diff --git a/hosts/12kingdoms-youko/homelab-services/immich/README.md b/hosts/12kingdoms-youko/homelab-services/immich/README.md index 7b4893f0..21122cd7 100644 --- a/hosts/12kingdoms-youko/homelab-services/immich/README.md +++ b/hosts/12kingdoms-youko/homelab-services/immich/README.md @@ -101,7 +101,7 @@ Applied — immich runs on youko. The steps below are the procedure as deployed: 2. `./default.nix`: the `services.immich` configuration (server, database, machine-learning, tmpfiles). 3. `../caddy.nix`: the `immich.writefor.fun` vhost. -4. `../oci-containers/homepage/config/services.yaml`: dashboard entry. +4. `../homepage/services.yaml`: dashboard entry. 5. Preview and deploy: `just youko dry-activate`, then `just youko`. 6. Register the first user (becomes admin), disable open signup, add the external library, trigger a scan. diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/custom.css b/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/custom.css deleted file mode 100644 index e69de29b..00000000 diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/custom.js b/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/custom.js deleted file mode 100644 index e69de29b..00000000 diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/docker.yaml b/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/docker.yaml deleted file mode 100644 index 6c9dbfac..00000000 --- a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/docker.yaml +++ /dev/null @@ -1,3 +0,0 @@ -# kana-docker: -# socket: /var/run/docker.sock -# diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/kubernetes.yaml b/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/kubernetes.yaml deleted file mode 100644 index 1033f91d..00000000 --- a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/config/kubernetes.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# https://gethomepage.dev/latest/configs/kubernetes/ - -# uses the default kubeconfig to access the cluster -# read kubbecofig from $KUBECONFIG or $HOME/.kube/config -# mode: default -mode: disabled diff --git a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/default.nix b/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/default.nix deleted file mode 100644 index 092a9450..00000000 --- a/hosts/12kingdoms-youko/homelab-services/oci-containers/homepage/default.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - config, - pkgs, - ... -}: -let - user = "homepage"; - configDir = "/var/lib/homepage-dashboard"; -in -{ - users.groups.${user} = { }; - users.users.${user} = { - group = user; - home = configDir; - isSystemUser = true; - }; - - # Install the homepage-dashboard configuration files - system.activationScripts.installHomepageDashboardConfig = '' - mkdir -p ${configDir} - ${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F644 ${./config}/ ${configDir}/ - chown -R ${user}:${user} ${configDir} - ''; - - # https://github.com/NixOS/nixpkgs/blob/nixos-26.05/nixos/modules/virtualisation/oci-containers.nix - virtualisation.oci-containers.containers = { - # check its logs via `journalctl -u podman-homepage` - homepage = { - hostname = "homepage"; - image = "ghcr.io/gethomepage/homepage:latest"; - ports = [ "127.0.0.1:54401:3000" ]; - # https://github.com/gethomepage/homepage#environment-variables - environment = { - # homepage rejects requests whose Host header it does not know about. - # caddy proxies with the original Host (`home.writefor.fun`). - HOMEPAGE_ALLOWED_HOSTS = "home.writefor.fun"; - }; - volumes = [ - "${configDir}:/app/config" - ]; - autoStart = true; - }; - }; -} diff --git a/hosts/12kingdoms-youko/service-user-ids.nix b/hosts/12kingdoms-youko/service-user-ids.nix index fc393bb2..2a192199 100644 --- a/hosts/12kingdoms-youko/service-user-ids.nix +++ b/hosts/12kingdoms-youko/service-user-ids.nix @@ -22,7 +22,6 @@ node-exporter.uid = 992; microvm.uid = 993; immich.uid = 994; - homepage.uid = 995; gitea.uid = 996; btrbk.uid = 997; avahi.uid = 998; @@ -43,7 +42,6 @@ plugdev.gid = 987; node-exporter.gid = 989; immich.gid = 990; - homepage.gid = 991; grafana.gid = 992; gitea.gid = 993; fileshare.gid = 994;