summary refs log tree commit diff
path: root/nixos/modules/services/printing
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2016-01-17 04:12:11 +0300
committerNikolay Amiantov <ab@fmap.me>2016-01-17 15:50:40 +0300
commit47017474fd75a75d747cdb5600b14b9203801984 (patch)
tree769b26ff5bd79df75d49306981828f17f2b61bad /nixos/modules/services/printing
parentc311901810ab8ddefd38d94e5f625212a86e1c6b (diff)
downloadnixpkgs-47017474fd75a75d747cdb5600b14b9203801984.tar
nixpkgs-47017474fd75a75d747cdb5600b14b9203801984.tar.gz
nixpkgs-47017474fd75a75d747cdb5600b14b9203801984.tar.bz2
nixpkgs-47017474fd75a75d747cdb5600b14b9203801984.tar.lz
nixpkgs-47017474fd75a75d747cdb5600b14b9203801984.tar.xz
nixpkgs-47017474fd75a75d747cdb5600b14b9203801984.tar.zst
nixpkgs-47017474fd75a75d747cdb5600b14b9203801984.zip
cupsd service: move root directory to /var/lib/cups
Diffstat (limited to 'nixos/modules/services/printing')
-rw-r--r--nixos/modules/services/printing/cupsd.nix48
1 files changed, 35 insertions, 13 deletions
diff --git a/nixos/modules/services/printing/cupsd.nix b/nixos/modules/services/printing/cupsd.nix
index 58d541dbcba..98fb33e3256 100644
--- a/nixos/modules/services/printing/cupsd.nix
+++ b/nixos/modules/services/printing/cupsd.nix
@@ -37,7 +37,7 @@ let
       [ cups additionalBackends cups_filters pkgs.ghostscript ]
       ++ optional cfg.gutenprint gutenprint
       ++ cfg.drivers;
-    pathsToLink = [ "/lib/cups" "/share/cups" "/bin" "/etc/cups" ];
+    pathsToLink = [ "/lib/cups" "/share/cups" "/bin" ];
     postBuild = cfg.bindirCmds;
     ignoreCollisions = true;
   };
@@ -88,6 +88,20 @@ let
 
   browsedFile = writeConf "cups-browsed.conf" cfg.browsedConf;
 
+  rootdir = pkgs.buildEnv {
+    name = "cups-progs";
+    paths = [
+      cupsFilesFile
+      cupsdFile
+      (writeConf "client.conf" cfg.clientConf)
+      (writeConf "snmp.conf" cfg.snmpConf)
+    ] ++ optional avahiEnabled browsedFile
+      ++ optional cfg.gutenprint gutenprint
+      ++ cfg.drivers;
+    pathsToLink = [ "/etc/cups" ];
+    ignoreCollisions = true;
+  };
+
 in
 
 {
@@ -253,12 +267,7 @@ in
       };
 
     environment.systemPackages = [ cups ] ++ optional polkitEnabled cups-pk-helper;
-
-    environment.etc."cups/client.conf".text = cfg.clientConf;
-    environment.etc."cups/cups-files.conf".source = cupsFilesFile;
-    environment.etc."cups/cupsd.conf".source = cupsdFile;
-    environment.etc."cups/cups-browsed.conf".source = browsedFile;
-    environment.etc."cups/snmp.conf".text = cfg.snmpConf;
+    environment.etc."cups".source = "/var/lib/cups";
 
     services.dbus.packages = [ cups ] ++ optional polkitEnabled cups-pk-helper;
 
@@ -278,19 +287,32 @@ in
 
         preStart =
           ''
-            mkdir -m 0755 -p /etc/cups
             mkdir -m 0700 -p /var/cache/cups
             mkdir -m 0700 -p /var/spool/cups
             mkdir -m 0755 -p ${cfg.tempDir}
+
+            mkdir -m 0755 -p /var/lib/cups
+            # Backwards compatibility
+            if [ ! -L /etc/cups ]; then
+              mv /etc/cups/* /var/lib/cups
+              rmdir /etc/cups
+              ln -s /var/lib/cups /etc/cups
+            fi
+            # First, clean existing symlinks
+            if [ -n "$(ls /var/lib/cups)" ]; then
+              for i in /var/lib/cups/*; do
+                [ -L "$i" ] && rm "$i"
+              done
+            fi
+            # Then, populate it with static files
+            cd ${rootdir}/etc/cups
+            for i in *; do
+              [ ! -e "/var/lib/cups/$i" ] && ln -s "${rootdir}/etc/cups/$i" "/var/lib/cups/$i"
+            done
             ${optionalString cfg.gutenprint ''
               ${gutenprint}/bin/cups-genppdupdate
             ''}
           '';
-
-        restartTriggers =
-          [ config.environment.etc."cups/cups-files.conf".source
-            config.environment.etc."cups/cupsd.conf".source
-          ];
       };
 
     systemd.services.cups-browsed = mkIf avahiEnabled