{ config, lib, ... }: with lib; let cfg = config.roles.printing; in { options.roles.printing = { enable = mkEnableOption "Enable default printing setup"; printerName = mkOption { type = types.str; default = "MFC-L8900CDW_series"; description = "Name for the default printer"; }; printerUri = mkOption { type = types.str; default = "ipp://brother.oglehome/ipp/print"; description = "Device URI for the default printer (e.g., ipp://hostname/ipp/print)"; }; printerModel = mkOption { type = types.str; default = "everywhere"; description = "PPD model for the printer (use 'everywhere' for driverless IPP)"; }; }; config = mkIf cfg.enable { services.printing.enable = true; services.avahi = { enable = true; nssmdns4 = true; openFirewall = true; }; hardware.printers.ensurePrinters = [{ name = cfg.printerName; deviceUri = cfg.printerUri; model = cfg.printerModel; }]; hardware.printers.ensureDefaultPrinter = cfg.printerName; # Fix ensure-printers service to wait for network availability systemd.services.ensure-printers = { after = [ "cups.service" "network-online.target" ]; wants = [ "cups.service" "network-online.target" ]; }; }; }