config/excluded-services.json | 4 + config/site.pkl | 8 ++ dashboard/server/youtube-worker.py | 10 +- dashboard/src/core.rs | 100 ++++++++++++- dashboard/src/main.rs | 2 +- dashboard/src/shale.rs | 2 +- nixos/configuration.nix | 9 +- nixos/dashboard.nix | 7 +- nixos/hardware-configuration.nix | 18 ++- nixos/zenith.nix | 52 +++++-- service/copyparty/prepare.py | 3 - service/copyparty/service.pkl | 1 + service/jellyfin/configure.py | 4 +- service/jellyfin/service.pkl | 4 +- service/keycloak/service.pkl | 4 +- service/navidrome/service.pkl | 2 +- service/postgres/pgadmin.pkl | 6 +- service/postgres/pgadmin/start.sh | 2 +- service/qbittorrent/prepare.py | 4 +- service/qbittorrent/service.pkl | 7 +- service/samba/service.pkl | 6 +- service/youtube/yt-feed.pkl | 1 + service/youtube/ytdl-sub.pkl | 9 +- tools/check-legacy-handoff.sh | 14 +- tools/configure-arr.py | 41 ++++++ tools/dawarich-migration.md | 22 ++- tools/deploy-test.py | 8 ++ tools/deploy.py | 11 +- tools/export-offline-postgres.py | 220 +++++++++++++++++++++++++++++ tools/import-forgejo-to-shale.py | 240 ++++++++++++++++++++++++++++++++ tools/import-personal-files.py | 114 +++++++++++++++ tools/import-personal-postgres.py | 215 ++++++++++++++++++++++++++++ tools/import-qbittorrent.sh | 4 +- tools/import-yt-feed.sh | 4 +- tools/jellyfin-migration.md | 2 + tools/legacy-handoff.md | 23 ++- tools/media-cutover.md | 195 ++++++++++++++++++++++---- tools/personal-cutover.md | 45 ++++++ tools/release.py | 15 +- tools/router.py | 2 +- tools/shale-migration.md | 36 +++++ tools/studio.py | 19 ++- tools/zenith-hardware.md | 14 +- 43 files changed, 1411 insertions(+), 98 deletions(-)