Commit 63764584 authored by Profpatsch's avatar Profpatsch
Browse files

sane: Add support for the unfree Fujitsu ScanSnap drivers

This adds the scanner files already linked from the
`etc/sane.d/epjitsu.conf` file, which are extracted from the Windows
drivers and mirrored on GitHub.

Being a Japanese hardware vendor, Fujitsu’s software release &
licensing methods are horrifying, but their scanners are some of the
best, so we should definitly have discoverable support for them, which
this patch hopefully adds.

Inspiration was taken from the following sources:
https://www.josharcher.uk/code/install-scansnap-s1300-drivers-linux/
https://ubuntuforums.org/archive/index.php/t-1461915.html
https://github.com/stevleibelt/scansnap-firmware
parent cc2c11d5
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -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 <literal>/etc/sane.d/epjitsu.conf</literal> file in
        the <literal>sane-backends</literal> package.
      '';
    };

    services.saned.enable = mkOption {
      type = types.bool;
      default = false;
+12 −1
Original line number Diff line number Diff line
@@ -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";
+13 −0
Original line number Diff line number Diff line
{ lib, fetchFromGitHub }:

{
  # Fujitsu ScanSnap
  epjitsu = fetchFromGitHub {
    name = "scansnap-firmware";
    owner = "stevleibelt";
    repo = "scansnap-firmware";
    rev = "96c3a8b2a4e4f1ccc4e5827c5eb5598084fd17c8";
    sha256 = "1inchnvaqyw9d0skpg8hp5rpn27c09q58lsr42by4bahpbx5qday";
    meta.license = lib.licenses.unfree;
  };
}
+2 −0
Original line number Diff line number Diff line
@@ -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 { };