56 lines
1.4 KiB
Nix
56 lines
1.4 KiB
Nix
{...}: {
|
|
config.flake.modules.nixos.printing = {
|
|
lib,
|
|
config,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
webpFilter = pkgs.writeShellScript "webptopdf" ''
|
|
if [ $# -ge 6 ]; then
|
|
INPUT="$6"
|
|
TMPFILE=""
|
|
else
|
|
TMPFILE=$(mktemp /tmp/cups-webp-XXXXXX.webp)
|
|
cat > "$TMPFILE"
|
|
INPUT="$TMPFILE"
|
|
fi
|
|
TMPOUT=$(mktemp /tmp/cups-webp-XXXXXX.pdf)
|
|
${pkgs.imagemagick}/bin/magick "$INPUT" "$TMPOUT"
|
|
cat "$TMPOUT"
|
|
rm -f "$TMPOUT"
|
|
[ -n "$TMPFILE" ] && rm -f "$TMPFILE"
|
|
'';
|
|
|
|
webpCupsMime = pkgs.runCommand "webp-cups-mime" {} ''
|
|
mkdir -p $out/lib/cups/filter $out/share/cups/mime
|
|
cp ${webpFilter} $out/lib/cups/filter/webptopdf
|
|
chmod +x $out/lib/cups/filter/webptopdf
|
|
echo 'image/webp webp string(0,"RIFF") string(8,"WEBP")' > $out/share/cups/mime/webp.types
|
|
echo 'image/webp application/pdf 0 webptopdf' > $out/share/cups/mime/webp.convs
|
|
'';
|
|
in {
|
|
options.azos.printing.enable = lib.mkOption {
|
|
default = false;
|
|
example = true;
|
|
type = lib.types.bool;
|
|
};
|
|
|
|
config = lib.mkIf config.azos.printing.enable {
|
|
services.printing = {
|
|
enable = true;
|
|
drivers = [pkgs.hplip webpCupsMime];
|
|
};
|
|
|
|
environment.systemPackages = [pkgs.hplip];
|
|
|
|
services.avahi = {
|
|
enable = true;
|
|
nssmdns4 = true;
|
|
openFirewall = true;
|
|
};
|
|
|
|
users.users.aner.extraGroups = ["lp"];
|
|
};
|
|
};
|
|
}
|