diff --git a/nixos/modules/hardware/printers.nix b/nixos/modules/hardware/printers.nix index ace900d88586..a40822df11f5 100644 --- a/nixos/modules/hardware/printers.nix +++ b/nixos/modules/hardware/printers.nix @@ -1,19 +1,18 @@ { config, lib, pkgs, ... }: -with lib; let cfg = config.hardware.printers; ensurePrinter = p: let - args = cli.toGNUCommandLineShell {} ({ + args = lib.cli.toGNUCommandLineShell {} ({ p = p.name; v = p.deviceUri; m = p.model; - } // optionalAttrs (p.location != null) { + } // lib.optionalAttrs (p.location != null) { L = p.location; - } // optionalAttrs (p.description != null) { + } // lib.optionalAttrs (p.description != null) { D = p.description; - } // optionalAttrs (p.ppdOptions != {}) { - o = mapAttrsToList (name: value: "${name}=${value}") p.ppdOptions; + } // lib.optionalAttrs (p.ppdOptions != {}) { + o = lib.mapAttrsToList (name: value: "${name}=${value}") p.ppdOptions; }); in '' ${pkgs.cups}/bin/lpadmin ${args} -E @@ -24,22 +23,22 @@ let ''; # "graph but not # or /" can't be implemented as regex alone due to missing lookahead support - noInvalidChars = str: all (c: c != "#" && c != "/") (stringToCharacters str); - printerName = (types.addCheck (types.strMatching "[[:graph:]]+") noInvalidChars) + noInvalidChars = str: lib.all (c: c != "#" && c != "/") (lib.stringToCharacters str); + printerName = (lib.types.addCheck (lib.types.strMatching "[[:graph:]]+") noInvalidChars) // { description = "printable string without spaces, # and /"; }; in { options = { hardware.printers = { - ensureDefaultPrinter = mkOption { - type = types.nullOr printerName; + ensureDefaultPrinter = lib.mkOption { + type = lib.types.nullOr printerName; default = null; description = '' Ensures the named printer is the default CUPS printer / printer queue. ''; }; - ensurePrinters = mkOption { + ensurePrinters = lib.mkOption { description = '' Will regularly ensure that the given CUPS printers are configured as declared here. If a printer's options are manually changed afterwards, they will be overwritten eventually. @@ -49,9 +48,9 @@ in { Printers not listed here can still be manually configured. ''; default = []; - type = types.listOf (types.submodule { + type = lib.types.listOf (lib.types.submodule { options = { - name = mkOption { + name = lib.mkOption { type = printerName; example = "BrotherHL_Workroom"; description = '' @@ -59,25 +58,25 @@ in { May contain any printable characters except "/", "#", and space. ''; }; - location = mkOption { - type = types.nullOr types.str; + location = lib.mkOption { + type = lib.types.nullOr lib.types.str; default = null; example = "Workroom"; description = '' Optional human-readable location. ''; }; - description = mkOption { - type = types.nullOr types.str; + description = lib.mkOption { + type = lib.types.nullOr lib.types.str; default = null; example = "Brother HL-5140"; description = '' Optional human-readable description. ''; }; - deviceUri = mkOption { - type = types.str; - example = literalExpression '' + deviceUri = lib.mkOption { + type = lib.types.str; + example = lib.literalExpression '' "ipp://printserver.local/printers/BrotherHL_Workroom" "usb://HP/DESKJET%20940C?serial=CN16E6C364BH" ''; @@ -86,9 +85,9 @@ in { {command}`lpinfo -v` shows a list of supported device URIs and schemes. ''; }; - model = mkOption { - type = types.str; - example = literalExpression '' + model = lib.mkOption { + type = lib.types.str; + example = lib.literalExpression '' "gutenprint.''${lib.versions.majorMinor (lib.getVersion pkgs.gutenprint)}://brother-hl-5140/expert" ''; description = '' @@ -96,8 +95,8 @@ in { {command}`lpinfo -m` shows a list of supported models. ''; }; - ppdOptions = mkOption { - type = types.attrsOf types.str; + ppdOptions = lib.mkOption { + type = lib.types.attrsOf lib.types.str; example = { PageSize = "A4"; Duplex = "DuplexNoTumble"; @@ -114,7 +113,7 @@ in { }; }; - config = mkIf (cfg.ensurePrinters != [] && config.services.printing.enable) { + config = lib.mkIf (cfg.ensurePrinters != [] && config.services.printing.enable) { systemd.services.ensure-printers = { description = "Ensure NixOS-configured CUPS printers"; wantedBy = [ "multi-user.target" ]; @@ -126,13 +125,13 @@ in { RemainAfterExit = true; }; - script = concatStringsSep "\n" [ - (concatMapStrings ensurePrinter cfg.ensurePrinters) - (optionalString (cfg.ensureDefaultPrinter != null) + script = lib.concatStringsSep "\n" [ + (lib.concatMapStrings ensurePrinter cfg.ensurePrinters) + (lib.optionalString (cfg.ensureDefaultPrinter != null) (ensureDefaultPrinter cfg.ensureDefaultPrinter)) # Note: if cupsd is "stateless" the service can't be stopped, # otherwise the configuration will be wiped on the next start. - (optionalString (with config.services.printing; startWhenNeeded && !stateless) + (lib.optionalString (with config.services.printing; startWhenNeeded && !stateless) "systemctl stop cups.service") ]; };