86 lines
2.1 KiB
Nix
86 lines
2.1 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
let
|
|
service_data = import ../data/services.nix;
|
|
kiwix = service_data.kiwix;
|
|
zimUrls = kiwix.urls;
|
|
updater = pkgs.writeShellScriptBin "kiwix-updater" ''
|
|
set -e
|
|
|
|
URLS=(
|
|
${builtins.concatStringsSep " " zimUrls}
|
|
)
|
|
|
|
download() {
|
|
local url=''$1
|
|
local filename=''$(basename "''$url")
|
|
local filepath="${kiwix.root_dir}"/''$filename
|
|
|
|
if [ -f "''$filepath" ]; then
|
|
echo "''$filepath exists!"
|
|
return 0
|
|
fi
|
|
cd ${kiwix.root_dir}
|
|
${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 "${kiwix.root_dir}"/*.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>'
|
|
} > "${kiwix.root_dir}/library.xml.tmp"
|
|
mv "${kiwix.root_dir}/library.xml.tmp" "${kiwix.root_dir}/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"
|
|
];
|
|
};
|
|
}
|