about summary refs log tree commit diff
path: root/pkgs/misc
diff options
context:
space:
mode:
authorYarny0 <41838844+Yarny0@users.noreply.github.com>2021-07-07 20:51:01 +0200
committerYarny0 <41838844+Yarny0@users.noreply.github.com>2022-11-06 19:28:15 +0100
commit90a8a78e7c703ec6d9a4e9d5251f09823498bc12 (patch)
tree517a11206fabdcacd450778f095200e3ba9b333f /pkgs/misc
parentcd4c8d63f5698d86960086c3d0e3c94c08efd285 (diff)
foomatic-db (cups ppd files): init at unstable/2022-10-03
`foomatic-db` contains the collected knowledge about printers,
drivers, and driver options from OpenPrinting in xml files.
It also provides thousands of ppd files.
The build process patches those files to reference executables
in the nix store and gzips them to reduce storage
(from about 670 MiB to 90 MiB installed).

In contrast to the sister package `foomatic-db-nonfree`
(packaged in a follow-up commit),
this package only includes files published under a free license.
Most files are published under the GPL,
some under the MIT license.
For details see
https://github.com/OpenPrinting/foomatic-db/blob/master/COPYING .
To encompass the different licenses, the package's
license is set to "free" as the common denominator.

ppd files can be found in `$out/share/cups/model/foomatic-db`.
The subdirectory `foomatic-db` is used to avoid conflicts
with other packages that might be combined with the package
`foomatic-db` in `config.services.printing.drivers`.

There is a daily snapshot of a source archive available at
https://www.openprinting.org/download/foomatic/ .
However, these files rotate daily and
cannot be used as a stable download source.
So we rely on OpenPrinting's Github repository
instead and pinpoint a fresh commit.
Diffstat (limited to 'pkgs/misc')
-rw-r--r--pkgs/misc/cups/drivers/foomatic-db/default.nix99
1 files changed, 99 insertions, 0 deletions
diff --git a/pkgs/misc/cups/drivers/foomatic-db/default.nix b/pkgs/misc/cups/drivers/foomatic-db/default.nix
new file mode 100644
index 0000000000000..26cbc29424758
--- /dev/null
+++ b/pkgs/misc/cups/drivers/foomatic-db/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cups
+, cups-filters
+, ghostscript
+, gnused
+, perl
+, autoconf
+, automake
+, patchPpdFilesHook
+}:
+
+stdenv.mkDerivation {
+  pname = "foomatic-db";
+  version = "unstable-2022-10-03";
+
+  src = fetchFromGitHub {
+    # there is also a daily snapshot at the `downloadPage`,
+    # but it gets deleted quickly and would provoke 404 errors
+    owner = "OpenPrinting";
+    repo = "foomatic-db";
+    rev = "2a3c4d1bf7eadc42f936ce8989c1dd2973ea9669";
+    hash = "sha256-in0/j1nAQvM0NowBIBx3jj5WVMPIfZAeAk1SkuA3tjA=";
+  };
+
+  buildInputs = [ cups cups-filters ghostscript gnused perl ];
+
+  nativeBuildInputs = [ autoconf automake patchPpdFilesHook perl ];
+
+  # sed-substitute indirection is more robust
+  # against characters in paths that might need escaping
+  postPatch = ''
+    sed -Ei -e 's|^(S?BINSEARCHPATH=).+$|\1"@PATH@"|g'  \
+      -e 's|^(DATASEARCHPATH=).+$|\1"@DATA@"|g' configure.ac
+    substituteInPlace configure.ac  \
+      --subst-var PATH  \
+      --subst-var-by DATA "${placeholder "out"}/share"
+  '';
+
+  preConfigure = ''
+    mkdir -p "${placeholder "out"}/share/foomatic/db/source"
+    ./make_configure
+  '';
+
+  # don't let the intaller gzip ppd files as we would
+  # have to unzip them later in order to patch them
+  configureFlags = [ "--disable-gzip-ppds" ];
+
+  # make ppd files available to cups,
+  # use a package-specific subdirectory to avoid
+  # conflicts with other ppd-containing packages
+  postInstall = ''
+    if ! [[ -d "${placeholder "out"}/share/foomatic/db/source/PPD" ]]; then
+        echo "failed to create share/foomatic/db/source/PPD"
+        exit 1
+    fi
+    mkdir -p "${placeholder "out"}/share/cups/model"
+    ln -s "${placeholder "out"}/share/foomatic/db/source/PPD"  \
+      "${placeholder "out"}/share/cups/model/foomatic-db"
+  '';
+
+  # Comments indicate the respective
+  # package the command is contained in.
+  ppdFileCommands = [
+    "cat" "date" "printf"  # coreutils
+    "rastertohp"  # cups
+    "foomatic-rip"  # cups-filters or foomatic-filters
+    "gs"  # ghostscript
+    "sed"  # gnused
+    "perl"  # perl
+  ];
+
+  # compress ppd files
+  postFixup = ''
+    echo 'compressing ppd files'
+    find -H "${placeholder "out"}/share/cups/model/foomatic-db" -type f -iname '*.ppd' -print0  \
+      | xargs -0r -n 64 -P "$NIX_BUILD_CORES" gzip -9n
+  '';
+
+  meta = {
+    description = "OpenPrinting printer support database (free content)";
+    downloadPage = "https://www.openprinting.org/download/foomatic/";
+    homepage = "https://openprinting.github.io/projects/02-foomatic/";
+    license = lib.licenses.free;  # mostly GPL and MIT, see README in source dir
+    maintainers = [ lib.maintainers.yarny ];
+    # list printer manufacturers here so people
+    # searching for ppd files can find this package
+    longDescription = ''
+      The collected knowledge about printers,
+      drivers, and driver options in XML files.
+      Besides the XML files, this package contains
+      about 6,600 PPD files, for printers from
+      Brother, Canon, Epson, Gestetner, HP, InfoPrint,
+      Infotec, KONICA_MINOLTA, Kyocera, Lanier, Lexmark, NRG,
+      Oce, Oki, Ricoh, Samsung, Savin, Sharp, Toshiba and Utax.
+    '';
+  };
+}