summary refs log tree commit diff
path: root/nixos/modules/services/printing/cupsd.nix
diff options
context:
space:
mode:
authorJohannes Frankenau <johannes@frankenau.net>2018-03-15 12:55:03 +0100
committerJohannes Frankenau <johannes@frankenau.net>2018-07-14 23:39:43 +0200
commitd81f819db35fe833d935486439d085bd5c3e85da (patch)
tree60bb0c843562e81247a3cafc50fff9b0169593b7 /nixos/modules/services/printing/cupsd.nix
parent23f5fe768dec00bead44badd077467ac4bbd64d7 (diff)
downloadnixpkgs-d81f819db35fe833d935486439d085bd5c3e85da.tar
nixpkgs-d81f819db35fe833d935486439d085bd5c3e85da.tar.gz
nixpkgs-d81f819db35fe833d935486439d085bd5c3e85da.tar.bz2
nixpkgs-d81f819db35fe833d935486439d085bd5c3e85da.tar.lz
nixpkgs-d81f819db35fe833d935486439d085bd5c3e85da.tar.xz
nixpkgs-d81f819db35fe833d935486439d085bd5c3e85da.tar.zst
nixpkgs-d81f819db35fe833d935486439d085bd5c3e85da.zip
nixos/cupsd: add option to start when needed
Diffstat (limited to 'nixos/modules/services/printing/cupsd.nix')
-rw-r--r--nixos/modules/services/printing/cupsd.nix17
1 files changed, 16 insertions, 1 deletions
diff --git a/nixos/modules/services/printing/cupsd.nix b/nixos/modules/services/printing/cupsd.nix
index b074d15cbec..dbf18ec1d11 100644
--- a/nixos/modules/services/printing/cupsd.nix
+++ b/nixos/modules/services/printing/cupsd.nix
@@ -124,6 +124,16 @@ in
         '';
       };
 
+      startWhenNeeded = mkOption {
+        type = types.bool;
+        default = false;
+        description = ''
+          If set, CUPS is socket-activated; that is,
+          instead of having it permanently running as a daemon,
+          systemd will start it on the first incoming connection.
+        '';
+      };
+
       listenAddresses = mkOption {
         type = types.listOf types.str;
         default = [ "localhost:631" ];
@@ -287,8 +297,13 @@ in
 
     systemd.packages = [ cups.out ];
 
+    systemd.sockets.cups = mkIf cfg.startWhenNeeded {
+      wantedBy = [ "sockets.target" ];
+      listenStreams = map (x: replaceStrings ["localhost"] ["127.0.0.1"] (removePrefix "*:" x)) cfg.listenAddresses;
+    };
+
     systemd.services.cups =
-      { wantedBy = [ "multi-user.target" ];
+      { wantedBy = optionals (!cfg.startWhenNeeded) [ "multi-user.target" ];
         wants = [ "network.target" ];
         after = [ "network.target" ];