diff --git a/nixos/modules/services/hardware/sane.nix b/nixos/modules/services/hardware/sane.nix
index 8c1bde7b4158..ccf726bd182b 100644
--- a/nixos/modules/services/hardware/sane.nix
+++ b/nixos/modules/services/hardware/sane.nix
@@ -4,7 +4,10 @@ with lib;
let
- pkg = pkgs.sane-backends;
+ pkg = pkgs.sane-backends.override {
+ scanSnapDriversUnfree = config.hardware.sane.drivers.scanSnap.enable;
+ scanSnapDriversPackage = config.hardware.sane.drivers.scanSnap.package;
+ };
sanedConf = pkgs.writeTextFile {
name = "saned.conf";
@@ -98,6 +101,28 @@ in
'';
};
+ hardware.sane.drivers.scanSnap.enable = mkOption {
+ type = types.bool;
+ default = false;
+ example = true;
+ description = ''
+ Whether to enable drivers for the Fujitsu ScanSnap scanners.
+
+ The driver files are unfree and extracted from the Windows driver image.
+ '';
+ };
+
+ hardware.sane.drivers.scanSnap.package = mkOption {
+ type = types.package;
+ default = pkgs.sane-drivers.epjitsu;
+ description = ''
+ Epjitsu driver package to use. Useful if you want to extract the driver files yourself.
+
+ The process is described in the /etc/sane.d/epjitsu.conf file in
+ the sane-backends package.
+ '';
+ };
+
services.saned.enable = mkOption {
type = types.bool;
default = false;
diff --git a/pkgs/applications/graphics/sane/backends/default.nix b/pkgs/applications/graphics/sane/backends/default.nix
index 821a97e35871..3d3c752dcdef 100644
--- a/pkgs/applications/graphics/sane/backends/default.nix
+++ b/pkgs/applications/graphics/sane/backends/default.nix
@@ -2,12 +2,16 @@
, gettext, pkg-config, python3
, avahi, libgphoto2, libieee1284, libjpeg, libpng, libtiff, libusb1, libv4l, net-snmp
, curl, systemd, libxml2, poppler
+, sane-drivers
# List of { src name backend } attibute sets - see installFirmware below:
, extraFirmware ? []
# For backwards compatibility with older setups; use extraFirmware instead:
, gt68xxFirmware ? null, snapscanFirmware ? null
+
+# Not included by default, scan snap drivers require fetching of unfree binaries.
+, scanSnapDriversUnfree ? false, scanSnapDriversPackage ? sane-drivers.epjitsu
}:
stdenv.mkDerivation {
@@ -88,7 +92,14 @@ stdenv.mkDerivation {
# net.conf conflicts with the file generated by the nixos module
rm $out/etc/sane.d/net.conf
- '' + lib.concatStrings (builtins.map installFirmware compatFirmware);
+
+ ''
+ + lib.optionalString scanSnapDriversUnfree ''
+ # the ScanSnap drivers live under the epjitsu subdirectory, which was already created by the build but is empty.
+ rmdir $out/share/sane/epjitsu
+ ln -svT ${scanSnapDriversPackage} $out/share/sane/epjitsu
+ ''
+ + lib.concatStrings (builtins.map installFirmware compatFirmware);
meta = with lib; {
description = "SANE (Scanner Access Now Easy) backends";
diff --git a/pkgs/applications/graphics/sane/drivers.nix b/pkgs/applications/graphics/sane/drivers.nix
new file mode 100644
index 000000000000..9f1a644f4fac
--- /dev/null
+++ b/pkgs/applications/graphics/sane/drivers.nix
@@ -0,0 +1,13 @@
+{ lib, fetchFromGitHub }:
+
+{
+ # Fujitsu ScanSnap
+ epjitsu = fetchFromGitHub {
+ name = "scansnap-firmware";
+ owner = "stevleibelt";
+ repo = "scansnap-firmware";
+ rev = "96c3a8b2a4e4f1ccc4e5827c5eb5598084fd17c8";
+ sha256 = "1inchnvaqyw9d0skpg8hp5rpn27c09q58lsr42by4bahpbx5qday";
+ meta.license = lib.licenses.unfree;
+ };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 1fb91e0c20e6..63c64bb3e3bd 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -31830,6 +31830,8 @@ in
sane-backends = callPackage ../applications/graphics/sane/backends (config.sane or {});
+ sane-drivers = callPackage ../applications/graphics/sane/drivers.nix {};
+
senv = callPackage ../applications/misc/senv { };
brlaser = callPackage ../misc/cups/drivers/brlaser { };