pi/services/kiwix-updater.nix
Katharina Heidenreich ecf10628c3 feat: try rework
2026-04-04 16:34:02 +02:00

91 lines
2.1 KiB
Nix

{ config, pkgs, lib, ... }:
let
serviceValidation = import ../validation/service/kiwix.nix;
service_data = import ../config/services.nix;
kiwix = serviceValidation.getKiwix service_data;
rootDir = kiwix.root_dir;
zimUrls = kiwix.urls;
updater = pkgs.writeShellScriptBin "kiwix-updater" ''
set -e
URLS=(
${builtins.concatStringsSep " " zimUrls}
)
download() {
local url=''$1
local filename=''$(basename "''$url")
local filepath="${rootDir}"/''$filename
if [ -f "''$filepath" ]; then
echo "''$filepath exists!"
return 0
fi
cd ${rootDir}
${pkgs.wget}/bin/wget --continue --quiet "''$url" -O "''$filename.tmp"
mv ''$filename.tmp ''$filename
}
build_lib() {
{
echo '<?xml version="1.0" encoding="UTF-8"?>'
echo '<library>'
for zim in "${rootDir}"/*.zim; do
if [ -f "''$zim" ]; then
filename=''$(basename "''$zim")
size=''$(stat -c%s "''$zim")
case "''$filename" in
*_en_*)
title="English Wikipedia (Text Only)"
lang="eng"
;;
*_de_*)
title="German Wikipedia (Text Only)"
lang="deu"
;;
*)
title="''$filename"
lang="unknown"
;;
esac
cat << EOF
<book id="''$filename" path="/data/''$filename" title="''$title" language="''$lang">
<title>''$title</title>
<language>''$lang</language>
<path>/data/''$filename</path>
<size>''$size</size>
</book>
EOF
fi
done
echo '</library>'
} > "${rootDir}/library.xml.tmp"
mv "${rootDir}/library.xml.tmp" "${rootDir}/library.xml"
}
for url in "''${URLS[@]}"; do
download "''$url"
done
build_lib
${pkgs.systemd}/bin/systemctl restart podman-kiwix-serve.service
'';
in {
environment.systemPackages = with pkgs; [
wget
curl
];
services.cron = {
enable = true;
systemCronJobs = [
"0 3 * * * root ${updater}/bin/kiwix-updater >/dev/null 2>&1"
];
};
}