cups service: Automatically detect Gutenprint in drivers
Additional CUPS drivers can be added via "services.printing.drivers" but Gutenprint was an exception. It was possible to add a Gutenprint derivation to that list and it would work at first but unlike the other drivers Gutenprint requires a script to be run after each update or any attempt to print something would simply fail and an error would show up in the jobs queue (http://localhost:631/jobs/): "The PPD version (5.2.11) is not compatible with Gutenprint 5.2.13. Please run `/nix/store/7762kpyhfkcgmr3q81v1bbyy0bjhym80-gutenprint-5.2.13/sbin/cups-genppdupdate' as administrator." This is due to state in "/var/lib/cups/ppd" and one would need to run "/nix/store/.../bin/cups-genppdupdate -p /var/lib/cups/ppd" manually. The alternative was to enable the following option: "services.printing.gutenprint" but this had two disadvantages: 1) It is an exception that one could be unaware of or that could potentially cause some confusion. 2) One couldn't use a customized Gutenprint derivation in "services.printing.drivers" but would instead have to overwrite "pkgs.gutenprint". This new approach simply detects a Gutenprint derivation in "services.printing.gutenprint" by checking if the meta set of a derivation contains "isGutenprint = true". Therefore no special exception for Gutenprint would be required and it could easily be applied to other drivers if they would require such a script to be run.
This commit is contained in:
parent
ecea06ab2e
commit
ea23f8bb07
|
@ -1,4 +1,4 @@
|
||||||
{ lib, ... }:
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
|
@ -14,6 +14,10 @@ with lib;
|
||||||
(mkRenamedOptionModule [ "networking" "enableRT73Firmware" ] [ "networking" "enableRalinkFirmware" ])
|
(mkRenamedOptionModule [ "networking" "enableRT73Firmware" ] [ "networking" "enableRalinkFirmware" ])
|
||||||
|
|
||||||
(mkRenamedOptionModule [ "services" "cadvisor" "host" ] [ "services" "cadvisor" "listenAddress" ])
|
(mkRenamedOptionModule [ "services" "cadvisor" "host" ] [ "services" "cadvisor" "listenAddress" ])
|
||||||
|
(mkChangedOptionModule [ "services" "printing" "gutenprint" ] [ "services" "printing" "drivers" ]
|
||||||
|
(config:
|
||||||
|
let enabled = getAttrFromPath [ "services" "printing" "gutenprint" ] config;
|
||||||
|
in if enabled then [ pkgs.gutenprint ] else [ ]))
|
||||||
(mkRenamedOptionModule [ "services" "elasticsearch" "host" ] [ "services" "elasticsearch" "listenAddress" ])
|
(mkRenamedOptionModule [ "services" "elasticsearch" "host" ] [ "services" "elasticsearch" "listenAddress" ])
|
||||||
(mkRenamedOptionModule [ "services" "graphite" "api" "host" ] [ "services" "graphite" "api" "listenAddress" ])
|
(mkRenamedOptionModule [ "services" "graphite" "api" "host" ] [ "services" "graphite" "api" "listenAddress" ])
|
||||||
(mkRenamedOptionModule [ "services" "graphite" "web" "host" ] [ "services" "graphite" "web" "listenAddress" ])
|
(mkRenamedOptionModule [ "services" "graphite" "web" "host" ] [ "services" "graphite" "web" "listenAddress" ])
|
||||||
|
|
|
@ -4,7 +4,7 @@ with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
inherit (pkgs) cups cups-pk-helper cups-filters gutenprint;
|
inherit (pkgs) cups cups-pk-helper cups-filters;
|
||||||
|
|
||||||
cfg = config.services.printing;
|
cfg = config.services.printing;
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ let
|
||||||
name = "cups-progs";
|
name = "cups-progs";
|
||||||
paths =
|
paths =
|
||||||
[ cups.out additionalBackends cups-filters pkgs.ghostscript ]
|
[ cups.out additionalBackends cups-filters pkgs.ghostscript ]
|
||||||
++ optional cfg.gutenprint gutenprint
|
|
||||||
++ cfg.drivers;
|
++ cfg.drivers;
|
||||||
pathsToLink = [ "/lib" "/share/cups" "/bin" ];
|
pathsToLink = [ "/lib" "/share/cups" "/bin" ];
|
||||||
postBuild = cfg.bindirCmds;
|
postBuild = cfg.bindirCmds;
|
||||||
|
@ -97,12 +96,15 @@ let
|
||||||
(writeConf "client.conf" cfg.clientConf)
|
(writeConf "client.conf" cfg.clientConf)
|
||||||
(writeConf "snmp.conf" cfg.snmpConf)
|
(writeConf "snmp.conf" cfg.snmpConf)
|
||||||
] ++ optional avahiEnabled browsedFile
|
] ++ optional avahiEnabled browsedFile
|
||||||
++ optional cfg.gutenprint gutenprint
|
|
||||||
++ cfg.drivers;
|
++ cfg.drivers;
|
||||||
pathsToLink = [ "/etc/cups" ];
|
pathsToLink = [ "/etc/cups" ];
|
||||||
ignoreCollisions = true;
|
ignoreCollisions = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
filterGutenprint = pkgs: filter (pkg: pkg.meta.isGutenprint or false == true) pkgs;
|
||||||
|
containsGutenprint = pkgs: length (filterGutenprint pkgs) > 0;
|
||||||
|
getGutenprint = pkgs: head (filterGutenprint pkgs);
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -224,23 +226,17 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
gutenprint = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = ''
|
|
||||||
Whether to enable Gutenprint drivers for CUPS. This includes auto-updating
|
|
||||||
Gutenprint PPD files.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
drivers = mkOption {
|
drivers = mkOption {
|
||||||
type = types.listOf types.path;
|
type = types.listOf types.path;
|
||||||
default = [];
|
default = [];
|
||||||
example = literalExample "[ pkgs.splix ]";
|
example = literalExample "[ pkgs.gutenprint pkgs.hplip pkgs.splix ]";
|
||||||
description = ''
|
description = ''
|
||||||
CUPS drivers to use. Drivers provided by CUPS, cups-filters, Ghostscript
|
CUPS drivers to use. Drivers provided by CUPS, cups-filters,
|
||||||
and Samba are added unconditionally. For adding Gutenprint, see
|
Ghostscript and Samba are added unconditionally. If this list contains
|
||||||
<literal>gutenprint</literal>.
|
Gutenprint (i.e. a derivation with
|
||||||
|
<literal>meta.isGutenprint = true</literal>) the PPD files in
|
||||||
|
<filename>/var/lib/cups/ppd</filename> will be updated automatically
|
||||||
|
to avoid errors due to incompatible versions.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -318,9 +314,9 @@ in
|
||||||
[ ! -e /var/lib/cups/path ] && \
|
[ ! -e /var/lib/cups/path ] && \
|
||||||
ln -s ${bindir} /var/lib/cups/path
|
ln -s ${bindir} /var/lib/cups/path
|
||||||
|
|
||||||
${optionalString cfg.gutenprint ''
|
${optionalString (containsGutenprint cfg.drivers) ''
|
||||||
if [ -d /var/lib/cups/ppd ]; then
|
if [ -d /var/lib/cups/ppd ]; then
|
||||||
${gutenprint}/bin/cups-genppdupdate -p /var/lib/cups/ppd
|
${getGutenprint cfg.drivers}/bin/cups-genppdupdate -p /var/lib/cups/ppd
|
||||||
fi
|
fi
|
||||||
''}
|
''}
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -47,5 +47,6 @@ stdenv.mkDerivation rec {
|
||||||
homepage = https://sourceforge.net/projects/gimp-print/;
|
homepage = https://sourceforge.net/projects/gimp-print/;
|
||||||
license = licenses.gpl2;
|
license = licenses.gpl2;
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
|
isGutenprint = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue