Add media notifications
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
8
flake.lock
generated
8
flake.lock
generated
@@ -511,11 +511,11 @@
|
|||||||
"secrets": {
|
"secrets": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1757935242,
|
"lastModified": 1757947569,
|
||||||
"narHash": "sha256-es2Uy3QsHtQieTpqSGtU7AePvxkJdLuwla9DcRTbQn4=",
|
"narHash": "sha256-Rm49tH43PW0RVVaW1mjDGwLa4lWgZ35om+LhoD1Y7KM=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "4da39113b1b5496b4351a3594c0f6efdbf0a7acf",
|
"rev": "478bf9001cf08c6e1c2111c3deb722f50adda634",
|
||||||
"revCount": 44,
|
"revCount": 45,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "ssh://git@karaolidis.com/karaolidis/nix-secrets.git"
|
"url": "ssh://git@karaolidis.com/karaolidis/nix-secrets.git"
|
||||||
},
|
},
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{ user, home }:
|
{ user, home }:
|
||||||
{ config, ... }:
|
{ config, inputs, ... }:
|
||||||
let
|
let
|
||||||
hmConfig = config.home-manager.users.${user};
|
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"
|
"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 = { };
|
virtualisation.quadlet.networks.media = { };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -81,15 +81,30 @@ in
|
|||||||
|
|
||||||
public.initialized = true;
|
public.initialized = true;
|
||||||
|
|
||||||
notifications.agents.email = {
|
notifications.agents = {
|
||||||
enabled = true;
|
email = {
|
||||||
options = {
|
enabled = true;
|
||||||
emailFrom = "jupiter@karaolidis.com";
|
options = {
|
||||||
smtpHost = "smtp.protonmail.ch";
|
emailFrom = "jupiter@karaolidis.com";
|
||||||
smtpPort = 587;
|
smtpHost = "smtp.protonmail.ch";
|
||||||
authUser = "jupiter@karaolidis.com";
|
smtpPort = 587;
|
||||||
authPass = hmConfig.sops.placeholder."jellyseerr/smtp";
|
authUser = "jupiter@karaolidis.com";
|
||||||
senderName = "Jellyseerr";
|
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";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -23,6 +23,7 @@ in
|
|||||||
templates = {
|
templates = {
|
||||||
prowlarr-env.content = ''
|
prowlarr-env.content = ''
|
||||||
API_KEY=${hmConfig.sops.placeholder."prowlarr/apiKey"}
|
API_KEY=${hmConfig.sops.placeholder."prowlarr/apiKey"}
|
||||||
|
NTFY_TOKEN=${hmConfig.sops.placeholder."ntfy/tokens/jupiter/media"}
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
// builtins.listToAttrs (
|
// builtins.listToAttrs (
|
||||||
|
@@ -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
|
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)"
|
try_forever upsert_resource "downloadclient" "name" "Transmission" "$(build_transmission_payload)"
|
||||||
prune_resources "downloadclient" "name" "Transmission"
|
prune_resources "downloadclient" "name" "Transmission"
|
||||||
|
|
||||||
|
@@ -28,6 +28,7 @@ in
|
|||||||
name = "${radarr.hostName}-env";
|
name = "${radarr.hostName}-env";
|
||||||
value.content = ''
|
value.content = ''
|
||||||
API_KEY=${hmConfig.sops.placeholder."${radarr.hostName}/apiKey"}
|
API_KEY=${hmConfig.sops.placeholder."${radarr.hostName}/apiKey"}
|
||||||
|
NTFY_TOKEN=${hmConfig.sops.placeholder."ntfy/tokens/jupiter/media"}
|
||||||
'';
|
'';
|
||||||
}) radarrs
|
}) radarrs
|
||||||
);
|
);
|
||||||
|
@@ -146,8 +146,41 @@ build_rootfolder_payload() {
|
|||||||
EOF
|
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
|
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
|
if [ -n "$ROOT_FOLDER" ]; then
|
||||||
insert_or_skip_resource "rootfolder" "path" "$ROOT_FOLDER" "$(build_rootfolder_payload)"
|
insert_or_skip_resource "rootfolder" "path" "$ROOT_FOLDER" "$(build_rootfolder_payload)"
|
||||||
prune_resources "rootfolder" "path" "$ROOT_FOLDER"
|
prune_resources "rootfolder" "path" "$ROOT_FOLDER"
|
||||||
|
@@ -28,6 +28,7 @@ in
|
|||||||
name = "${sonarr.hostName}-env";
|
name = "${sonarr.hostName}-env";
|
||||||
value.content = ''
|
value.content = ''
|
||||||
API_KEY=${hmConfig.sops.placeholder."${sonarr.hostName}/apiKey"}
|
API_KEY=${hmConfig.sops.placeholder."${sonarr.hostName}/apiKey"}
|
||||||
|
NTFY_TOKEN=${hmConfig.sops.placeholder."ntfy/tokens/jupiter/media"}
|
||||||
'';
|
'';
|
||||||
}) sonarrs
|
}) sonarrs
|
||||||
);
|
);
|
||||||
|
@@ -146,8 +146,42 @@ build_rootfolder_payload() {
|
|||||||
EOF
|
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
|
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
|
if [ -n "$ROOT_FOLDER" ]; then
|
||||||
insert_or_skip_resource "rootfolder" "path" "$ROOT_FOLDER" "$(build_rootfolder_payload)"
|
insert_or_skip_resource "rootfolder" "path" "$ROOT_FOLDER" "$(build_rootfolder_payload)"
|
||||||
prune_resources "rootfolder" "path" "$ROOT_FOLDER"
|
prune_resources "rootfolder" "path" "$ROOT_FOLDER"
|
||||||
|
@@ -19,6 +19,7 @@ in
|
|||||||
"ntfy/users/karaolidis".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml";
|
"ntfy/users/karaolidis".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml";
|
||||||
"ntfy/users/jupiter".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/grafana".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml";
|
||||||
|
"ntfy/tokens/jupiter/media".sopsFile = "${inputs.secrets}/hosts/jupiter/secrets.yaml";
|
||||||
};
|
};
|
||||||
|
|
||||||
templates = {
|
templates = {
|
||||||
@@ -50,9 +51,15 @@ in
|
|||||||
"karaolidis:${hmConfig.sops.placeholder."ntfy/users/karaolidis"}:admin"
|
"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;
|
behind-proxy = true;
|
||||||
|
|
||||||
|
Submodule submodules/secrets updated: 4da39113b1...478bf9001c
Reference in New Issue
Block a user