From 885f7f020649b1768e02f87b534ae1d5a9072105 Mon Sep 17 00:00:00 2001 From: heichro <76887148+heichro@users.noreply.github.com> Date: Wed, 23 Jul 2025 15:45:25 +0200 Subject: [PATCH 1/2] maintainers: add heichro (cherry picked from commit 1195e6757a967eeff49b01a3dcd6f683322516a6) --- maintainers/maintainer-list.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 3e01024d7823..839d5f5b385b 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -9749,6 +9749,12 @@ githubId = 665472; matrix = "@hehongbo:matrix.org"; }; + heichro = { + github = "heichro"; + githubId = 76887148; + keys = [ { fingerprint = "BBA7 9E8E 17FE 9C3F BFEA 61E8 30D0 186F 4E19 7E48"; } ]; + name = "heichro"; + }; heijligen = { email = "src@posteo.de"; github = "heijligen"; From 5d8ec6c1dd76e0f8718429fe4228517242e66a08 Mon Sep 17 00:00:00 2001 From: heichro <76887148+heichro@users.noreply.github.com> Date: Thu, 24 Jul 2025 21:47:33 +0200 Subject: [PATCH 2/2] epson-inkjet-printer-workforce-840-series: init at 1.0.0 (cherry picked from commit 19502c059b628d4cd2d4264f884d3043e55c1849) --- .../eps_raster_print-cast.patch | 21 +++ .../include-raster-helper.patch | 23 +++ .../package.nix | 131 ++++++++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/eps_raster_print-cast.patch create mode 100644 pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/include-raster-helper.patch create mode 100644 pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/package.nix diff --git a/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/eps_raster_print-cast.patch b/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/eps_raster_print-cast.patch new file mode 100644 index 000000000000..618ac1c91de9 --- /dev/null +++ b/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/eps_raster_print-cast.patch @@ -0,0 +1,21 @@ +diff --git a/src/raster_to_epson.c b/src/raster_to_epson.c +index 6e621c8..a5ca797 100644 +--- a/src/raster_to_epson.c ++++ b/src/raster_to_epson.c +@@ -438,14 +438,14 @@ static int print_page (void) + break; + } + +- if (eps_raster_print(raster_h, image_raw, pageRegion.bytesPerLine, pageRegion.width, &nraster)) { ++ if (eps_raster_print(raster_h, image_raw, pageRegion.bytesPerLine, pageRegion.width, (int *) &nraster)) { + error = 1; + break; + } + } + + // flushing page +- eps_raster_print(raster_h, NULL, 0, 0, &nraster); ++ eps_raster_print(raster_h, NULL, 0, 0, (int *) &nraster); + + bAbort = (error) ? TRUE : FALSE; + if (epcgEndPage (bAbort)) { diff --git a/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/include-raster-helper.patch b/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/include-raster-helper.patch new file mode 100644 index 000000000000..de32b9e54381 --- /dev/null +++ b/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/include-raster-helper.patch @@ -0,0 +1,23 @@ +diff --git a/src/pagemanager/pagemanager.c b/src/pagemanager/pagemanager.c +index 029e6d3..2881585 100644 +--- a/src/pagemanager/pagemanager.c ++++ b/src/pagemanager/pagemanager.c +@@ -23,6 +23,7 @@ + #include "debuglog.h" + #include "memory.h" + #include "raster.h" ++#include "raster-helper.h" + #include "pagemanager.h" + + extern int JobCanceled; +diff --git a/src/raster_to_epson.c b/src/raster_to_epson.c +index 6e621c8..6eea77c 100644 +--- a/src/raster_to_epson.c ++++ b/src/raster_to_epson.c +@@ -36,6 +36,7 @@ + #include "raster.h" + #include "memory.h" + #include "raster_to_epson.h" ++#include "raster-helper.h" + #include "pagemanager.h" + #include "filter_option.h" diff --git a/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/package.nix b/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/package.nix new file mode 100644 index 000000000000..fde1c9855b12 --- /dev/null +++ b/pkgs/by-name/ep/epson-inkjet-printer-workforce-840-series/package.nix @@ -0,0 +1,131 @@ +{ + autoreconfHook, + cups, + libjpeg, + rpmextract, + fetchurl, + lib, + stdenv, +}: + +let + srcdirs = { + filter = "epson-inkjet-printer-filter-1.0.0"; + driver = "epson-inkjet-printer-workforce-840-series-1.0.0"; + }; +in +stdenv.mkDerivation (finalAttrs: { + pname = "epson-inkjet-printer-workforce-840-series"; + version = "1.0.0"; + + # The Epson may be unreliable, and it has been since sometime in + # 2024. Non-browser requests using commands like fetchurl receive a + # 403 error, an access denied response -- last checked on + # 2025-08-21. + # + # Therefore, an archive.org link has been added as a fallback + # option just in case. + src = fetchurl { + # NOTE: Don't forget to update the webarchive link too! + urls = [ + "https://download.ebz.epson.net/dsc/op/stable/SRPMS/epson-inkjet-printer-workforce-840-series-${finalAttrs.version}-1lsb3.2.src.rpm" + "https://web.archive.org/web/https://download.ebz.epson.net/dsc/op/stable/SRPMS/epson-inkjet-printer-workforce-840-series-${finalAttrs.version}-1lsb3.2.src.rpm" + ]; + hash = "sha256-rTYnEmgzqR/wOZYYIe2rO9x2cX8s2qDyTuRaTjzJjbg="; + }; + sourceRoot = srcdirs.filter; + + nativeBuildInputs = [ + autoreconfHook + rpmextract + ]; + buildInputs = [ + cups + libjpeg + ]; + + unpackPhase = '' + runHook preUnpack + + rpmextract "$src" + for i in ${lib.concatStringsSep " " (builtins.attrValues srcdirs)}; do + tar xvf "$i".tar.gz + done + + runHook postUnpack + ''; + + # Both patches fix errors that occur when building with GCC 14. + # + # eps_raster_print-cast.patch fixes 'error: passing argument 5 of + # ‘eps_raster_print’ from incompatible pointer type' in file + # raster_to_epson.c + # + # include-raster-helper.patch fixes 'error: implicit declaration of + # function' in files pagemanager.c and raster_to_epson.c + patches = [ + ./eps_raster_print-cast.patch + ./include-raster-helper.patch + ]; + + installPhase = + let + filterdir = "$out/lib/cups/filter"; + docdir = "$out/share/doc/epson-inkjet-printer-workforce-840-series"; + ppddir = "$out/share/cups/model/epson-inkjet-printer-workforce-840-series"; + libdir = + if stdenv.hostPlatform.isx86_64 then + "lib64" + else + throw "Platforms other than x86_64-linux are not (yet) supported."; + in + '' + runHook preInstall + + mkdir -p "$out" "${docdir}" "${filterdir}" "${ppddir}" + cp src/epson_inkjet_printer_filter "${filterdir}" + + cp AUTHORS COPYING COPYING.EPSON COPYING.LIB "${docdir}" + + cd ../${srcdirs.driver} + cp Manual.txt README "${docdir}" + for ppd in ppds/*; do + substituteInPlace "$ppd" --replace-fail '/opt/epson-inkjet-printer-workforce-840-series/cups/lib' "$out/lib/cups" + gzip -c "$ppd" > "${ppddir}/''${ppd#*/}" + done + cp -r resource watermark ${libdir} "$out" + + runHook postInstall + ''; + + meta = { + description = "Proprietary CUPS drivers for Epson inkjet printers"; + longDescription = '' + This software is a filter program used with the Common UNIX Printing + System (CUPS) under Linux. It supplies high quality printing with + Seiko Epson Color Ink Jet Printers. + + This printer driver is supporting the following printers. + + Epson Stylus Office BX925 + Epson WorkForce 840 + + To use the driver adjust your configuration.nix file: + ```nix + { + services.printing = { + enable = true; + drivers = [ pkgs.epson-inkjet-printer-workforce-840-series ]; + }; + } + ``` + ''; + downloadPage = "http://download.ebz.epson.net/dsc/du/02/DriverDownloadInfo.do?LG2=EN&CN2=&DSCMI=16839&DSCCHK=3d7bc6bdfca08006abfb859fb1967183156a7252"; + license = with lib.licenses; [ + lgpl21 + epson + ]; + maintainers = with lib.maintainers; [ heichro ]; + platforms = [ "x86_64-linux" ]; + }; +})