From 8ce610affd47258b75b723d53b5212e76853e84e Mon Sep 17 00:00:00 2001 From: Johannes Rothe Date: Sun, 11 Aug 2024 22:48:30 +0200 Subject: [PATCH] Add printer config --- configuration.nix | 7 +- files/kyocera_fs-1300d.ppd | 804 +++++++++++++++++++++++++++++ nixos/desktop/printing/default.nix | 21 + 3 files changed, 829 insertions(+), 3 deletions(-) create mode 100644 files/kyocera_fs-1300d.ppd create mode 100644 nixos/desktop/printing/default.nix diff --git a/configuration.nix b/configuration.nix index a88efd0..427f2b2 100644 --- a/configuration.nix +++ b/configuration.nix @@ -5,7 +5,9 @@ { config, pkgs, lib, ... }: { - imports = []; + imports = [ + nixos/desktop/printing + ]; # Bootloader. boot.loader.grub.enable = true; @@ -197,8 +199,7 @@ services.tailscale.enable = true; services.gvfs.enable = true; services.xserver.displayManager.gdm.enable = true; - # Enable CUPS to print documents. - services.printing.enable = true; + services.blueman.enable = true; services.syncthing = { enable = true; diff --git a/files/kyocera_fs-1300d.ppd b/files/kyocera_fs-1300d.ppd new file mode 100644 index 0000000..ec7f26d --- /dev/null +++ b/files/kyocera_fs-1300d.ppd @@ -0,0 +1,804 @@ +*PPD-Adobe: "4.3" +*%============================================================================= +*% +*% PPD file for Kyocera FS-1300D (German) +*% Linux Version +*% +*% Copyright (C) 2000 KYOCERA CORPORATION. +*% Copyright (C) 2007 Revised Edition KYOCERA MITA CORPORATION. +*% +*% Permission is granted for redistribution of this file as long as this +*% copyright notice is intact and the contents of the file are not altered +*% in any way from their original form. +*% +*% Permission is hereby granted, free of charge, to any person obtaining +*% a copy of this software and associated documentation files (the +*% "Software"), to deal in the Software without restriction, including +*% without limitation the rights to use, copy, modify, merge, publish, +*% distribute, sublicense, and/or sell copies of the Software, and to +*% permit persons to whom the Software is furnished to do so, subject to +*% the following conditions: +*% +*% The above copyright notice and this permission notice shall be +*% included in all copies or substantial portions of the Software. +*% +*% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +*% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +*% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +*% NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +*% LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +*% OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +*% WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*% +*% [this is the MIT open source license -- see www.opensource.org] +*% +*%============================================================================= +*%============================================================================= + +*FileVersion: "8.4" +*FormatVersion: "4.3" +*LanguageEncoding: ISOLatin1 +*LanguageVersion: German +*Product: "(FS-1300D)" +*PSVersion: "(3011.103) 1" +*Manufacturer: "Kyocera" +*ModelName: "Kyocera FS-1300D KPDL" +*ShortNickName: "Kyocera FS-1300D (KPDL)" +*NickName: "Kyocera FS-1300D (KPDL)" +*PCFileName: "KC1300EG.PPD" + +*% Basic Device Capabilities +*LanguageLevel: "3" +*ColorDevice: False +*DefaultColorSpace: Gray +*TTRasterizer: Type42 +*?TTRasterizer: " + save + 42 /FontType resourcestatus + { pop pop (Type42) }{ (None) } ifelse + = flush restore" +*End + +*Throughput: "28" + +*% System Management +*SuggestedJobTimeout: "0" +*SuggestedManualFeedTimeout: "0" +*SuggestedWaitTimeout: "120" +*PrintPSErrors: True + +*Password: "0" + +*ExitServer: " + count 0 eq {true} + {dup statusdict /checkpassword get exec not} ifelse + {(WARNING : Cannot perform the exitserver command.) = + (Password supplied is not valid.) = + (Please contact the author of this software.) = flush quit} if + serverdict /exitserver get exec" +*End + +*Reset: " + count 0 eq { true } + {dup statusdict /checkpassword get exec not} ifelse + {(WARNING : Cannot perform the exitserver command.) = + (Password supplied is not valid.) = + (Please contact the author of this software.) = flush quit} if + serverdict /exitserver get exec + systemdict /quit get exec + (WARNING : Printer Reset Failed.) = flush" +*End + +*% Protocols +*Protocols: PJL TBCP + +*1284Modes Parallel: Compat Nibble ECP +*1284DeviceID: "MFG:Kyocera;MODEL:Kyocera FS-1300D;COMMAND SET: POSTSCRIPT,PJL,PCL" + +*% JCL Information +*JCLBegin: "<1B>%-12345X@PJL JOB<0A>" +*JCLToPSInterpreter: "@PJL ENTER LANGUAGE=POSTSCRIPT<0A>" +*JCLEnd: "<1B>%-12345X@PJL EOJ<0A><1B>%-12345X" + +*% Installable Options +*OpenGroup: InstallableOptions/Installierte Optionen + +*% Paper Feeders +*OpenUI *Option8/Papierzufhrungen: PickOne +*DefaultOption8: None +*Option8 None/Nicht installiert: "" +*Option8 One/Eine: "" +*Option8 Two/Zwei: "" +*?Option8: " + save + (None) currentpagedevice dup /InputAttributes known { + /InputAttributes get + dup 1 known {dup 1 get null ne {exch pop (One) exch} if} if + dup 3 known {dup 3 get null ne {exch pop (Two) exch} if} if + dup 4 known {dup 4 get null ne {exch pop (Two) exch} if} if + } if pop + = flush restore" +*End +*CloseUI: *Option8 + +*% Disk Drive +*OpenUI *Option18/Optionaler Datentrger: PickOne +*DefaultOption18: None +*Option18 None/Nicht installiert: "" +*Option18 RAMDisk/RAM Disk: "" +*?Option18: " + save + false + (%disk?%) + {currentdevparams dup /Writeable known + {dup /Writeable get + {exch pop /LogicalSize get dup 0 gt exch 102400 lt eq true}{pop pop false} ifelse + }{pop pop} ifelse + } 100 string /IODevice resourceforall + {{(RAMDisk)}{(HardDisk)} ifelse}{(None)} ifelse + = flush restore" +*End +*CloseUI: *Option18 + +*% Installed Memory +*OpenUI *InstalledMemory/Speicher: PickOne +*DefaultInstalledMemory: 32MB +*InstalledMemory 32MB/32MB Standard: "" +*InstalledMemory 96MB/64MB Erweiterung: "" +*InstalledMemory 160MB/128MB Erweiterung: "" +*InstalledMemory 288MB/256MB Erweiterung: "" +*InstalledMemory 544MB/512MB Erweiterung: "" +*?InstalledMemory: " + save + currentsystemparams dup + /RamSize known { + /RamSize get + 524288 div ceiling cvi 2 div cvi + /vmsize 20 string def + vmsize cvs print + (MB) print (\n) print flush + }{ + pop (Unknown) print flush + } ifelse + restore" +*End +*CloseUI: *InstalledMemory + +*CloseGroup: InstallableOptions + +*% Virtual Memory + +*FreeVM: "25728000" + +*VMOption 32MB: "25728000" +*VMOption 96MB: "32000000" +*VMOption 160MB: "32000000" +*VMOption 288MB: "32000000" +*VMOption 544MB: "32000000" + + +*% Constraints +*UIConstraints: *Option8 None *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *Option8 None +*UIConstraints: *Option8 None *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *Option8 None +*UIConstraints: *Option8 One *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *Option8 One +*UIConstraints: *Option18 None *KCCollate Temp +*UIConstraints: *PageSize B6 *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageSize B6 +*UIConstraints: *PageRegion B6 *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageRegion B6 +*UIConstraints: *PageSize EnvPersonal *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageSize EnvPersonal +*UIConstraints: *PageRegion EnvPersonal *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageRegion EnvPersonal +*UIConstraints: *PageSize Env9 *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageSize Env9 +*UIConstraints: *PageRegion Env9 *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageRegion Env9 +*UIConstraints: *PageSize Env10 *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageSize Env10 +*UIConstraints: *PageRegion Env10 *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageRegion Env10 +*UIConstraints: *PageSize EnvMonarch *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageSize EnvMonarch +*UIConstraints: *PageRegion EnvMonarch *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageRegion EnvMonarch +*UIConstraints: *PageSize EnvDL *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageSize EnvDL +*UIConstraints: *PageRegion EnvDL *InputSlot Internal +*UIConstraints: *InputSlot Internal *PageRegion EnvDL +*UIConstraints: *PageSize A6 *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageSize A6 +*UIConstraints: *PageRegion A6 *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageRegion A6 +*UIConstraints: *PageSize B6 *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageSize B6 +*UIConstraints: *PageRegion B6 *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageRegion B6 +*UIConstraints: *PageSize EnvPersonal *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageSize EnvPersonal +*UIConstraints: *PageRegion EnvPersonal *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageRegion EnvPersonal +*UIConstraints: *PageSize Env9 *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageSize Env9 +*UIConstraints: *PageRegion Env9 *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageRegion Env9 +*UIConstraints: *PageSize Env10 *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageSize Env10 +*UIConstraints: *PageRegion Env10 *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageRegion Env10 +*UIConstraints: *PageSize EnvMonarch *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageSize EnvMonarch +*UIConstraints: *PageRegion EnvMonarch *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageRegion EnvMonarch +*UIConstraints: *PageSize EnvDL *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageSize EnvDL +*UIConstraints: *PageRegion EnvDL *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageRegion EnvDL +*UIConstraints: *PageSize Statement *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageSize Statement +*UIConstraints: *PageRegion Statement *InputSlot PF100A +*UIConstraints: *InputSlot PF100A *PageRegion Statement +*UIConstraints: *PageSize A6 *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageSize A6 +*UIConstraints: *PageRegion A6 *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageRegion A6 +*UIConstraints: *PageSize B6 *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageSize B6 +*UIConstraints: *PageRegion B6 *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageRegion B6 +*UIConstraints: *PageSize EnvPersonal *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageSize EnvPersonal +*UIConstraints: *PageRegion EnvPersonal *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageRegion EnvPersonal +*UIConstraints: *PageSize Env9 *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageSize Env9 +*UIConstraints: *PageRegion Env9 *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageRegion Env9 +*UIConstraints: *PageSize Env10 *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageSize Env10 +*UIConstraints: *PageRegion Env10 *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageRegion Env10 +*UIConstraints: *PageSize EnvMonarch *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageSize EnvMonarch +*UIConstraints: *PageRegion EnvMonarch *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageRegion EnvMonarch +*UIConstraints: *PageSize EnvDL *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageSize EnvDL +*UIConstraints: *PageRegion EnvDL *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageRegion EnvDL +*UIConstraints: *PageSize Statement *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageSize Statement +*UIConstraints: *PageRegion Statement *InputSlot PF100B +*UIConstraints: *InputSlot PF100B *PageRegion Statement +*UIConstraints: *Duplex *PageSize A6 +*UIConstraints: *PageSize A6 *Duplex DuplexTumble +*UIConstraints: *PageSize A6 *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageRegion A6 +*UIConstraints: *PageRegion A6 *Duplex DuplexTumble +*UIConstraints: *PageRegion A6 *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageSize B6 +*UIConstraints: *PageSize B6 *Duplex DuplexTumble +*UIConstraints: *PageSize B6 *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageRegion B6 +*UIConstraints: *PageRegion B6 *Duplex DuplexTumble +*UIConstraints: *PageRegion B6 *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageSize EnvPersonal +*UIConstraints: *PageSize EnvPersonal *Duplex DuplexTumble +*UIConstraints: *PageSize EnvPersonal *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageRegion EnvPersonal +*UIConstraints: *PageRegion EnvPersonal *Duplex DuplexTumble +*UIConstraints: *PageRegion EnvPersonal *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageSize Env9 +*UIConstraints: *PageSize Env9 *Duplex DuplexTumble +*UIConstraints: *PageSize Env9 *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageRegion Env9 +*UIConstraints: *PageRegion Env9 *Duplex DuplexTumble +*UIConstraints: *PageRegion Env9 *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageSize Env10 +*UIConstraints: *PageSize Env10 *Duplex DuplexTumble +*UIConstraints: *PageSize Env10 *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageRegion Env10 +*UIConstraints: *PageRegion Env10 *Duplex DuplexTumble +*UIConstraints: *PageRegion Env10 *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageSize EnvMonarch +*UIConstraints: *PageSize EnvMonarch *Duplex DuplexTumble +*UIConstraints: *PageSize EnvMonarch *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageRegion EnvMonarch +*UIConstraints: *PageRegion EnvMonarch *Duplex DuplexTumble +*UIConstraints: *PageRegion EnvMonarch *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageSize EnvDL +*UIConstraints: *PageSize EnvDL *Duplex DuplexTumble +*UIConstraints: *PageSize EnvDL *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageRegion EnvDL +*UIConstraints: *PageRegion EnvDL *Duplex DuplexTumble +*UIConstraints: *PageRegion EnvDL *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageSize Statement +*UIConstraints: *PageSize Statement *Duplex DuplexTumble +*UIConstraints: *PageSize Statement *Duplex DuplexNoTumble +*UIConstraints: *Duplex *PageRegion Statement +*UIConstraints: *PageRegion Statement *Duplex DuplexTumble +*UIConstraints: *PageRegion Statement *Duplex DuplexNoTumble +*UIConstraints: *Option18 None *KCSuperWatermark +*UIConstraints: *KCSuperWatermark *Option18 None + +*% Resolution +*OpenUI *Resolution/Auflsung: PickOne +*OrderDependency: 10 AnySetup *Resolution +*DefaultResolution: 600dpi +*Resolution 300dpi/300 dpi: "<< /HWResolution [300 300] /PreRenderingEnhance false >> setpagedevice" +*Resolution 600dpi/600 dpi: "<< /HWResolution [600 600] /PreRenderingEnhance false >> setpagedevice" +*Resolution 1200dpi/Fine 1200: "<< /HWResolution [1200 1200] /PreRenderingEnhance false >> setpagedevice" +*?Resolution: "save currentpagedevice /HWResolution get 0 get ( ) cvs print (dpi) = flush restore" +*CloseUI: *Resolution + +*% KCEcoprint +*OpenUI *KCEcoprint/EcoPrint: PickOne +*OrderDependency: 10 AnySetup *KCEcoprint +*DefaultKCEcoprint: Off +*KCEcoprint Off/Aus: "<< /EconoMode false >> setpagedevice" +*KCEcoprint On/Ein: "<< /EconoMode true >> setpagedevice" +*CloseUI: *KCEcoprint + +*% Image Refinement +*OpenUI *Smoothing/KIR: PickOne +*OrderDependency: 50 AnySetup *Smoothing +*DefaultSmoothing: Medium +*Smoothing None/Aus: "0 statusdict /setdoret get exec" +*Smoothing Medium/Ein: "2 statusdict /setdoret get exec" +*?Smoothing: " + save + [(None)(Medium)(Medium)(Medium)] + statusdict /doret get exec {get} stopped + {pop pop (Unknown)} if + = flush restore" +*End +*CloseUI: *Smoothing + +*% Halftone Information +*DefaultHalftoneType: 1 +*ScreenFreq: "75.0" +*ScreenAngle: "45.0" +*ResScreenFreq 1200dpi: "75.0" +*ResScreenAngle 1200dpi: "45.0" +*ResScreenFreq 600dpi: "37.5" +*ResScreenAngle 600dpi: "45.0" +*ResScreenFreq 300dpi: "18.75" +*ResScreenAngle 300dpi: "45.0" + +*DefaultScreenProc: Ellipse +*ScreenProc Dot: " + {abs exch abs 2 copy add 1 gt + {1 sub dup mul exch 1 sub dup mul add 1 sub} + {dup mul exch dup mul add 1 exch sub} ifelse}" +*End +*ScreenProc Line: "{pop}" +*ScreenProc Ellipse: "{dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub}" +*DefaultTransfer: Null +*Transfer Null: "{}" +*Transfer Null.Inverse: "{1 exch sub}" + +*% Page Policy Definitions +*OpenUI *PagePolicy/Page Policy: PickOne +*OrderDependency: 15 AnySetup *PagePolicy +*DefaultPagePolicy: On +*PagePolicy On/AutoSizeSelect: "<< /DeferredMediaSelection true >> setpagedevice" +*CloseUI: *PagePolicy + +*% Paper Handling +*% Page Size Definitions +*OpenUI *PageSize: PickOne +*OrderDependency: 40 AnySetup *PageSize +*DefaultPageSize: A4 +*PageSize A4/A4: "<< /Policies << /PageSize 7 >> /PageSize [595 842] /ImagingBBox null >> setpagedevice" +*PageSize A5/A5: "<< /Policies << /PageSize 7 >> /PageSize [421 595] /ImagingBBox null >> setpagedevice" +*PageSize A6/A6: "<< /Policies << /PageSize 7 >> /PageSize [297 421] /ImagingBBox null >> setpagedevice" +*PageSize B5/B5 (JIS): "<< /Policies << /PageSize 7 >> /PageSize [516 729] /ImagingBBox null >> setpagedevice" +*PageSize ISOB5/B5 (ISO): "<< /Policies << /PageSize 7 >> /PageSize [499 708] /ImagingBBox null >> setpagedevice" +*PageSize B6/B6: "<< /Policies << /PageSize 7 >> /PageSize [364 516] /ImagingBBox null >> setpagedevice" +*PageSize OficioII/Oficio II: "<< /Policies << /PageSize 7 >> /PageSize [612 936] /ImagingBBox null >> setpagedevice" +*PageSize Folio/Folio (210 x 330mm): "<< /Policies << /PageSize 7 >> /PageSize [595 935] /ImagingBBox null >> setpagedevice" +*PageSize Statement/Statement: "<< /Policies << /PageSize 7 >> /PageSize [396 612] /ImagingBBox null >> setpagedevice" +*PageSize P16K/16K: "<< /Policies << /PageSize 7 >> /PageSize [558 774] /ImagingBBox null >> setpagedevice" +*PageSize Letter/US-Letter: "<< /Policies << /PageSize 7 >> /PageSize [612 792] /ImagingBBox null >> setpagedevice" +*PageSize Legal/US-Legal: "<< /Policies << /PageSize 7 >> /PageSize [612 1008] /ImagingBBox null >> setpagedevice" +*PageSize Executive/US-Executive: "<< /Policies << /PageSize 7 >> /PageSize [522 756] /ImagingBBox null >> setpagedevice" +*PageSize EnvPersonal/Umschlag #6: "<< /Policies << /PageSize 7 >> /PageSize [261 468] /ImagingBBox null >> setpagedevice" +*PageSize Env9/Umschlag #9: "<< /Policies << /PageSize 7 >> /PageSize [279 639] /ImagingBBox null >> setpagedevice" +*PageSize Env10/Umschlag #10: "<< /Policies << /PageSize 7 >> /PageSize [297 684] /ImagingBBox null >> setpagedevice" +*PageSize EnvMonarch/Umschlag US-Monarch: "<< /Policies << /PageSize 7 >> /PageSize [279 540] /ImagingBBox null >> setpagedevice" +*PageSize EnvDL/Umschlag DL: "<< /Policies << /PageSize 7 >> /PageSize [312 624] /ImagingBBox null >> setpagedevice" +*PageSize EnvC5/Umschlag C5: "<< /Policies << /PageSize 7 >> /PageSize [459 649] /ImagingBBox null >> setpagedevice" +*?PageSize: " + save + currentpagedevice /PageSize get aload pop + 2 copy gt {exch} if + (Unknown) + 19 dict + dup [595 842] (A4) put + dup [421 595] (A5) put + dup [297 421] (A6) put + dup [516 729] (B5) put + dup [499 708] (ISOB5) put + dup [364 516] (B6) put + dup [612 936] (OficioII) put + dup [595 935] (Folio) put + dup [396 612] (Statement) put + dup [558 774] (P16K) put + dup [612 792] (Letter) put + dup [612 1008] (Legal) put + dup [522 756] (Executive) put + dup [261 468] (EnvPersonal) put + dup [279 639] (Env9) put + dup [297 684] (Env10) put + dup [279 540] (EnvMonarch) put + dup [312 624] (EnvDL) put + dup [459 649] (EnvC5) put + {exch aload pop 4 index sub abs 5 le exch + 5 index sub abs 5 le and + {exch pop exit}{pop} ifelse + } bind forall + = flush pop pop restore " +*End +*CloseUI: *PageSize + +*% Page Region Definitions for Frame Buffer +*OpenUI *PageRegion: PickOne +*OrderDependency: 40 AnySetup *PageRegion +*DefaultPageRegion: A4 +*PageRegion A4/A4: "<< /Policies << /PageSize 7 >> /PageSize [595 842] /ImagingBBox null >> setpagedevice" +*PageRegion A5/A5: "<< /Policies << /PageSize 7 >> /PageSize [421 595] /ImagingBBox null >> setpagedevice" +*PageRegion A6/A6: "<< /Policies << /PageSize 7 >> /PageSize [297 421] /ImagingBBox null >> setpagedevice" +*PageRegion B5/B5 (JIS): "<< /Policies << /PageSize 7 >> /PageSize [516 729] /ImagingBBox null >> setpagedevice" +*PageRegion ISOB5/B5 (ISO): "<< /Policies << /PageSize 7 >> /PageSize [499 708] /ImagingBBox null >> setpagedevice" +*PageRegion B6/B6: "<< /Policies << /PageSize 7 >> /PageSize [364 516] /ImagingBBox null >> setpagedevice" +*PageRegion Letter/US-Letter: "<< /Policies << /PageSize 7 >> /PageSize [612 792] /ImagingBBox null >> setpagedevice" +*PageRegion Legal/US-Legal: "<< /Policies << /PageSize 7 >> /PageSize [612 1008] /ImagingBBox null >> setpagedevice" +*PageRegion Executive/US-Executive: "<< /Policies << /PageSize 7 >> /PageSize [522 756] /ImagingBBox null >> setpagedevice" +*PageRegion EnvPersonal/Umschlag #6: "<< /Policies << /PageSize 7 >> /PageSize [261 468] /ImagingBBox null >> setpagedevice" +*PageRegion Env9/Umschlag #9: "<< /Policies << /PageSize 7 >> /PageSize [279 639] /ImagingBBox null >> setpagedevice" +*PageRegion Env10/Umschlag #10: "<< /Policies << /PageSize 7 >> /PageSize [297 684] /ImagingBBox null >> setpagedevice" +*PageRegion EnvMonarch/Umschlag US-Monarch: "<< /Policies << /PageSize 7 >> /PageSize [279 540] /ImagingBBox null >> setpagedevice" +*PageRegion EnvDL/Umschlag DL: "<< /Policies << /PageSize 7 >> /PageSize [312 624] /ImagingBBox null >> setpagedevice" +*PageRegion EnvC5/Umschlag C5: "<< /Policies << /PageSize 7 >> /PageSize [459 649] /ImagingBBox null >> setpagedevice" +*PageRegion OficioII/Oficio II: "<< /Policies << /PageSize 7 >> /PageSize [612 936] /ImagingBBox null >> setpagedevice" +*PageRegion Folio/Folio (210 x 330mm): "<< /Policies << /PageSize 7 >> /PageSize [595 935] /ImagingBBox null >> setpagedevice" +*PageRegion Statement/Statement: "<< /Policies << /PageSize 7 >> /PageSize [396 612] /ImagingBBox null >> setpagedevice" +*PageRegion P16K/16K: "<< /Policies << /PageSize 7 >> /PageSize [558 774] /ImagingBBox null >> setpagedevice" +*CloseUI: *PageRegion + +*% Imageable Area Definitions +*DefaultImageableArea: A4 +*ImageableArea A4/A4: "12 10 583 832" +*ImageableArea A5/A5: "12 10 409 585" +*ImageableArea A6/A6: "12 10 285 411" +*ImageableArea B5/B5 (JIS): "21 10 495 719" +*ImageableArea ISOB5/B5 (ISO): "12 12 487 696" +*ImageableArea B6/B6: "12 10 352 506" +*ImageableArea OficioII/Oficio II: "12 12 600 924" +*ImageableArea Folio/Folio (210 x 330mm): "12 12 583 923" +*ImageableArea Statement/Statement: "12 12 384 600" +*ImageableArea P16K/16K: "12 12 547 763" +*ImageableArea Letter/US-Letter: "12 08 600 784" +*ImageableArea Legal/US-Legal: "12 08 600 1000" +*ImageableArea Executive/US-Executive: "12 08 510 748" +*ImageableArea EnvPersonal/Umschlag #6: "12 08 249 460" +*ImageableArea Env9/Umschlag #9: "12 08 267 631" +*ImageableArea Env10/Umschlag #10: "12 08 285 676" +*ImageableArea EnvMonarch/Umschlag US-Monarch: "12 08 267 532" +*ImageableArea EnvDL/Umschlag DL: "12 10 300 614" +*ImageableArea EnvC5/Umschlag C5: "12 10 447 639" +*?ImageableArea: " + save + /cvp {cvi ( ) cvs + print ( ) print} bind def + newpath clippath pathbbox + 4 -2 roll exch 2 {ceiling cvp} repeat + exch 2 {floor cvp} repeat ( ) + = flush restore" +*End + +*% Physical Dimensions of Media +*DefaultPaperDimension: A4 +*PaperDimension A4/A4: "595 842" +*PaperDimension A5/A5: "421 595" +*PaperDimension A6/A6: "297 421" +*PaperDimension B5/B5 (JIS): "516 729" +*PaperDimension ISOB5/B5 (ISO): "499 708" +*PaperDimension B6/B6: "364 516" +*PaperDimension OficioII/Oficio II: "612 936" +*PaperDimension Folio/Folio (210 x 330mm): "595 935" +*PaperDimension Statement/Statement: "396 612" +*PaperDimension P16K/16K: "558 774" +*PaperDimension Letter/US-Letter: "612 792" +*PaperDimension Legal/US-Legal: "612 1008" +*PaperDimension Executive/US-Executive: "522 756" +*PaperDimension EnvPersonal/Umschlag #6: "261 468" +*PaperDimension Env9/Umschlag #9: "279 639" +*PaperDimension Env10/Umschlag #10: "297 684" +*PaperDimension EnvMonarch/Umschlag US-Monarch: "279 540" +*PaperDimension EnvDL/Umschlag DL: "312 624" +*PaperDimension EnvC5/Umschlag C5: "459 649" + +*% Custom Page Size Definitions +*% Smallest = A6, Largest = LEGAL + +*VariablePaperSize: True +*LeadingEdge Short: "" +*DefaultLeadingEdge: Short +*HWMargins: 12 12 12 12 +*MaxMediaWidth: "612" +*MaxMediaHeight: "1008" +*NonUIOrderDependency: 40 AnySetup *CustomPageSize +*CustomPageSize True: " + pop pop pop + << /PageSize [ 5 -2 roll ] /ImagingBBox null + /DeferredMediaSelection true + >> setpagedevice" +*End +*ParamCustomPageSize Width: 1 points 278 612 +*ParamCustomPageSize Height: 2 points 420 1008 +*ParamCustomPageSize WidthOffset: 3 points 0 0 +*ParamCustomPageSize HeightOffset: 4 points 0 0 +*ParamCustomPageSize Orientation: 5 int 1 1 + +*% Input Slot Definitions +*OpenUI *InputSlot: PickOne +*OrderDependency: 30 AnySetup *InputSlot +*DefaultInputSlot: Internal +*InputSlot Internal/Kassette 1: "<< /ManualFeed false /DeferredMediaSelection false >> setpagedevice statusdict begin 0 setpapertray end" +*InputSlot PF100A/Kassette 2: "<< /ManualFeed false /DeferredMediaSelection false >> setpagedevice statusdict begin 1 setpapertray end" +*InputSlot PF100B/Kassette 3: "<< /ManualFeed false /DeferredMediaSelection false >> setpagedevice statusdict begin 4 setpapertray end" +*InputSlot MF1/Mehrzweckzufuhr: "<< /ManualFeed false /DeferredMediaSelection false >> setpagedevice statusdict begin 3 setpapertray end" +*?InputSlot: "" +*CloseUI: *InputSlot + +*% MediaType Definitions +*OpenUI *MediaType: PickOne +*OrderDependency: 95 AnySetup *MediaType +*DefaultMediaType: PrnDef +*MediaType PrnDef/Automatische Medienauswahl: "" +*MediaType Plain/Blankopapier: "<> setpagedevice" +*MediaType Transparency/Folie: "<> setpagedevice" +*MediaType Labels/Etiketten: "<> setpagedevice" +*MediaType Letterhead/Briefkopf: "<> setpagedevice" +*MediaType Bond/Feinpapier: "<> setpagedevice" +*MediaType Color/Mehrfarbig: "<> setpagedevice" +*MediaType Preprinted/Vorgedruckt: "<> setpagedevice" +*MediaType Prepunched/Vorgelocht: "<> setpagedevice" +*MediaType Recycled/Recycling-Papier: "<> setpagedevice" +*MediaType Cardstock/Karton: "<> setpagedevice" +*MediaType Vellum/Pergament: "<> setpagedevice" +*MediaType Envelope/Umschlag: "<> setpagedevice" +*MediaType Rough/Grobpapier: "<> setpagedevice" +*MediaType Thick/Dick: "<> setpagedevice" +*MediaType Highqlty/Hohe Qualitt: "<> setpagedevice" +*MediaType User1/Benutzerdefinierter Typ 1: "<> setpagedevice" +*MediaType User2/Benutzerdefinierter Typ 2: "<> setpagedevice" +*MediaType User3/Benutzerdefinierter Typ 3: "<> setpagedevice" +*MediaType User4/Benutzerdefinierter Typ 4: "<> setpagedevice" +*MediaType User5/Benutzerdefinierter Typ 5: "<> setpagedevice" +*MediaType User6/Benutzerdefinierter Typ 6: "<> setpagedevice" +*MediaType User7/Benutzerdefinierter Typ 7: "<> setpagedevice" +*MediaType User8/Benutzerdefinierter Typ 8: "<> setpagedevice" +*?MediaType: " + save + currentpagedevice /MediaType {get} stopped + {pop pop (Unknown)} {dup null eq {pop (Unknown)} if} ifelse = flush + restore" +*End +*CloseUI: *MediaType + +*RequiresPageRegion All: True +*% Duplex Definitions +*OpenUI *Duplex/Duplex: PickOne +*OrderDependency: 50 AnySetup *Duplex +*DefaultDuplex: None +*Duplex None/Keine: "statusdict begin false setduplexmode false settumble end" +*Duplex DuplexTumble/Binden Kurze Seite: "statusdict begin true setduplexmode true settumble end" +*Duplex DuplexNoTumble/Binden Lange Seite: "statusdict begin true setduplexmode false settumble end" +*?Duplex: " + save + statusdict begin + duplexmode + {tumble {(DuplexTumble)}{(DuplexNoTumble)} ifelse} + {(None)} ifelse + = flush end restore" +*End +*CloseUI: *Duplex + +*% Job Spooling Definitions +*OpenUI *KCCollate/Job Zwischenspeicherung: PickOne +*OrderDependency: 20 AnySetup *KCCollate +*DefaultKCCollate: PrnDef +*KCCollate PrnDef/Standard: "" +*KCCollate None/Keine: "<< /Collate false >> setpagedevice" +*KCCollate Temp/Temporr: " + userdict /UICollateDetails known not {userdict /UICollateDetails 10 dict put} if + userdict /UICollateDetails get /Mode 0 put <> setpagedevice" +*End +*?KCCollate: " + save + currentpagedevice dup /Collate known { + dup /CollateDetails known { + /CollateDetails get + dup /Mode known { + /Mode get + 1 { + dup 0 eq {pop (Temp) exit} if + pop (Unknown) + } repeat + }{pop (Unknown)} ifelse + }{pop (Unknown)} ifelse + }{pop (Unknown)} ifelse + = flush restore" +*End +*CloseUI: *KCCollate + +*% KCSuperWatermark +*OpenUI *KCSuperWatermark/Super Watermark: PickOne +*OrderDependency: 10 AnySetup *KCSuperWatermark +*DefaultKCSuperWatermark: None +*KCSuperWatermark None/Keine: "" +*KCSuperWatermark UFA/Verwenden Form-A Alle Seiten: "<> setpagedevice" +*KCSuperWatermark UFB/Verwenden Form-B Alle Seiten: "<> setpagedevice" +*KCSuperWatermark UFC/Verwenden Form-C Alle Seiten: "<> setpagedevice" +*KCSuperWatermark UFAFP/Verwenden Form-A Erste Seite: "<> setpagedevice" +*KCSuperWatermark UFBFP/Verwenden Form-B Erste Seite: "<> setpagedevice" +*KCSuperWatermark UFCFP/Verwenden Form-C Erste Seite: "<> setpagedevice" +*KCSuperWatermark SFA/Speichern Form-A: "<> setpagedevice" +*KCSuperWatermark SFB/Speichern Form-B: "<> setpagedevice" +*KCSuperWatermark SFC/Speichern Form-C: "<> setpagedevice" +*CloseUI: *KCSuperWatermark + +*% PPD Version Info +*OpenUI *KCVersion/PPD Version: PickOne +*OrderDependency: 25 AnySetup *KCVersion +*DefaultKCVersion: Default +*KCVersion Default/8.4 [07-12-2007]: " +globaldict /ct_AddStdCIDMap known { +globaldict /ct_AddStdCIDMap get length 7 eq +{globaldict /ct_AddStdCIDMap get 0 get type /stringtype eq +{globaldict /ct_AddStdCIDMap get 1 get 0 eq +{globaldict /ct_AddStdCIDMap get 2 get () eq +{globaldict /ct_AddStdCIDMap get 3 get /SubFileDecode eq +{globaldict /ct_AddStdCIDMap get 4 get systemdict /filter get eq +{currentglobal true setglobal globaldict +/ct_AddStdCIDMap +globaldict /ct_AddStdCIDMap get dup +globaldict /ct_AddStdCIDMap get +0 get length 1 exch +put put setglobal +} if} if} if} if} if} if} if" +*End +*CloseUI: *KCVersion + +*% Font Information +*DefaultFont: Courier +*Font AvantGarde-Book: Standard "(001.006S)" Standard ROM +*Font AvantGarde-BookOblique: Standard "(001.006S)" Standard ROM +*Font AvantGarde-Demi: Standard "(001.007S)" Standard ROM +*Font AvantGarde-DemiOblique: Standard "(001.007S)" Standard ROM +*Font Bookman-Light: Standard "(001.004S)" Standard ROM +*Font Bookman-LightItalic: Standard "(001.004S)" Standard ROM +*Font Bookman-Demi: Standard "(001.004S)" Standard ROM +*Font Bookman-DemiItalic: Standard "(001.004S)" Standard ROM +*Font Courier: Standard "(002.004S)" Standard ROM +*Font Courier-Oblique: Standard "(002.004S)" Standard ROM +*Font Courier-Bold: Standard "(002.004S)" Standard ROM +*Font Courier-BoldOblique: Standard "(002.004S)" Standard ROM +*Font Helvetica: Standard "(001.006S)" Standard ROM +*Font Helvetica-Oblique: Standard "(001.006S)" Standard ROM +*Font Helvetica-Bold: Standard "(001.007S)" Standard ROM +*Font Helvetica-BoldOblique: Standard "(001.007S)" Standard ROM +*Font Helvetica-Narrow: Standard "(001.006S)" Standard ROM +*Font Helvetica-Narrow-Oblique: Standard "(001.006S)" Standard ROM +*Font Helvetica-Narrow-Bold: Standard "(001.007S)" Standard ROM +*Font Helvetica-Narrow-BoldOblique: Standard "(001.007S)" Standard ROM +*Font NewCenturySchlbk-Roman: Standard "(001.007S)" Standard ROM +*Font NewCenturySchlbk-Italic: Standard "(001.006S)" Standard ROM +*Font NewCenturySchlbk-Bold: Standard "(001.009S)" Standard ROM +*Font NewCenturySchlbk-BoldItalic: Standard "(001.007S)" Standard ROM +*Font Palatino-Roman: Standard "(001.005S)" Standard ROM +*Font Palatino-Italic: Standard "(001.005S)" Standard ROM +*Font Palatino-Bold: Standard "(001.005S)" Standard ROM +*Font Palatino-BoldItalic: Standard "(001.005S)" Standard ROM +*Font Symbol: Special "(001.007S)" Special ROM +*Font Times-Roman: Standard "(001.007S)" Standard ROM +*Font Times-Italic: Standard "(001.007S)" Standard ROM +*Font Times-Bold: Standard "(001.007S)" Standard ROM +*Font Times-BoldItalic: Standard "(001.009S)" Standard ROM +*Font ZapfChancery-MediumItalic: Standard "(001.007S)" Standard ROM +*Font ZapfDingbats: Special "(001.004S)" Special ROM +*Font Albertus-Medium: Standard "(001.008S)" Standard ROM +*Font Albertus-ExtraBold: Standard "(001.008S)" Standard ROM +*Font AntiqueOlive: Standard "(001.008S)" Standard ROM +*Font AntiqueOlive-Italic: Standard "(001.008S)" Standard ROM +*Font AntiqueOlive-Bold: Standard "(001.008S)" Standard ROM +*Font Arial: Standard "(001.008S)" Standard ROM +*Font Arial-Italic: Standard "(001.008S)" Standard ROM +*Font Arial-Bold: Standard "(001.008S)" Standard ROM +*Font Arial-BoldItalic: Standard "(001.008S)" Standard ROM +*Font CGOmega: Standard "(001.008S)" Standard ROM +*Font CGOmega-Italic: Standard "(001.008S)" Standard ROM +*Font CGOmega-Bold: Standard "(001.008S)" Standard ROM +*Font CGOmega-BoldItalic: Standard "(001.008S)" Standard ROM +*Font CGTimes: Standard "(001.008S)" Standard ROM +*Font CGTimes-Italic: Standard "(001.008S)" Standard ROM +*Font CGTimes-Bold: Standard "(001.008S)" Standard ROM +*Font CGTimes-BoldItalic: Standard "(001.008S)" Standard ROM +*Font Clarendon-Condensed-Bold: Standard "(001.008S)" Standard ROM +*Font Coronet: Standard "(001.008S)" Standard ROM +*Font CourierHP: Standard "(001.008S)" Standard ROM +*Font CourierHP-Italic: Standard "(001.008S)" Standard ROM +*Font CourierHP-Bold: Standard "(001.008S)" Standard ROM +*Font CourierHP-BoldItalic: Standard "(001.008S)" Standard ROM +*Font Garamond-Antiqua: Standard "(001.008S)" Standard ROM +*Font Garamond-Halbfett: Standard "(001.008S)" Standard ROM +*Font Garamond-Kursiv: Standard "(001.008S)" Standard ROM +*Font Garamond-KursivHalbfett: Standard "(001.008S)" Standard ROM +*Font LetterGothic: Standard "(001.008S)" Standard ROM +*Font LetterGothic-Italic: Standard "(001.008S)" Standard ROM +*Font LetterGothic-Bold: Standard "(001.008S)" Standard ROM +*Font Marygold: Standard "(001.008S)" Standard ROM +*Font SymbolMT: Standard "(001.008S)" Standard ROM +*Font TimesNewRoman: Standard "(001.008S)" Standard ROM +*Font TimesNewRoman-Italic: Standard "(001.008S)" Standard ROM +*Font TimesNewRoman-BoldItalic: Standard "(001.008S)" Standard ROM +*Font TimesNewRoman-Bold: Standard "(001.008S)" Standard ROM +*Font Univers-Medium: Standard "(001.008S)" Standard ROM +*Font Univers-MediumItalic: Standard "(001.008S)" Standard ROM +*Font Univers-Bold: Standard "(001.008S)" Standard ROM +*Font Univers-BoldItalic: Standard "(001.008S)" Standard ROM +*Font Univers-Condensed-Medium: Standard "(001.008S)" Standard ROM +*Font Univers-Condensed-MediumItalic: Standard "(001.008S)" Standard ROM +*Font Univers-Condensed-Bold: Standard "(001.008S)" Standard ROM +*Font Univers-Condensed-BoldItalic: Standard "(001.008S)" Standard ROM +*Font Wingdings-Regular: Special "(001.008S)" Special ROM +*?FontQuery: " + save + /str 80 string dup 0 (fonts/) putinterval def + {count 1 gt + { exch dup str 6 94 getinterval cvs + (/) print print (:) print + FontDirectory exch known + {(Yes)}{(No)} ifelse = + }{exit} ifelse + } bind loop (*) + = flush restore" +*End +*?FontList: "save FontDirectory { pop == } bind forall flush (*) = flush restore" +*% Printer Messages +*Message: "%%[ exitserver: permanent state may be changed ]%%" +*Message: "%%[ Flushing: rest of job (to end-of-file) will be ignored ]%%" +*Message: "\FontName\ not found, using Courier" + +*% Status (format: %%[ status: ]%% ) +*Status: "warming up"/warming up +*Status: "idle"/idle +*Status: "busy"/busy +*Status: "waiting"/waiting +*Status: "printing"/printing +*Status: "initializing"/initializing +*Status: "printing test page"/printing test page +*% Printer Error (format: %%[ PrinterError: ]%% ) +*PrinterError: "paper entry misfeed" +*PrinterError: "cover open" +*PrinterError: "no paper tray" +*PrinterError: "out of paper" +*PrinterError: "toner low (halt)" +*PrinterError: "warming up" +*PrinterError: "other reason" +*PrinterError: "video interface mode" +*PrinterError: "offline" +*PrinterError: "toner low (warning)" + +*% Input Sources (format: %%[ status: ;source: ]%% ) +*Source: "Serial" +*Source: "Parallel" +*Source: "LocalTalk" +*Source: "Option" + +*% End of PPD file for Kyocera FS-1300D (German) diff --git a/nixos/desktop/printing/default.nix b/nixos/desktop/printing/default.nix new file mode 100644 index 0000000..d232a32 --- /dev/null +++ b/nixos/desktop/printing/default.nix @@ -0,0 +1,21 @@ +{ inputs, lib, config, pkgs, ... }: { + # Enable CUPS to print documents. + services.printing.enable = true; + services.printing.drivers = [ + (pkgs.writeTextDir "share/cups/model/kyocera_fs-1300d.ppd" (builtins.readFile ../../../files/kyocera_fs-1300d.ppd)) + ]; + hardware.printers = { + ensurePrinters = [ + { + name = "Kyocera_FS-1300D"; + location = "Office"; + deviceUri = "socket://172.16.0.4:9100"; + model = "kyocera_fs-1300d.ppd"; + ppdOptions = { + PageSize = "A4"; + }; + } + ]; + ensureDefaultPrinter = "Kyocera_FS-1300D"; + }; +}