21 , withNonFreePlugins ? false
26 description = "Epson Scan 2 scanner driver for many modern Epson scanners and multifunction printers";
29 system = stdenv.hostPlatform.system;
32 url = "https://download3.ebz.epson.net/dsc/f/03/00/14/53/67/1a6447b4acc5568dfd970feba0518fabea35bca2/epsonscan2-${version}-1.src.tar.gz";
33 hash = "sha256-xwvdgmV6Mrs1RC18U2mA+HlTYybeYb0V5lz5hCvC7+8=";
36 "i686-linux" = fetchzip {
37 name = "${pname}-bundle";
38 url = "https://download3.ebz.epson.net/dsc/f/03/00/14/53/69/3151031c0fb4deea3f48781fd051411b983ccee4/epsonscan2-bundle-${version}.i686.deb.tar.gz";
39 hash = "sha256-nq3Nqunt8aMcCf7U7JBYrVscvrhhcwcn8RlhYXLmC2c=";
42 "x86_64-linux" = fetchzip {
43 name = "${pname}-bundle";
44 url = "https://download3.ebz.epson.net/dsc/f/03/00/14/53/68/a5e06101ba3f328dd747888e3dddebbb677bb8c8/epsonscan2-bundle-${version}.x86_64.deb.tar.gz";
45 hash = "sha256-cFx54CKkZtvhZ5ABuBwB8+IzhT2lu8D3+GZFaMuWf3Y=";
47 }."${system}" or (throw "Unsupported system: ${system}");
51 inherit pname src version;
56 url = "https://github.com/flathub/net.epson.epsonscan2/raw/master/patches/epsonscan2-crash.patch";
57 hash = "sha256-srMxlFfnZuJ3ed5veFcJIiZuW27F/3xOS0yr4ywn4FI=";
60 url = "https://raw.githubusercontent.com/flathub/net.epson.epsonscan2/master/patches/epsonscan2-oob-container.patch";
61 hash = "sha256-FhXZT0bIBYwdFow2USRJl8Q7j2eqpq98Hh0lHFQlUQY=";
64 url = "https://raw.githubusercontent.com/flathub/net.epson.epsonscan2/master/patches/epsonscan2-xdg-open.patch";
65 hash = "sha256-4ih3vZjPwWiiAxKfpLIwbbsk1K2oXSuxGbT5PVwfUsc=";
70 substituteInPlace src/Controller/Src/Scanner/Engine.cpp \
71 --replace '@KILLALL@' ${killall}/bin/killall
73 substituteInPlace src/Controller/Src/Filter/GetOrientation.cpp \
74 --replace '@OCR_ENGINE_GETROTATE@' $out/libexec/epsonscan2-ocr/ocr-engine-getrotate
79 ] ++ lib.optionals withGui [
80 imagemagick # to make icons
82 ] ++ lib.optionals withNonFreePlugins [
92 ] ++ lib.optionals withGui [
95 ] ++ lib.optionals withNonFreePlugins [
100 # The non-free (Debian) packages uses this directory structure so do the same when compiling
101 # from source so we can easily merge them.
102 "-DCMAKE_INSTALL_LIBDIR=lib/${system}-gnu"
103 ] ++ lib.optionals (!withGui) [
108 # But when we put all the libraries in lib/${system}-gnu, then SANE can't find the
109 # required libraries so create a symlink to where it expects them to be.
110 mkdir -p $out/lib/sane
111 for file in $out/lib/${system}-gnu/sane/*.so.*; do
112 ln -s $file $out/lib/sane/
114 '' + lib.optionalString withGui ''
115 # The icon file extension is .ico but it's actually a png!
116 mkdir -p $out/share/icons/hicolor/{48x48,128x128}/apps
117 convert $src/Resources/Icons/escan2_app.ico -resize 48x48 $out/share/icons/hicolor/48x48/apps/epsonscan2.png
118 convert $src/Resources/Icons/escan2_app.ico -resize 128x128 $out/share/icons/hicolor/128x128/apps/epsonscan2.png
119 '' + lib.optionalString withNonFreePlugins ''
120 ar xf ${bundle}/plugins/epsonscan2-non-free-plugin_*.deb
125 desktopItems = lib.optionals withGui [
130 desktopName = "Epson Scan 2";
131 genericName = "Epson Scan 2";
132 comment = description;
133 categories = [ "Graphics" "Scanning" ];
140 Epson Scan 2 scanner driver including optional non-free plugins such as OCR and network
143 To use the SANE backend:
145 hardware.sane.extraBackends = [ pkgs.epsonscan2 ];
148 Overrides can be used to customise this package. For example, to enable non-free plugins and
149 disable the Epson GUI:
151 pkgs.epsonscan2.override { withNonFreePlugins = true; withGui = false; }
154 homepage = "https://support.epson.net/linux/en/epsonscan2.php";
155 platforms = [ "i686-linux" "x86_64-linux" ];
156 sourceProvenance = with lib.sourceTypes; [ fromSource ] ++ lib.optionals withNonFreePlugins [ binaryNativeCode ];
157 license = with lib.licenses; if withNonFreePlugins then unfree else lgpl21Plus;
158 maintainers = with lib.maintainers; [ james-atkins ];