diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix
index 800e12956f24..6b33eeb6e4e7 100644
--- a/nixos/modules/rename.nix
+++ b/nixos/modules/rename.nix
@@ -1,4 +1,4 @@
-{ lib, ... }:
+{ lib, pkgs, ... }:
with lib;
@@ -14,6 +14,10 @@ with lib;
(mkRenamedOptionModule [ "networking" "enableRT73Firmware" ] [ "networking" "enableRalinkFirmware" ])
(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" "graphite" "api" "host" ] [ "services" "graphite" "api" "listenAddress" ])
(mkRenamedOptionModule [ "services" "graphite" "web" "host" ] [ "services" "graphite" "web" "listenAddress" ])
diff --git a/nixos/modules/services/printing/cupsd.nix b/nixos/modules/services/printing/cupsd.nix
index 855c89303847..4c7f58d1d8bc 100644
--- a/nixos/modules/services/printing/cupsd.nix
+++ b/nixos/modules/services/printing/cupsd.nix
@@ -4,7 +4,7 @@ with lib;
let
- inherit (pkgs) cups cups-pk-helper cups-filters gutenprint;
+ inherit (pkgs) cups cups-pk-helper cups-filters;
cfg = config.services.printing;
@@ -35,7 +35,6 @@ let
name = "cups-progs";
paths =
[ cups.out additionalBackends cups-filters pkgs.ghostscript ]
- ++ optional cfg.gutenprint gutenprint
++ cfg.drivers;
pathsToLink = [ "/lib" "/share/cups" "/bin" ];
postBuild = cfg.bindirCmds;
@@ -97,12 +96,15 @@ let
(writeConf "client.conf" cfg.clientConf)
(writeConf "snmp.conf" cfg.snmpConf)
] ++ optional avahiEnabled browsedFile
- ++ optional cfg.gutenprint gutenprint
++ cfg.drivers;
pathsToLink = [ "/etc/cups" ];
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
{
@@ -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 {
type = types.listOf types.path;
default = [];
- example = literalExample "[ pkgs.splix ]";
+ example = literalExample "[ pkgs.gutenprint pkgs.hplip pkgs.splix ]";
description = ''
- CUPS drivers to use. Drivers provided by CUPS, cups-filters, Ghostscript
- and Samba are added unconditionally. For adding Gutenprint, see
- gutenprint.
+ CUPS drivers to use. Drivers provided by CUPS, cups-filters,
+ Ghostscript and Samba are added unconditionally. If this list contains
+ Gutenprint (i.e. a derivation with
+ meta.isGutenprint = true) the PPD files in
+ /var/lib/cups/ppd will be updated automatically
+ to avoid errors due to incompatible versions.
'';
};
@@ -318,9 +314,9 @@ in
[ ! -e /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
- ${gutenprint}/bin/cups-genppdupdate -p /var/lib/cups/ppd
+ ${getGutenprint cfg.drivers}/bin/cups-genppdupdate -p /var/lib/cups/ppd
fi
''}
'';
diff --git a/pkgs/misc/drivers/gutenprint/default.nix b/pkgs/misc/drivers/gutenprint/default.nix
index 0bd40721c4ed..7917d1e36160 100644
--- a/pkgs/misc/drivers/gutenprint/default.nix
+++ b/pkgs/misc/drivers/gutenprint/default.nix
@@ -47,5 +47,6 @@ stdenv.mkDerivation rec {
homepage = https://sourceforge.net/projects/gimp-print/;
license = licenses.gpl2;
platforms = platforms.linux;
+ isGutenprint = true;
};
}