fa5436e0a7
GitOrigin-RevId: e8057b67ebf307f01bdcc8fba94d94f75039d1f6
122 lines
3.7 KiB
Nix
122 lines
3.7 KiB
Nix
{ lib
|
|
, foomatic-db
|
|
, foomatic-db-nonfree
|
|
, buildEnv
|
|
, foomatic-db-engine
|
|
, stdenv
|
|
, cups-filters
|
|
, ghostscript
|
|
, netpbm
|
|
, perl
|
|
, psutils
|
|
, patchPpdFilesHook
|
|
, withNonfreeDb ? false # include foomatic-db-nonfree ppd files
|
|
}:
|
|
|
|
let
|
|
foomatic-db-packages = [ foomatic-db ] ++
|
|
lib.lists.optional withNonfreeDb foomatic-db-nonfree;
|
|
|
|
foomatic-db-combined = buildEnv {
|
|
name = "foomatic-db-combined";
|
|
paths = foomatic-db-packages;
|
|
pathsToLink = [ "/share/foomatic" ];
|
|
# `foomatic-db-combined` is a nativeBuildInput of `foomatic-db-ppds`.
|
|
# The setup hook defined here helps scripts in
|
|
# `foomatic-db-engine` to find the database.
|
|
postBuild = ''
|
|
mkdir -p "${placeholder "out"}"/{etc/cups,nix-support}
|
|
cat >> "${placeholder "out"}/nix-support/setup-hook" << eof
|
|
export FOOMATICDB="${placeholder "out"}/share/foomatic"
|
|
eof
|
|
'';
|
|
};
|
|
|
|
# the effective license is `free` if all database
|
|
# packages have free licenses, `unfree` otherwise
|
|
isFree = lib.trivial.pipe foomatic-db-packages [
|
|
(lib.lists.map (lib.attrsets.attrByPath [ "meta" "license" ] lib.licenses.unfree))
|
|
(lib.lists.all (lib.attrsets.attrByPath [ "free" ] true))
|
|
];
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
pname = "foomatic-db-ppds";
|
|
# the effective version is simply the
|
|
# highest version of all database packages
|
|
version = lib.trivial.pipe foomatic-db-packages [
|
|
(lib.lists.map (lib.attrsets.getAttr "version"))
|
|
(lib.lists.sort lib.strings.versionOlder)
|
|
lib.lists.reverseList
|
|
lib.lists.head
|
|
];
|
|
|
|
buildInputs = [
|
|
cups-filters
|
|
ghostscript
|
|
netpbm
|
|
perl
|
|
psutils
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
foomatic-db-combined
|
|
foomatic-db-engine
|
|
patchPpdFilesHook
|
|
];
|
|
|
|
dontUnpack = true;
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
mkdir -p "${placeholder "out"}/share/cups/model"
|
|
foomatic-compiledb -j "$NIX_BUILD_CORES" -d "${placeholder "out"}/share/cups/model/foomatic-db-ppds"
|
|
runHook postInstall
|
|
'';
|
|
|
|
# Comments indicate the respective
|
|
# package the command is contained in.
|
|
ppdFileCommands = [
|
|
"cat" "echo" # coreutils
|
|
"foomatic-rip" # cups-filters or foomatic-filters
|
|
"gs" # ghostscript
|
|
"pnmflip" "pnmgamma" "pnmnoraw" # netpbm
|
|
"perl" # perl
|
|
"psresize" # psutils
|
|
# These commands aren't packaged yet.
|
|
# ppd files using these likely won't work.
|
|
#"c2050" "c2070" "cjet" "lm1100"
|
|
#"pbm2l2030" "pbm2lwxl" "rastertophaser6100"
|
|
];
|
|
|
|
# compress ppd files
|
|
postFixup = ''
|
|
echo 'compressing ppd files'
|
|
find -H "${placeholder "out"}/share/cups/model/foomatic-db-ppds" -type f -iname '*.ppd' -print0 \
|
|
| xargs -0r -n 64 -P "$NIX_BUILD_CORES" gzip -9n
|
|
'';
|
|
|
|
meta = {
|
|
description = "OpenPrinting ppd files";
|
|
homepage = "https://openprinting.github.io/projects/02-foomatic/";
|
|
license = if isFree then lib.licenses.free else lib.licenses.unfree;
|
|
maintainers = [ lib.maintainers.yarny ];
|
|
# list printer manufacturers here so people
|
|
# searching for ppd files can find this package
|
|
longDescription = ''
|
|
All PPD files available in
|
|
OpenPrinting's Foomatic database.
|
|
This package contains about 8,800 PPD files,
|
|
for printers from
|
|
Alps, Anitech, Apollo, Apple, Avery, Brother, Canon,
|
|
Citizen, CItoh, Compaq, DEC, Dell, Dymo-CoStar, Epson,
|
|
Fujitsu, FujiXerox, Generic, Genicom, Gestetner,
|
|
Heidelberg, Hitachi, HP, IBM, Imagen, Imagistics,
|
|
InfoPrint, Infotec, Kodak, KONICAMINOLTA, Kyocera, Lanier,
|
|
Lexmark, Minolta, MinoltaQMS, Mitsubishi, NEC, NRG, Oce,
|
|
Oki, Olivetti, Panasonic, PCPI, Pentax, QMS, Raven, Ricoh,
|
|
Samsung, Savin, Seiko, Sharp, SiPix, Sony, Star, Tally,
|
|
Tektronix, TexasInstruments, Toshiba, Xante and Xerox.
|
|
'';
|
|
};
|
|
}
|