diff --git a/system/options.nix b/system/options.nix
index 2dfbca44e7e..76aebb102d0 100644
--- a/system/options.nix
+++ b/system/options.nix
@@ -752,6 +752,15 @@
}
+ {
+ name = ["services" "printing" "enable"];
+ default = false;
+ description = "
+ Whether to enable printing support through the CUPS daemon.
+ ";
+ }
+
+
{
name = ["installer" "nixpkgsURL"];
default = "";
diff --git a/upstart-jobs/cupsd.nix b/upstart-jobs/cupsd.nix
new file mode 100644
index 00000000000..1b561bec5e2
--- /dev/null
+++ b/upstart-jobs/cupsd.nix
@@ -0,0 +1,94 @@
+{ writeText, cups
+}:
+
+let
+
+ logDir = "/var/log/cups";
+
+ cupsdConfig = writeText "cupsd.conf" "
+ LogLevel info
+
+ SystemGroup root
+
+ Listen localhost:631
+ Listen /var/run/cups/cups.sock
+
+ ServerRoot ${cups}/etc/cups
+
+ AccessLog ${logDir}/access_log
+ ErrorLog ${logDir}/access_log
+ PageLog ${logDir}/page_log
+
+ TempDir /tmp
+
+ Browsing On
+ BrowseOrder allow,deny
+ BrowseAllow @LOCAL
+
+ DefaultAuthType Basic
+
+
+ Order allow,deny
+ Allow localhost
+
+
+
+ Order allow,deny
+ Allow localhost
+
+
+
+ AuthType Basic
+ Require user @SYSTEM
+ Order allow,deny
+ Allow localhost
+
+
+
+
+ Require user @OWNER @SYSTEM
+ Order deny,allow
+
+
+
+ AuthType Basic
+ Require user @SYSTEM
+ Order deny,allow
+
+
+
+ Require user @OWNER @SYSTEM
+ Order deny,allow
+
+
+
+ Order deny,allow
+
+
+ ";
+
+in
+
+{
+ name = "cupsd";
+
+ extraPath = [
+ cups
+ ];
+
+ job = "
+description \"CUPS daemon\"
+
+start on network-interfaces/started
+stop on network-interfaces/stop
+
+start script
+ mkdir -m 0755 -p ${logDir}
+ mkdir -m 0700 -p /var/cache/cups
+ mkdir -m 0700 -p /var/spool/cups
+end script
+
+respawn ${cups}/sbin/cupsd -c ${cupsdConfig} -F
+ ";
+
+}
diff --git a/upstart-jobs/default.nix b/upstart-jobs/default.nix
index c677cc3edd8..4056e27e9ec 100644
--- a/upstart-jobs/default.nix
+++ b/upstart-jobs/default.nix
@@ -146,6 +146,12 @@ import ../upstart-jobs/gather.nix {
inherit (pkgs) glibc pwdutils;
})
+ # CUPS (printing) daemon.
+ ++ optional ["services" "printing" "enable"]
+ (import ../upstart-jobs/cupsd.nix {
+ inherit (pkgs) writeText cups;
+ })
+
# ALSA sound support.
++ optional ["sound" "enable"]
(import ../upstart-jobs/alsa.nix {