mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
nixos/hardware.printers: remove with lib;
This commit is contained in:
parent
ea6befd73f
commit
22946376a9
@ -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")
|
||||
];
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user