about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRyan Horiguchi <ryan.horiguchi@gmail.com>2024-02-20 20:04:43 +0100
committerRyan Horiguchi <ryan.horiguchi@gmail.com>2024-02-25 19:06:35 +0100
commita52e27d4f637854e81dfd51da3b29627f7374513 (patch)
tree9b696ac9d5d1aed456aac4daa6b76761ea7cce75
parente4af98e12764cb1b2c2c26dcf31edf5af1552162 (diff)
nixos/hardware/printers: fix empty ppdOptions
-rw-r--r--nixos/modules/hardware/printers.nix27
1 files changed, 16 insertions, 11 deletions
diff --git a/nixos/modules/hardware/printers.nix b/nixos/modules/hardware/printers.nix
index 846ff6f3fb4f5..4fb6a192cdd2c 100644
--- a/nixos/modules/hardware/printers.nix
+++ b/nixos/modules/hardware/printers.nix
@@ -2,18 +2,23 @@
 with lib;
 let
   cfg = config.hardware.printers;
-  ppdOptionsString = options: optionalString (options != {})
-    (concatStringsSep " "
-      (mapAttrsToList (name: value: "-o '${name}'='${value}'") options)
-    );
-  ensurePrinter = p: ''
-    ${pkgs.cups}/bin/lpadmin -p '${p.name}' -E \
-      ${optionalString (p.location != null) "-L '${p.location}'"} \
-      ${optionalString (p.description != null) "-D '${p.description}'"} \
-      -v '${p.deviceUri}' \
-      -m '${p.model}' \
-      ${ppdOptionsString p.ppdOptions}
+
+  ensurePrinter = p: let
+    args = cli.toGNUCommandLineShell {} ({
+      p = p.name;
+      v = p.deviceUri;
+      m = p.model;
+    } // optionalAttrs (p.location != null) {
+      L = p.location;
+    } // optionalAttrs (p.description != null) {
+      D = p.description;
+    } // optionalAttrs (p.ppdOptions != {}) {
+      o = mapAttrsToList (name: value: "'${name}'='${value}'") p.ppdOptions;
+    });
+  in ''
+    ${pkgs.cups}/bin/lpadmin ${args} -E
   '';
+
   ensureDefaultPrinter = name: ''
     ${pkgs.cups}/bin/lpadmin -d '${name}'
   '';