From b118c31fd5db6efa87a5d9acbbc52a1a5334336f Mon Sep 17 00:00:00 2001 From: Daniel Langbein Date: Fri, 28 Mar 2025 16:22:48 +0100 Subject: [PATCH] add notify-change --- hosts/yodaNas/host-specific.nix | 12 ++-- hosts/yodaNas/notify-change.nix | 106 ++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 hosts/yodaNas/notify-change.nix diff --git a/hosts/yodaNas/host-specific.nix b/hosts/yodaNas/host-specific.nix index 7a952cf..2b280ac 100644 --- a/hosts/yodaNas/host-specific.nix +++ b/hosts/yodaNas/host-specific.nix @@ -1,8 +1,12 @@ { config, pkgs, ... }: +let + name = "Jinja-Compose"; +in { imports = [ ../../modules/snowflake.nix ./syncthing.nix + ./notify-change.nix ]; # Update and start Jinja-Compose project @@ -10,9 +14,9 @@ # To view the log, run # journalctl -b -u Jinja-Compose -f # - systemd.timers."Jinja-Compose" = { + systemd.timers."${name}" = { wantedBy = [ "timers.target" ]; - partOf = [ "Jinja-Compose.service" ]; + partOf = [ "${name}.service" ]; timerConfig = { OnBootSec = "0m"; OnUnitInactiveSec = "30m"; @@ -22,8 +26,8 @@ }; }; # TODO: Add shutdown script (./docker-compose down). - systemd.services."Jinja-Compose" = { - description = "Update and start Jinja-Compose project"; + systemd.services."${name}" = { + description = "Update and start ${name} project"; serviceConfig = { Type = "oneshot"; PrivateTmp = true; diff --git a/hosts/yodaNas/notify-change.nix b/hosts/yodaNas/notify-change.nix new file mode 100644 index 0000000..3b60b76 --- /dev/null +++ b/hosts/yodaNas/notify-change.nix @@ -0,0 +1,106 @@ +{ config, pkgs, ...}: +let + name = "notify-change"; + subdir = "readonly-git/notify-change"; + fulldir = "/home/yoda/${subdir}"; + + jdk = pkgs.jdk23; + gradle = pkgs.gradle.override { + java = jdk; + javaToolchains = [ jdk ]; + }; +in +{ + # /secrets/"${name}-EMAIL_USER" + deployment.keys."${name}-EMAIL_USER" = { + keyFile = ../../secrets/user.web.de; + destDir = "/secrets"; + user = "yoda"; + #group = "smtpd"; # Default: root + permissions = "0400"; + uploadAt = "pre-activation"; + }; + # /secrets/"${name}-EMAIL_PASSWORD" + deployment.keys."${name}-EMAIL_PASSWORD" = { + keyFile = ../../secrets/pwd.web.de; + destDir = "/secrets"; + user = "yoda"; + #group = "smtpd"; # Default: root + permissions = "0400"; + uploadAt = "pre-activation"; + }; + # /secrets/"${name}-ILIAS_USER" + deployment.keys."${name}-ILIAS_USER" = { + keyFile = ../../secrets/user.ilias.uni-marburg.de; + destDir = "/secrets"; + user = "yoda"; + #group = "smtpd"; # Default: root + permissions = "0400"; + uploadAt = "pre-activation"; + }; + # /secrets/"${name}-ILIAS_PASSWORD" + deployment.keys."${name}-ILIAS_PASSWORD" = { + keyFile = ../../secrets/pwd.ilias.uni-marburg.de; + destDir = "/secrets"; + user = "yoda"; + #group = "smtpd"; # Default: root + permissions = "0400"; + uploadAt = "pre-activation"; + }; + + # Download notify-change Git repository. +# home-manager.users.yoda = { osConfig, config, pkgs, ... }: { +# home.file."${subdir}".source = (builtins.fetchGit { +# url = "https://codeberg.org/privacy1st/selenium-webdriver-ide-demo"; +# ref = "changedetection"; +# #leaveDotGit = true; +# }); +# }; + + # TODO: Properly build gradle project with nix instead of systemd service script "git pull & gradle build" + + # Run service once per day. + systemd.timers."${name}" = { + wantedBy = [ "timers.target" ]; + partOf = [ "${name}.service" ]; + timerConfig = { + OnBootSec = "0m"; + OnUnitInactiveSec = "1d"; + + AccuracySec = "5m"; + RandomizedDelaySec = "5m"; + }; + }; + # Service definition. + systemd.services."${name}" = { + description = "Send notification on website change"; + serviceConfig = { + Type = "oneshot"; + PrivateTmp = true; + User = "yoda"; + }; + path = [ + pkgs.bash # todo + pkgs.git + jdk + gradle + pkgs.firefox + ]; + script = '' + set -eu -o pipefail + + TESSERACT_LIB="${pkgs.tesseract}/lib" + TESSDATA_PREFIX="${pkgs.tesseract}/share/tessdata" + + if test -d "${fulldir}"; then + cd "${fulldir}" + git pull + else + git clone --branch changedetection --single-branch https://codeberg.org/privacy1st/selenium-webdriver-ide-demo.git "${fulldir}" + cd "${fulldir}" + fi + + gradle :app:test --tests "de.p1st.changedetection.IliasFB12CoursesTest" + ''; + }; +}