100 lines
3 KiB
Nix
100 lines
3 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
domain = "tel.weinturm.de";
|
|
mkphonebook = pkgs.python3.pkgs.buildPythonPackage {
|
|
pname = "fieldpoc-mkphonebook";
|
|
version = "1.0";
|
|
|
|
src = ./mkphonebook.py;
|
|
|
|
dontUnpack = true;
|
|
|
|
propagatedBuildInputs = [pkgs.makeWrapper];
|
|
|
|
format = "other";
|
|
|
|
installPhase = ''
|
|
mkdir -p $out/lib/mkphonebook
|
|
mkdir -p $out/bin
|
|
cp $src $out/lib/mkphonebook/script.py
|
|
|
|
makeWrapper ${pkgs.python3.interpreter} $out/bin/mkphonebook \
|
|
--add-flags "$out/lib/mkphonebook/script.py" \
|
|
--set PYTHONPATH "${pkgs.python3.pkgs.pyyaml}/${pkgs.python3.sitePackages}"
|
|
'';
|
|
};
|
|
webmanifest = lib.generators.toJSON {} {
|
|
name = "Weinturm";
|
|
short_name = "Telefonbuch";
|
|
icons = [
|
|
{
|
|
src = "/web-app-manifest-192x192.png";
|
|
sizes = "192x192";
|
|
type = "image/png";
|
|
purpose = "maskable";
|
|
}
|
|
{
|
|
src = "/web-app-manifest-512x512.png";
|
|
sizes = "512x512";
|
|
type = "image/png";
|
|
purpose = "maskable";
|
|
}
|
|
];
|
|
theme_color = "#ffffff";
|
|
background_color = "#300a8d";
|
|
display = "standalone";
|
|
};
|
|
webmanifestFile = pkgs.writeText "site.webmanifest" webmanifest;
|
|
webroot = pkgs.stdenvNoCC.mkDerivation {
|
|
name = "webroot-${domain}";
|
|
src = ./html;
|
|
dontBuild = true;
|
|
installPhase = ''
|
|
export PATH="$PATH:${pkgs.lib.makeBinPath [pkgs.imagemagick]}"
|
|
mkdir $out
|
|
cp "$src/favicon.svg" "$out/favicon.svg"
|
|
convert -background transparent "$src/favicon.svg" -define icon:auto-resize=16,24,32,48,64,72,96,128,256 "$out/favicon.ico"
|
|
convert -background transparent "$src/favicon.svg" -resize 180x180 "$out/apple-touch-icon.png"
|
|
convert -background transparent "$src/favicon.svg" -resize 96x96 "$out/favicon-96x96.png"
|
|
convert -background transparent "$src/favicon.svg" -resize 192x192 "$out/web-app-manifest-192x192.png"
|
|
convert -background transparent "$src/favicon.svg" -resize 512x512 "$out/web-app-manifest-512x512.png"
|
|
cp "${webmanifestFile}" "$out/site.webmanifest"
|
|
ln -s /persist/html/index.html "$out/index.html"
|
|
'';
|
|
};
|
|
in {
|
|
environment.systemPackages = [
|
|
(
|
|
pkgs.writeShellScriptBin "fieldpoc-load-extensions" ''
|
|
set -e
|
|
|
|
tmpfile="$(mktemp -p /tmp tmp.extensions.XXXXXXXXXX.json)"
|
|
trap "rm -f $tmpfile" 0 2 3 15
|
|
|
|
${pkgs.yq}/bin/yq \
|
|
'.extensions[] |= with_entries(select(.key | IN("name", "type", "dialout_allowed", "trunk", "static_target", "callgroup_members", "sip_password", "dect_ipei")))' \
|
|
"$1" > $tmpfile
|
|
|
|
cat "$tmpfile" | /run/wrappers/bin/sudo -u fieldpoc tee /var/lib/fieldpoc/extensions.json >/dev/null
|
|
|
|
curl -s --fail --json '{}' http://127.0.0.1:9437/reload
|
|
|
|
${mkphonebook}/bin/mkphonebook "$1" "/persist/html/index.html"
|
|
|
|
rm -f $tmpfile
|
|
''
|
|
)
|
|
];
|
|
|
|
services.nginx.virtualHosts = {
|
|
"${domain}" = {
|
|
serverAliases = ["tel.weinturm-open-air.de"];
|
|
enableACME = true;
|
|
forceSSL = true;
|
|
root = webroot;
|
|
};
|
|
};
|
|
}
|