From f72943c905f4edd78806198951a8b52fde0f6d94 Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Mon, 15 Sep 2025 16:36:49 +0100 Subject: [PATCH] Add media notifications Signed-off-by: Nikolaos Karaolidis --- flake.lock | 8 ++--- .../configs/console/podman/media/default.nix | 4 ++- .../podman/media/jellyseerr/default.nix | 33 +++++++++++++----- .../console/podman/media/prowlarr/default.nix | 1 + .../podman/media/prowlarr/post-start.sh | 26 ++++++++++++++ .../console/podman/media/radarr/default.nix | 1 + .../console/podman/media/radarr/post-start.sh | 33 ++++++++++++++++++ .../console/podman/media/sonarr/default.nix | 1 + .../console/podman/media/sonarr/post-start.sh | 34 +++++++++++++++++++ .../configs/console/podman/ntfy/default.nix | 11 ++++-- submodules/secrets | 2 +- 11 files changed, 137 insertions(+), 17 deletions(-) diff --git a/flake.lock b/flake.lock index 0f371d5..936e9c5 100644 --- a/flake.lock +++ b/flake.lock @@ -511,11 +511,11 @@ "secrets": { "flake": false, "locked": { - "lastModified": 1757935242, - "narHash": "sha256-es2Uy3QsHtQieTpqSGtU7AePvxkJdLuwla9DcRTbQn4=", + "lastModified": 1757947569, + "narHash": "sha256-Rm49tH43PW0RVVaW1mjDGwLa4lWgZ35om+LhoD1Y7KM=", "ref": "refs/heads/main", - "rev": "4da39113b1b5496b4351a3594c0f6efdbf0a7acf", - "revCount": 44, + "rev": "478bf9001cf08c6e1c2111c3deb722f50adda634", + "revCount": 45, "type": "git", "url": "ssh://git@karaolidis.com/karaolidis/nix-secrets.git" }, diff --git a/hosts/jupiter/users/storm/configs/console/podman/media/default.nix b/hosts/jupiter/users/storm/configs/console/podman/media/default.nix index 724b3c4..509fd52 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/media/default.nix +++ b/hosts/jupiter/users/storm/configs/console/podman/media/default.nix @@ -1,5 +1,5 @@ { user, home }: -{ config, ... }: +{ config, inputs, ... }: let hmConfig = config.home-manager.users.${user}; @@ -56,6 +56,8 @@ in "d /mnt/storage/private/storm/containers/storage/volumes/media/_data/libraries/anime/shows 755 storm storm" ]; + sops.secrets."ntfy/tokens/jupiter/media".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml"; + virtualisation.quadlet.networks.media = { }; }; } diff --git a/hosts/jupiter/users/storm/configs/console/podman/media/jellyseerr/default.nix b/hosts/jupiter/users/storm/configs/console/podman/media/jellyseerr/default.nix index 65fe452..ae6fd6c 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/media/jellyseerr/default.nix +++ b/hosts/jupiter/users/storm/configs/console/podman/media/jellyseerr/default.nix @@ -81,15 +81,30 @@ in public.initialized = true; - notifications.agents.email = { - enabled = true; - options = { - emailFrom = "jupiter@karaolidis.com"; - smtpHost = "smtp.protonmail.ch"; - smtpPort = 587; - authUser = "jupiter@karaolidis.com"; - authPass = hmConfig.sops.placeholder."jellyseerr/smtp"; - senderName = "Jellyseerr"; + notifications.agents = { + email = { + enabled = true; + options = { + emailFrom = "jupiter@karaolidis.com"; + smtpHost = "smtp.protonmail.ch"; + smtpPort = 587; + authUser = "jupiter@karaolidis.com"; + authPass = hmConfig.sops.placeholder."jellyseerr/smtp"; + senderName = "Jellyseerr"; + }; + }; + + ntfy = { + enabled = true; + embedPoster = true; + types = 2970; + options = { + url = "https://ntfy.karaolidis.com"; + topic = "media"; + authMethodUsernamePassword = false; + authMethodToken = true; + token = hmConfig.sops.placeholder."ntfy/tokens/jupiter/media"; + }; }; }; diff --git a/hosts/jupiter/users/storm/configs/console/podman/media/prowlarr/default.nix b/hosts/jupiter/users/storm/configs/console/podman/media/prowlarr/default.nix index ae90cac..92661c9 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/media/prowlarr/default.nix +++ b/hosts/jupiter/users/storm/configs/console/podman/media/prowlarr/default.nix @@ -23,6 +23,7 @@ in templates = { prowlarr-env.content = '' API_KEY=${hmConfig.sops.placeholder."prowlarr/apiKey"} + NTFY_TOKEN=${hmConfig.sops.placeholder."ntfy/tokens/jupiter/media"} ''; } // builtins.listToAttrs ( diff --git a/hosts/jupiter/users/storm/configs/console/podman/media/prowlarr/post-start.sh b/hosts/jupiter/users/storm/configs/console/podman/media/prowlarr/post-start.sh index 79a6da1..5ca1f81 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/media/prowlarr/post-start.sh +++ b/hosts/jupiter/users/storm/configs/console/podman/media/prowlarr/post-start.sh @@ -205,8 +205,34 @@ build_cardigann_indexer_payload() { ' } +build_ntfy_payload() { + cat <<-EOF +{ + "onGrab": false, + "onHealthIssue": true, + "onHealthRestored": true, + "onApplicationUpdate": false, + "includeManualGrabs": false, + "includeHealthWarnings": false, + "name": "ntfy.sh", + "fields": [ + { "name": "serverUrl", "value": "https://ntfy.karaolidis.com" }, + { "name": "accessToken", "value": "$NTFY_TOKEN" }, + { "name": "topics", "value": "media" }, + { "name": "priority", "value": 3 }, + { "name": "tags", "value": "satellite" }, + ], + "implementation": "Ntfy", + "configContract": "NtfySettings" +} +EOF +} + wait_for_api +try_forever upsert_resource "notification" "name" "ntfy.sh" "$(build_ntfy_payload)" +prune_resources "notification" "name" "ntfy.sh" + try_forever upsert_resource "downloadclient" "name" "Transmission" "$(build_transmission_payload)" prune_resources "downloadclient" "name" "Transmission" diff --git a/hosts/jupiter/users/storm/configs/console/podman/media/radarr/default.nix b/hosts/jupiter/users/storm/configs/console/podman/media/radarr/default.nix index a31d323..44ffebd 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/media/radarr/default.nix +++ b/hosts/jupiter/users/storm/configs/console/podman/media/radarr/default.nix @@ -28,6 +28,7 @@ in name = "${radarr.hostName}-env"; value.content = '' API_KEY=${hmConfig.sops.placeholder."${radarr.hostName}/apiKey"} + NTFY_TOKEN=${hmConfig.sops.placeholder."ntfy/tokens/jupiter/media"} ''; }) radarrs ); diff --git a/hosts/jupiter/users/storm/configs/console/podman/media/radarr/post-start.sh b/hosts/jupiter/users/storm/configs/console/podman/media/radarr/post-start.sh index 6966d67..c7304b8 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/media/radarr/post-start.sh +++ b/hosts/jupiter/users/storm/configs/console/podman/media/radarr/post-start.sh @@ -146,8 +146,41 @@ build_rootfolder_payload() { EOF } +build_ntfy_payload() { + cat <<-EOF +{ + "onGrab": true, + "onDownload": true, + "onUpgrade": true, + "onRename": false, + "onMovieAdded": true, + "onMovieDelete": true, + "onMovieFileDelete": true, + "onMovieFileDeleteForUpgrade": false, + "onHealthIssue": true, + "includeHealthWarnings": false, + "onHealthRestored": true, + "onApplicationUpdate": false, + "onManualInteractionRequired": true, + "name": "ntfy.sh", + "fields": [ + { "name": "serverUrl", "value": "https://ntfy.karaolidis.com" }, + { "name": "accessToken", "value": "$NTFY_TOKEN" }, + { "name": "priority", "value": 2 }, + { "name": "topics", "value": ["media"] }, + { "name": "tags", "value": ["clapper"] } + ], + "implementation": "Ntfy", + "configContract": "NtfySettings" +} +EOF +} + wait_for_api +try_forever upsert_resource "notification" "name" "ntfy.sh" "$(build_ntfy_payload)" +prune_resources "notification" "name" "ntfy.sh" + if [ -n "$ROOT_FOLDER" ]; then insert_or_skip_resource "rootfolder" "path" "$ROOT_FOLDER" "$(build_rootfolder_payload)" prune_resources "rootfolder" "path" "$ROOT_FOLDER" diff --git a/hosts/jupiter/users/storm/configs/console/podman/media/sonarr/default.nix b/hosts/jupiter/users/storm/configs/console/podman/media/sonarr/default.nix index ce664a0..f1686dc 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/media/sonarr/default.nix +++ b/hosts/jupiter/users/storm/configs/console/podman/media/sonarr/default.nix @@ -28,6 +28,7 @@ in name = "${sonarr.hostName}-env"; value.content = '' API_KEY=${hmConfig.sops.placeholder."${sonarr.hostName}/apiKey"} + NTFY_TOKEN=${hmConfig.sops.placeholder."ntfy/tokens/jupiter/media"} ''; }) sonarrs ); diff --git a/hosts/jupiter/users/storm/configs/console/podman/media/sonarr/post-start.sh b/hosts/jupiter/users/storm/configs/console/podman/media/sonarr/post-start.sh index 6bdeb98..e50d40f 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/media/sonarr/post-start.sh +++ b/hosts/jupiter/users/storm/configs/console/podman/media/sonarr/post-start.sh @@ -146,8 +146,42 @@ build_rootfolder_payload() { EOF } +build_ntfy_payload() { + cat <<-EOF +{ + "onGrab": true, + "onDownload": true, + "onUpgrade": true, + "onImportComplete": false, + "onRename": false, + "onSeriesAdd": true, + "onSeriesDelete": true, + "onEpisodeFileDelete": true, + "onEpisodeFileDeleteForUpgrade": false, + "onHealthIssue": true, + "includeHealthWarnings": false, + "onHealthRestored": true, + "onApplicationUpdate": false, + "onManualInteractionRequired": true, + "name": "ntfy.sh", + "fields": [ + { "name": "serverUrl", "value": "https://ntfy.karaolidis.com" }, + { "name": "accessToken", "value": "$NTFY_TOKEN" }, + { "name": "priority", "value": 2 }, + { "name": "topics", "value": ["media"] }, + { "name": "tags", "value": ["tv"] } + ], + "implementation": "Ntfy", + "configContract": "NtfySettings" +} +EOF +} + wait_for_api +try_forever upsert_resource "notification" "name" "ntfy.sh" "$(build_ntfy_payload)" +prune_resources "notification" "name" "ntfy.sh" + if [ -n "$ROOT_FOLDER" ]; then insert_or_skip_resource "rootfolder" "path" "$ROOT_FOLDER" "$(build_rootfolder_payload)" prune_resources "rootfolder" "path" "$ROOT_FOLDER" diff --git a/hosts/jupiter/users/storm/configs/console/podman/ntfy/default.nix b/hosts/jupiter/users/storm/configs/console/podman/ntfy/default.nix index 8ae6d54..30dd3f9 100644 --- a/hosts/jupiter/users/storm/configs/console/podman/ntfy/default.nix +++ b/hosts/jupiter/users/storm/configs/console/podman/ntfy/default.nix @@ -19,6 +19,7 @@ in "ntfy/users/karaolidis".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml"; "ntfy/users/jupiter".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml"; "ntfy/tokens/jupiter/grafana".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml"; + "ntfy/tokens/jupiter/media".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml"; }; templates = { @@ -50,9 +51,15 @@ in "karaolidis:${hmConfig.sops.placeholder."ntfy/users/karaolidis"}:admin" ]; - auth-access = [ "jupiter:grafana:wo" ]; + auth-access = [ + "jupiter:grafana:wo" + "jupiter:media:wo" + ]; - auth-tokens = [ "jupiter:${hmConfig.sops.placeholder."ntfy/tokens/jupiter/grafana"}" ]; + auth-tokens = [ + "jupiter:${hmConfig.sops.placeholder."ntfy/tokens/jupiter/grafana"}" + "jupiter:${hmConfig.sops.placeholder."ntfy/tokens/jupiter/media"}" + ]; behind-proxy = true; diff --git a/submodules/secrets b/submodules/secrets index 4da3911..478bf90 160000 --- a/submodules/secrets +++ b/submodules/secrets @@ -1 +1 @@ -Subproject commit 4da39113b1b5496b4351a3594c0f6efdbf0a7acf +Subproject commit 478bf9001cf08c6e1c2111c3deb722f50adda634