{ config, lib, ... }: with lib; let cfg = config.local.hardware.printing; inherit (config.local.net) dhcpInterface; in { options.local.hardware.printing = { enable = mkEnableOption "print and scan services"; users = mkOption { type = with types; listOf str; default = []; }; }; config = mkIf cfg.enable { assertions = [ { assertion = config.local.net.enable; message = "Printing requires net"; } ]; services.avahi = { enable = true; nssmdns4 = true; # Abre 5353 en todas las interfaces (!!!) openFirewall = false; }; hardware.sane.enable = true; networking.firewall.interfaces = mkIf (dhcpInterface != null) { ${dhcpInterface}.allowedUDPPorts = [5353]; }; services.printing.enable = true; users.users = listToAttrs (map (user: { name = user; value.extraGroups = ["scanner" "lp"]; }) cfg.users); }; }