nixpkgs/pkgs/misc/cups/drivers/hl2260d/default.nix
2023-09-07 11:46:26 +08:00

90 lines
3.2 KiB
Nix

{ lib, stdenv, fetchurl, cups, dpkg, gnused, makeWrapper, ghostscript, coreutils, perl, gnugrep, which
, debugLvl ? "0"
}:
let
version = "3.2.0-1";
lprdeb = fetchurl {
url = "https://download.brother.com/welcome/dlf102692/hl2260dlpr-${version}.i386.deb";
hash = "sha256-R+cM2SKc/MP6keo3PUrKXPC6a2dEQQdBunrpNtAHlH0=";
};
cupsdeb = fetchurl {
url = "https://download.brother.com/welcome/dlf102693/hl2260dcupswrapper-${version}.i386.deb";
hash = "sha256-k6+ulZVoFTpEY6WJ9TO9Rzp2c4dwPqL3NY5/XYJpvOc=";
};
in
stdenv.mkDerivation {
pname = "cups-brother-hl2260d";
inherit version;
nativeBuildInputs = [ makeWrapper dpkg ];
buildInputs = [ cups ghostscript perl ];
dontPatchELF = true;
dontBuild = true;
unpackPhase = ''
mkdir -p $out
dpkg-deb -x ${cupsdeb} $out
dpkg-deb -x ${lprdeb} $out
'';
patchPhase = ''
# Patch lpr
INFDIR=$out/opt/brother/Printers/HL2260D/inf
LPDDIR=$out/opt/brother/Printers/HL2260D/lpd
substituteInPlace $LPDDIR/filter_HL2260D \
--replace "BR_PRT_PATH =~" "BR_PRT_PATH = \"$out/opt/brother/Printers/HL2260D\"; #" \
--replace "PRINTER =~" "PRINTER = \"HL2260D\"; #"
patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
$INFDIR/braddprinter
patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
$LPDDIR/brprintconflsr3
patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
$LPDDIR/rawtobr3
# Patch cupswrapper
WRAPPER=$out/opt/brother/Printers/HL2260D/cupswrapper/brother_lpdwrapper_HL2260D
PAPER_CFG=$out/opt/brother/Printers/HL2260D/cupswrapper/paperconfigml1
substituteInPlace $WRAPPER \
--replace "basedir =~" "basedir = \"$out/opt/brother/Printers/HL2260D\"; #" \
--replace "PRINTER =~" "PRINTER = \"HL2260D\"; #" \
--replace "\$DEBUG=0;" "\$DEBUG=${debugLvl};"
substituteInPlace $WRAPPER \
--replace "\`cp " "\`cp -p " \
--replace "\$TEMPRC\`" "\$TEMPRC; chmod a+rw \$TEMPRC\`" \
--replace "\`mv " "\`cp -p "
# This config script make this assumption that the *.ppd are found in a global location `/etc/cups/ppd`.
substituteInPlace $PAPER_CFG \
--replace "/etc/cups/ppd" "$out/share/cups/model"
'';
installPhase = ''
mkdir -p $out/share/cups/model
ln -s $out/opt/brother/Printers/HL2260D/cupswrapper/brother-HL2260D-cups-en.ppd $out/share/cups/model
mkdir -p $out/lib/cups/filter/
makeWrapper \
$out/opt/brother/Printers/HL2260D/cupswrapper/brother_lpdwrapper_HL2260D \
$out/lib/cups/filter/brother_lpdwrapper_HL2260D \
--prefix PATH : ${lib.makeBinPath [coreutils gnugrep gnused]}
wrapProgram $out/opt/brother/Printers/HL2260D/lpd/filter_HL2260D \
--prefix PATH ":" ${ lib.makeBinPath [ ghostscript which ] }
'';
meta = with lib; {
homepage = "http://www.brother.com/";
description = "Brother HL-2260D printer driver";
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
license = licenses.unfree;
platforms = [ "x86_64-linux" "i686-linux" ];
downloadPage = "https://support.brother.com/g/b/downloadtop.aspx?c=cn_ot&lang=en&prod=hl2260d_cn";
maintainers = with maintainers; [ u2x1 ];
};
}