{ pkgsi686Linux, stdenv, fetchurl, dpkg, makeWrapper, coreutils, ghostscript, gnugrep, gnused, which, lib, cups, a2ps, gawk, file, proot, bash, }: let model = "dcpj4110dw"; version = "3.0.1-1"; src = fetchurl { url = "https://download.brother.com/welcome/dlf005595/${model}lpr-${version}.i386.deb"; sha256 = "sha256-ryKDsSkabAD2X3WLmeqjdB3+4DXdJ0qUz3O64DV+ixw="; }; reldir = "opt/brother/Printers/${model}/"; in rec { driver = pkgsi686Linux.stdenv.mkDerivation rec { inherit src version; name = "${model}drv-${version}"; nativeBuildInputs = [ dpkg makeWrapper ]; unpackPhase = "dpkg-deb -x $src $out"; installPhase = '' # need to use i686 glibc here, these are 32bit proprietary binaries patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ $out/${reldir}/lpd/br${model}filter mkdir -p $out/lib/cups/filter/ ln -s $out/${reldir}/lpd/filter${model} $out/lib/cups/filter/brother_lpdwrapper_${model} # use proot to bind /opt for the filter mv $out/${reldir}/lpd/filter${model} $out/${reldir}/lpd/.wrapped_filter${model} cat <<-EOF >$out/${reldir}/lpd/.wrapper_inner_filter${model} export PATH=\$PATH:${ lib.makeBinPath [ gawk file a2ps coreutils ghostscript gnugrep gnused which ] } exec $out/${reldir}/lpd/.wrapped_filter${model} EOF chmod +x $out/${reldir}/lpd/.wrapper_inner_filter${model} cat <<-EOF >$out/${reldir}/lpd/filter${model} #!${bash}/bin/bash exec ${proot}/bin/proot \ -b /nix/store:/nix/store \ -b $out/opt:/opt \ -b ${cups}/share:/usr/share/cups \ $out/${reldir}/lpd/.wrapper_inner_filter${model} EOF chmod +x $out/${reldir}/lpd/filter${model} ''; meta = { description = "Brother ${lib.strings.toUpper model} driver"; homepage = "http://www.brother.com/"; sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; # license = lib.licenses.unfree; platforms = [ "x86_64-linux" "i686-linux" ]; maintainers = [ lib.maintainers.steveej ]; }; }; cupswrapper = stdenv.mkDerivation rec { inherit version; src = fetchurl { url = "https://download.brother.com/welcome/dlf005597/${model}cupswrapper-${version}.i386.deb"; sha256 = "sha256-nwpuuXqBrEh5tye14gFLrezktTz6kq7HtnGqdBbgGkk="; }; name = "${model}cupswrapper-${version}"; nativeBuildInputs = [ dpkg makeWrapper ]; buildInputs = [ cups ghostscript a2ps gawk ]; unpackPhase = "dpkg-deb -x $src $out"; installPhase = '' wrapProgram $out/${reldir}/cupswrapper/cupswrapper${model} \ --prefix PATH : ${ lib.makeBinPath [ coreutils ghostscript gnugrep gnused ] } patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ $out/${reldir}/cupswrapper/brcupsconfpt1 mkdir -p $out/share/cups/model ln -s $out/${reldir}/cupswrapper/brother_${model}_printer_en.ppd $out/share/cups/model/ ''; meta = { description = "Brother ${lib.strings.toUpper model} CUPS wrapper driver"; homepage = "http://www.brother.com/"; sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; license = lib.licenses.gpl2; platforms = [ "x86_64-linux" "i686-linux" ]; maintainers = [ lib.maintainers.steveej ]; }; }; }