dsseries: init at 1.0.5-1

Changed files
+82
nixos
modules
services
hardware
sane_extra_backends
pkgs
applications
graphics
sane
backends
dsseries
top-level
+1
nixos/modules/module-list.nix
···
./services/hardware/ratbagd.nix
./services/hardware/sane.nix
./services/hardware/sane_extra_backends/brscan4.nix
+
./services/hardware/sane_extra_backends/dsseries.nix
./services/hardware/tcsd.nix
./services/hardware/tlp.nix
./services/hardware/thinkfan.nix
+26
nixos/modules/services/hardware/sane_extra_backends/dsseries.nix
···
+
{ config, lib, pkgs, ... }:
+
+
with lib;
+
+
{
+
options = {
+
+
hardware.sane.dsseries.enable =
+
mkEnableOption "Brother DSSeries scan backend" // {
+
description = ''
+
When enabled, will automatically register the "dsseries" SANE backend.
+
+
This supports the Brother DSmobile scanner series, including the
+
DS-620, DS-720D, DS-820W, and DS-920DW scanners.
+
'';
+
};
+
};
+
+
config = mkIf (config.hardware.sane.enable && config.hardware.sane.dsseries.enable) {
+
+
hardware.sane.extraBackends = [ pkgs.dsseries ];
+
services.udev.packages = [ pkgs.dsseries ];
+
boot.kernelModules = [ "sg" ];
+
+
};
+
}
+53
pkgs/applications/graphics/sane/backends/dsseries/default.nix
···
+
{ stdenv, fetchurl, rpmextract }:
+
+
stdenv.mkDerivation rec {
+
name = "libsane-dsseries-${version}";
+
version = "1.0.5-1";
+
+
src = fetchurl {
+
url = "https://download.brother.com/welcome/dlf100974/${name}.x86_64.rpm";
+
sha256 = "1wfdbfbf51cc7njzikdg48kwpnpc0pg5s6p0s0y3z0q7y59x2wbq";
+
};
+
+
nativeBuildInputs = [ rpmextract ];
+
+
unpackCmd = ''
+
mkdir ${name} && pushd ${name}
+
rpmextract $curSrc
+
popd
+
'';
+
+
patchPhase = ''
+
substituteInPlace etc/udev/rules.d/50-Brother_DSScanner.rules \
+
--replace 'GROUP="users"' 'GROUP="scanner", ENV{libsane_matched}="yes"'
+
+
mkdir -p etc/sane.d/dll.d
+
echo "dsseries" > etc/sane.d/dll.d/dsseries.conf
+
'';
+
+
installPhase = ''
+
mkdir -p $out
+
cp -dr etc $out
+
cp -dr usr/lib64 $out/lib
+
'';
+
+
preFixup = ''
+
for f in `find $out/lib/sane/ -type f`; do
+
# Make it possible to find libstdc++.so.6
+
patchelf --set-rpath ${stdenv.cc.cc.lib}/lib:$out/lib/sane $f
+
+
# Horrible kludge: The driver hardcodes /usr/lib/sane/ as a dlopen path.
+
# We can directly modify the binary to force a relative lookup instead.
+
# The new path is NULL-padded to the same length as the original path.
+
sed -i "s|/usr/lib/sane/%s|%s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|g" $f
+
done
+
'';
+
+
meta = {
+
description = "Brother DSSeries SANE backend driver";
+
homepage = http://www.brother.com;
+
platforms = stdenv.lib.platforms.linux;
+
license = stdenv.lib.licenses.unfree;
+
maintainers = with stdenv.lib.maintainers; [ callahad ];
+
};
+
}
+2
pkgs/top-level/all-packages.nix
···
brscan4 = callPackage ../applications/graphics/sane/backends/brscan4 { };
+
dsseries = callPackage ../applications/graphics/sane/backends/dsseries { };
+
mkSaneConfig = callPackage ../applications/graphics/sane/config.nix { };
sane-frontends = callPackage ../applications/graphics/sane/frontends.nix { };