Files
AZ-NIX-CLIENTS/hosts/AZ-LT-NIX/services/printing.nix

71 lines
1.9 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{pkgs, ...}: let
# Wait-Script für Erreichbarkeit des Druckers (IPPS-Port 443).
# Funktioniert sowohl im Office (direkte Route) als auch unterwegs via NetBird.
wait-for-printer = pkgs.writeShellScriptBin "wait-for-printer" ''
PRINTER_HOST="192.168.152.137"
PRINTER_PORT="443"
MAX_ATTEMPTS="120"
NC="${pkgs.netcat}/bin/nc"
for i in $(${pkgs.coreutils}/bin/seq 1 $MAX_ATTEMPTS); do
if $NC -z -w 1 "$PRINTER_HOST" "$PRINTER_PORT"; then
exit 0
fi
${pkgs.coreutils}/bin/sleep 1
done
echo "Printer $PRINTER_HOST:$PRINTER_PORT not reachable after ''${MAX_ATTEMPTS}s" >&2
exit 1
'';
in {
# CUPS Druckdienst für PDF-Druck aus n8n
# Drucker: Kyocera TASKalfa 4054ci @ 192.168.152.137
# Erreichbar im Office direkt oder unterwegs via NetBird-Tunnel.
# Das Wait-Script prüft IPPS-Port 443 unabhängig vom Interface.
systemd.services.ensure-printers = {
wantedBy = ["multi-user.target"];
wants = ["netbird.service" "network-online.target"];
after = ["netbird.service" "network-online.target"];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStartPre = ["${wait-for-printer}/bin/wait-for-printer"];
Restart = "on-failure";
RestartSec = "30s";
};
};
services.printing = {
enable = true;
drivers = with pkgs; [
cups-filters # driverless IPP Everywhere Support
];
};
# Avahi für mDNS/IPP-Druckererkennung
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
# Kyocera TASKalfa 4054ci deklarativ einrichten
hardware.printers = {
ensurePrinters = [
{
name = "JW2OG";
location = "Buero";
description = "Kyocera TASKalfa 4054ci";
deviceUri = "ipps://192.168.152.137:443/ipp/print";
model = "everywhere";
ppdOptions = {
PageSize = "A4";
};
}
];
ensureDefaultPrinter = "JW2OG";
};
}