summary refs log tree commit diff
path: root/nixos/modules/services
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/services')
-rw-r--r--nixos/modules/services/amqp/activemq/default.nix2
-rw-r--r--nixos/modules/services/backup/sitecopy-backup.nix2
-rw-r--r--nixos/modules/services/databases/postgresql.nix2
-rw-r--r--nixos/modules/services/desktops/gnome3/gnome-documents.nix4
-rw-r--r--nixos/modules/services/desktops/gnome3/gnome-keyring.nix4
-rw-r--r--nixos/modules/services/desktops/gnome3/gnome-online-accounts.nix4
-rw-r--r--nixos/modules/services/desktops/gnome3/gnome-online-miners.nix4
-rw-r--r--nixos/modules/services/desktops/gnome3/gnome-user-share.nix4
-rw-r--r--nixos/modules/services/desktops/gnome3/gvfs.nix4
-rw-r--r--nixos/modules/services/desktops/gnome3/seahorse.nix4
-rw-r--r--nixos/modules/services/desktops/gnome3/tracker.nix4
-rw-r--r--nixos/modules/services/hardware/acpid.nix2
-rw-r--r--nixos/modules/services/hardware/amd-hybrid-graphics.nix8
-rw-r--r--nixos/modules/services/hardware/nvidia-optimus.nix8
-rw-r--r--nixos/modules/services/monitoring/monit.nix4
-rw-r--r--nixos/modules/services/monitoring/uptime.nix4
-rw-r--r--nixos/modules/services/network-filesystems/openafs-client/default.nix4
-rw-r--r--nixos/modules/services/network-filesystems/rsyncd.nix6
-rw-r--r--nixos/modules/services/networking/connman.nix2
-rw-r--r--nixos/modules/services/networking/ddclient.nix4
-rw-r--r--nixos/modules/services/networking/dhcpd.nix2
-rw-r--r--nixos/modules/services/networking/gvpe.nix4
-rw-r--r--nixos/modules/services/networking/networkmanager.nix4
-rw-r--r--nixos/modules/services/networking/notbit.nix2
-rw-r--r--nixos/modules/services/networking/nsd.nix4
-rw-r--r--nixos/modules/services/networking/teamspeak3.nix4
-rw-r--r--nixos/modules/services/networking/znc.nix294
-rw-r--r--nixos/modules/services/scheduling/cron.nix2
-rw-r--r--nixos/modules/services/scheduling/fcron.nix2
-rw-r--r--nixos/modules/services/security/frandom.nix8
-rw-r--r--nixos/modules/services/system/kerberos.nix6
-rw-r--r--nixos/modules/services/system/nscd.nix2
-rw-r--r--nixos/modules/services/system/uptimed.nix4
-rw-r--r--nixos/modules/services/ttys/kmscon.nix4
-rw-r--r--nixos/modules/services/web-servers/apache-httpd/mediawiki.nix13
-rw-r--r--nixos/modules/services/web-servers/apache-httpd/mercurial.nix4
-rw-r--r--nixos/modules/services/web-servers/apache-httpd/tomcat-connector.nix4
-rw-r--r--nixos/modules/services/x11/window-managers/openbox.nix4
-rw-r--r--nixos/modules/services/x11/window-managers/xmonad.nix6
39 files changed, 374 insertions, 79 deletions
diff --git a/nixos/modules/services/amqp/activemq/default.nix b/nixos/modules/services/amqp/activemq/default.nix
index 1862e17de0b5..261f97617664 100644
--- a/nixos/modules/services/amqp/activemq/default.nix
+++ b/nixos/modules/services/amqp/activemq/default.nix
@@ -1,7 +1,7 @@
 { config, lib, pkgs, ... }:
 
-with lib;
 with pkgs;
+with lib;
 
 let
 
diff --git a/nixos/modules/services/backup/sitecopy-backup.nix b/nixos/modules/services/backup/sitecopy-backup.nix
index 5d3675fa3e9d..5f2b4e76aeeb 100644
--- a/nixos/modules/services/backup/sitecopy-backup.nix
+++ b/nixos/modules/services/backup/sitecopy-backup.nix
@@ -73,7 +73,7 @@ in
         touch ${stateDir}/sitecopy.secrets
         chown root ${stateDir}/sitecopy.secrets
 
-        ${pkgs.lib.concatStrings (map ( b: ''
+        ${lib.concatStrings (map ( b: ''
             unset secrets
             unset secret
             secrets=`grep '^${b.server}' ${stateDir}/sitecopy.secrets | head -1`
diff --git a/nixos/modules/services/databases/postgresql.nix b/nixos/modules/services/databases/postgresql.nix
index ad83cb553e1d..01c55479b2b4 100644
--- a/nixos/modules/services/databases/postgresql.nix
+++ b/nixos/modules/services/databases/postgresql.nix
@@ -85,7 +85,7 @@ in
           Defines how users authenticate themselves to the server. By
           default, "trust" access to local users will always be granted
           along with any other custom options. If you do not want this,
-          set this option using "pkgs.lib.mkForce" to override this
+          set this option using "lib.mkForce" to override this
           behaviour.
         '';
       };
diff --git a/nixos/modules/services/desktops/gnome3/gnome-documents.nix b/nixos/modules/services/desktops/gnome3/gnome-documents.nix
index 2279ef48fb9c..88bbdadfcbdd 100644
--- a/nixos/modules/services/desktops/gnome3/gnome-documents.nix
+++ b/nixos/modules/services/desktops/gnome3/gnome-documents.nix
@@ -1,8 +1,8 @@
 # GNOME Documents daemon.
 
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   gnome3 = config.environment.gnome3.packageSet;
diff --git a/nixos/modules/services/desktops/gnome3/gnome-keyring.nix b/nixos/modules/services/desktops/gnome3/gnome-keyring.nix
index be14f1fcbc0c..566c8a50e269 100644
--- a/nixos/modules/services/desktops/gnome3/gnome-keyring.nix
+++ b/nixos/modules/services/desktops/gnome3/gnome-keyring.nix
@@ -1,8 +1,8 @@
 # GNOME Keyring daemon.
 
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   gnome3 = config.environment.gnome3.packageSet;
diff --git a/nixos/modules/services/desktops/gnome3/gnome-online-accounts.nix b/nixos/modules/services/desktops/gnome3/gnome-online-accounts.nix
index a41fb0101f0f..82d04c62c70d 100644
--- a/nixos/modules/services/desktops/gnome3/gnome-online-accounts.nix
+++ b/nixos/modules/services/desktops/gnome3/gnome-online-accounts.nix
@@ -1,8 +1,8 @@
 # GNOME Online Accounts daemon.
 
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   gnome3 = config.environment.gnome3.packageSet;
diff --git a/nixos/modules/services/desktops/gnome3/gnome-online-miners.nix b/nixos/modules/services/desktops/gnome3/gnome-online-miners.nix
index 030d4bac6a76..6acd633b62c9 100644
--- a/nixos/modules/services/desktops/gnome3/gnome-online-miners.nix
+++ b/nixos/modules/services/desktops/gnome3/gnome-online-miners.nix
@@ -1,8 +1,8 @@
 # GNOME Online Miners daemon.
 
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   gnome3 = config.environment.gnome3.packageSet;
diff --git a/nixos/modules/services/desktops/gnome3/gnome-user-share.nix b/nixos/modules/services/desktops/gnome3/gnome-user-share.nix
index 3b6c713f7be3..e5c94cff7c84 100644
--- a/nixos/modules/services/desktops/gnome3/gnome-user-share.nix
+++ b/nixos/modules/services/desktops/gnome3/gnome-user-share.nix
@@ -1,8 +1,8 @@
 # GNOME User Share daemon.
 
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   gnome3 = config.environment.gnome3.packageSet;
diff --git a/nixos/modules/services/desktops/gnome3/gvfs.nix b/nixos/modules/services/desktops/gnome3/gvfs.nix
index 1a003ddd1efb..7e1382b161e1 100644
--- a/nixos/modules/services/desktops/gnome3/gvfs.nix
+++ b/nixos/modules/services/desktops/gnome3/gvfs.nix
@@ -1,8 +1,8 @@
 # gvfs backends
 
-{ config, pkgs, ... }:
+{ config, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   gnome3 = config.environment.gnome3.packageSet;
diff --git a/nixos/modules/services/desktops/gnome3/seahorse.nix b/nixos/modules/services/desktops/gnome3/seahorse.nix
index 01e4a24f2672..45925aaca9b9 100644
--- a/nixos/modules/services/desktops/gnome3/seahorse.nix
+++ b/nixos/modules/services/desktops/gnome3/seahorse.nix
@@ -1,8 +1,8 @@
 # Seahorse daemon.
 
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   gnome3 = config.environment.gnome3.packageSet;
diff --git a/nixos/modules/services/desktops/gnome3/tracker.nix b/nixos/modules/services/desktops/gnome3/tracker.nix
index 670e585c6f55..8c5935a5ee3c 100644
--- a/nixos/modules/services/desktops/gnome3/tracker.nix
+++ b/nixos/modules/services/desktops/gnome3/tracker.nix
@@ -1,8 +1,8 @@
 # Tracker daemon.
 
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   gnome3 = config.environment.gnome3.packageSet;
diff --git a/nixos/modules/services/hardware/acpid.nix b/nixos/modules/services/hardware/acpid.nix
index 03daab0d4882..a20b1a1ee3ad 100644
--- a/nixos/modules/services/hardware/acpid.nix
+++ b/nixos/modules/services/hardware/acpid.nix
@@ -16,7 +16,7 @@ let
             echo "event=${event.event}" > $fn
             echo "action=${pkgs.writeScript "${event.name}.sh" event.action}" >> $fn
           '';
-        in pkgs.lib.concatMapStrings f events
+        in lib.concatMapStrings f events
       }
     '';
 
diff --git a/nixos/modules/services/hardware/amd-hybrid-graphics.nix b/nixos/modules/services/hardware/amd-hybrid-graphics.nix
index d938867186d0..087bd0e04098 100644
--- a/nixos/modules/services/hardware/amd-hybrid-graphics.nix
+++ b/nixos/modules/services/hardware/amd-hybrid-graphics.nix
@@ -1,4 +1,4 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
 {
 
@@ -6,9 +6,9 @@
 
   options = {
 
-    hardware.amdHybridGraphics.disable = pkgs.lib.mkOption {
+    hardware.amdHybridGraphics.disable = lib.mkOption {
       default = false;
-      type = pkgs.lib.types.bool;
+      type = lib.types.bool;
       description = ''
         Completely disable the AMD graphics card and use the
         integrated graphics processor instead.
@@ -20,7 +20,7 @@
 
   ###### implementation
 
-  config = pkgs.lib.mkIf config.hardware.amdHybridGraphics.disable {
+  config = lib.mkIf config.hardware.amdHybridGraphics.disable {
     systemd.services."amd-hybrid-graphics" = {
       path = [ pkgs.bash ];
       description = "Disable AMD Card";
diff --git a/nixos/modules/services/hardware/nvidia-optimus.nix b/nixos/modules/services/hardware/nvidia-optimus.nix
index 4c0ce794d4f7..9fe4021c4247 100644
--- a/nixos/modules/services/hardware/nvidia-optimus.nix
+++ b/nixos/modules/services/hardware/nvidia-optimus.nix
@@ -1,4 +1,4 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
 let kernel = config.boot.kernelPackages; in
 
@@ -8,9 +8,9 @@ let kernel = config.boot.kernelPackages; in
 
   options = {
 
-    hardware.nvidiaOptimus.disable = pkgs.lib.mkOption {
+    hardware.nvidiaOptimus.disable = lib.mkOption {
       default = false;
-      type = pkgs.lib.types.bool;
+      type = lib.types.bool;
       description = ''
         Completely disable the NVIDIA graphics card and use the
         integrated graphics processor instead.
@@ -22,7 +22,7 @@ let kernel = config.boot.kernelPackages; in
 
   ###### implementation
 
-  config = pkgs.lib.mkIf config.hardware.nvidiaOptimus.disable {
+  config = lib.mkIf config.hardware.nvidiaOptimus.disable {
     boot.blacklistedKernelModules = ["nouveau" "nvidia" "nvidiafb"];
     boot.kernelModules = [ "bbswitch" ];
     boot.extraModulePackages = [ kernel.bbswitch ];
diff --git a/nixos/modules/services/monitoring/monit.nix b/nixos/modules/services/monitoring/monit.nix
index 2acc51c64a6a..642fac3b3a01 100644
--- a/nixos/modules/services/monitoring/monit.nix
+++ b/nixos/modules/services/monitoring/monit.nix
@@ -1,9 +1,9 @@
 # Monit system watcher
 # http://mmonit.org/monit/
 
-{config, pkgs, ...}:
+{config, pkgs, lib, ...}:
 
-let inherit (pkgs.lib) mkOption mkIf;
+let inherit (lib) mkOption mkIf;
 in
 
 {
diff --git a/nixos/modules/services/monitoring/uptime.nix b/nixos/modules/services/monitoring/uptime.nix
index 553110d7b80c..29616a085c8f 100644
--- a/nixos/modules/services/monitoring/uptime.nix
+++ b/nixos/modules/services/monitoring/uptime.nix
@@ -1,6 +1,6 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 let
-  inherit (pkgs.lib) mkOption mkEnableOption mkIf mkMerge types optionalAttrs optional;
+  inherit (lib) mkOption mkEnableOption mkIf mkMerge types optionalAttrs optional;
 
   cfg = config.services.uptime;
 
diff --git a/nixos/modules/services/network-filesystems/openafs-client/default.nix b/nixos/modules/services/network-filesystems/openafs-client/default.nix
index 5c539ba306ae..0297da9e865f 100644
--- a/nixos/modules/services/network-filesystems/openafs-client/default.nix
+++ b/nixos/modules/services/network-filesystems/openafs-client/default.nix
@@ -1,7 +1,7 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
 let
-  inherit (pkgs.lib) mkOption mkIf;
+  inherit (lib) mkOption mkIf;
 
   cfg = config.services.openafsClient;
 
diff --git a/nixos/modules/services/network-filesystems/rsyncd.nix b/nixos/modules/services/network-filesystems/rsyncd.nix
index bc17add809b2..19aa7efd2ff4 100644
--- a/nixos/modules/services/network-filesystems/rsyncd.nix
+++ b/nixos/modules/services/network-filesystems/rsyncd.nix
@@ -1,6 +1,6 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
 
@@ -136,4 +136,4 @@ in
 
     networking.firewall.allowedTCPPorts = [ cfg.port ];
   };
-}
\ No newline at end of file
+}
diff --git a/nixos/modules/services/networking/connman.nix b/nixos/modules/services/networking/connman.nix
index 7ed1e4805d8f..482b61997ae1 100644
--- a/nixos/modules/services/networking/connman.nix
+++ b/nixos/modules/services/networking/connman.nix
@@ -1,7 +1,7 @@
 { config, lib, pkgs, ... }:
 
-with lib;
 with pkgs;
+with lib;
 
 let
   cfg = config.networking.connman;
diff --git a/nixos/modules/services/networking/ddclient.nix b/nixos/modules/services/networking/ddclient.nix
index c53cb68fb75f..bb94a8dacfa2 100644
--- a/nixos/modules/services/networking/ddclient.nix
+++ b/nixos/modules/services/networking/ddclient.nix
@@ -1,8 +1,8 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
 let
 
-  inherit (pkgs.lib) mkOption mkIf singleton;
+  inherit (lib) mkOption mkIf singleton;
 
   inherit (pkgs) ddclient;
 
diff --git a/nixos/modules/services/networking/dhcpd.nix b/nixos/modules/services/networking/dhcpd.nix
index 89f686c28703..e5e1c103c686 100644
--- a/nixos/modules/services/networking/dhcpd.nix
+++ b/nixos/modules/services/networking/dhcpd.nix
@@ -18,7 +18,7 @@ let
 
       ${cfg.extraConfig}
 
-      ${pkgs.lib.concatMapStrings
+      ${lib.concatMapStrings
           (machine: ''
             host ${machine.hostName} {
               hardware ethernet ${machine.ethernetAddress};
diff --git a/nixos/modules/services/networking/gvpe.nix b/nixos/modules/services/networking/gvpe.nix
index 594a2e80f345..c633ffedef49 100644
--- a/nixos/modules/services/networking/gvpe.nix
+++ b/nixos/modules/services/networking/gvpe.nix
@@ -1,9 +1,9 @@
 # GNU Virtual Private Ethernet
 
-{config, pkgs, ...}:
+{config, pkgs, lib, ...}:
 
 let
-  inherit (pkgs.lib) mkOption mkIf;
+  inherit (lib) mkOption mkIf;
 
   cfg = config.services.gvpe;
 
diff --git a/nixos/modules/services/networking/networkmanager.nix b/nixos/modules/services/networking/networkmanager.nix
index 54bdf19373d5..bc1c95d3fd36 100644
--- a/nixos/modules/services/networking/networkmanager.nix
+++ b/nixos/modules/services/networking/networkmanager.nix
@@ -1,7 +1,7 @@
 { config, lib, pkgs, ... }:
 
-with lib;
 with pkgs;
+with lib;
 
 let
   cfg = config.networking.networkmanager;
@@ -151,7 +151,7 @@ in {
       { source = "${networkmanager_pptp}/etc/NetworkManager/VPN/nm-pptp-service.name";
         target = "NetworkManager/VPN/nm-pptp-service.name";
       }
-    ] ++ pkgs.lib.optional (cfg.appendNameservers == [] || cfg.insertNameservers == [])
+    ] ++ optional (cfg.appendNameservers == [] || cfg.insertNameservers == [])
            { source = overrideNameserversScript;
              target = "NetworkManager/dispatcher.d/02overridedns";
            };
diff --git a/nixos/modules/services/networking/notbit.nix b/nixos/modules/services/networking/notbit.nix
index 3e8c956f191e..2e1412ff7c83 100644
--- a/nixos/modules/services/networking/notbit.nix
+++ b/nixos/modules/services/networking/notbit.nix
@@ -1,6 +1,6 @@
 { config, lib, pkgs, ... }:
 
-with pkgs.lib;
+with lib;
 let
   cfg = config.services.notbit;
   varDir = "/var/lib/notbit";
diff --git a/nixos/modules/services/networking/nsd.nix b/nixos/modules/services/networking/nsd.nix
index adfee1caec58..db8cb1228719 100644
--- a/nixos/modules/services/networking/nsd.nix
+++ b/nixos/modules/services/networking/nsd.nix
@@ -1,6 +1,6 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   cfg = config.services.nsd;
diff --git a/nixos/modules/services/networking/teamspeak3.nix b/nixos/modules/services/networking/teamspeak3.nix
index 2d3478d52f83..b3656d73dec0 100644
--- a/nixos/modules/services/networking/teamspeak3.nix
+++ b/nixos/modules/services/networking/teamspeak3.nix
@@ -1,6 +1,6 @@
-{ config, pkgs, ... }:
+{ config, lib, pkgs, ... }:
 
-with pkgs.lib;
+with lib;
 
 let
   ts3 = pkgs.teamspeak_server;
diff --git a/nixos/modules/services/networking/znc.nix b/nixos/modules/services/networking/znc.nix
new file mode 100644
index 000000000000..a40fd924741b
--- /dev/null
+++ b/nixos/modules/services/networking/znc.nix
@@ -0,0 +1,294 @@
+{ config, lib, pkgs, ...}:
+
+with lib;
+
+let
+  cfg = config.services.znc;
+
+  defaultUser = "znc"; # Default user to own process.
+
+  # Default user and pass:
+  # un=znc
+  # pw=nixospass
+
+  defaultUserName = "znc";
+  defaultPassBlock = "
+        <Pass password>
+                Method = sha256
+                Hash = e2ce303c7ea75c571d80d8540a8699b46535be6a085be3414947d638e48d9e93
+                Salt = l5Xryew4g*!oa(ECfX2o
+        </Pass>
+  ";
+
+  confOptions = { ... }: {
+    options = {
+      modules = mkOption {
+        type = types.listOf types.string;
+        default = [ "partyline" "webadmin" "adminlog" "log" ];
+        example = [ "partyline" "webadmin" "adminlog" "log" ];
+        description = ''
+          A list of modules to include in the `znc.conf` file.
+        '';
+      };
+
+      userName = mkOption {
+        default = defaultUserName;
+        example = "johntron";
+        type = types.string;
+        description = ''
+          The user name to use when generating the `znc.conf` file.
+          This is the user name used by the user logging into the ZNC web admin. 
+        '';
+      };
+
+      nick = mkOption {
+        default = "znc-user";
+        example = "john";
+        type = types.string;
+        description = ''
+          The IRC nick to use when generating the `znc.conf` file.
+        '';
+      };
+
+      passBlock = mkOption {
+        default = defaultPassBlock;
+        example = "Must be the block generated by the `znc --makepass` command.";
+        type = types.string;
+        description = ''
+          The pass block to use when generating the `znc.conf` file.
+          This is the password used by the user logging into the ZNC web admin.
+          This is the block generated by the `znc --makepass` command.
+          !!! If not specified, please change this after starting the service. !!!
+        '';
+      };
+
+      port = mkOption {
+        default = "5000";
+        example = "5000";
+        type = types.string;
+        description = ''
+          Specifies the port on which to listen.
+        '';
+      };
+ 
+      useSSL = mkOption {
+        default = true;
+        example = true;
+        type = types.bool;
+        description = ''
+          Indicates whether the ZNC server should use SSL when listening on the specified port.
+        '';
+      };
+
+    };
+  };
+
+  # Keep znc.conf in nix store, then symlink or copy into `dataDir`, depending on `mutable`.
+  mkZncConf = confOpts: ''
+    // Also check http://en.znc.in/wiki/Configuration
+    
+    AnonIPLimit = 10
+    ConnectDelay = 5
+    # Add `LoadModule = x` for each module...
+    ${concatMapStrings (n: "LoadModule = ${n}\n") confOpts.modules}
+    MaxBufferSize = 500
+    ProtectWebSessions = true
+    SSLCertFile = ${cfg.dataDir}/znc.pem
+    ServerThrottle = 30
+    Skin = dark-clouds
+    StatusPrefix = *
+    Version = 1.2
+
+    <Listener listener0>
+            AllowIRC = true
+            AllowWeb = true
+            IPv4 = true
+            IPv6 = false
+            Port = ${if confOpts.useSSL then "+" else ""}${confOpts.port}
+            SSL = ${if confOpts.useSSL then "true" else "false"}
+    </Listener>
+    
+    <User ${confOpts.userName}>
+            Admin = true
+            Allow = *
+            AltNick = ${confOpts.nick}_
+            AppendTimestamp = false
+            AutoClearChanBuffer = false
+            Buffer = 150
+            ChanModes = +stn
+            DenyLoadMod = false
+            DenySetBindHost = false
+            Ident = ident
+            JoinTries = 10
+            MaxJoins = 0
+            MaxNetworks = 1
+            MultiClients = true
+            Nick = ${confOpts.nick}
+            PrependTimestamp = true
+            QuitMsg = Quit
+            RealName = ${confOpts.nick}
+            TimestampFormat = [%H:%M:%S]
+            
+            ${confOpts.passBlock}
+    </User>
+  '';
+
+  zncConfFile = pkgs.writeTextFile {
+    name = "znc.conf";
+    text = if cfg.zncConf != ""
+      then cfg.zncConf
+      else mkZncConf cfg.confOptions;
+  };
+
+in
+
+{
+
+  ###### Interface
+
+  options = {
+    services.znc = {
+      enable = mkOption {
+        default = false;
+        example = true;
+        type = types.bool;
+        description = ''
+          Enable a ZNC service for a user.
+        '';
+      };
+
+      user = mkOption {
+        default = "znc";
+        example = "john";
+        type = types.string;
+        description = ''
+          The name of an existing user account to use to own the ZNC server process.
+          If not specified, a default user will be created to own the process.
+        '';
+      };
+
+      dataDir = mkOption {
+        default = "/home/${cfg.user}/.znc";
+        example = "/home/john/.znc";
+        type = types.string; 
+        description = ''
+          The data directory. Used for configuration files and modules.
+        '';
+      };
+
+      zncConf = mkOption {
+        default = "";
+        example = "See: http://wiki.znc.in/Configuration";
+        type = types.string;
+        description = ''
+          The contents of the `znc.conf` file to use when creating it.
+          If specified, `confOptions` will be ignored, and this value, as-is, will be used.
+          If left empty, a conf file with default values will be used.
+          Recommended to generate with `znc --makeconf` command.
+        '';
+      };
+
+      confOptions = mkOption {
+        default = {};
+        example = {
+          modules = [ "log" ];
+          userName = "john";
+          nick = "johntron";
+        };
+        type = types.optionSet;
+        description = ''
+          Values to use when creating a `znc.conf` file.
+        '';
+        options = confOptions; 
+      };
+ 
+      mutable = mkOption {
+        default = false;
+        example = true;
+        type = types.bool;
+        description = ''
+          Indicates whether to allow the contents of the `dataDir` directory to be changed
+          by the user at run-time.
+          If true, modifications to the ZNC configuration after its initial creation are not 
+            overwritten by a NixOS system rebuild.
+          If false, the ZNC configuration is rebuilt by every system rebuild.
+          If the user wants to manage the ZNC service using the web admin interface, this value
+            should be set to true.
+        '';
+      };
+ 
+      extraFlags = mkOption {
+        default = "";
+        example = "--debug";
+        type = types.string;
+        description = ''
+          Extra flags to use when executing znc command.
+        '';
+      };
+    };
+  };
+
+
+  ###### Implementation
+
+  config = mkIf cfg.enable {
+
+    systemd.services."znc-${cfg.user}" = {
+      description = "ZNC Server of ${cfg.user}.";
+      wantedBy = [ "multi-user.target" ];
+      after = [ "network.service" ];
+      path = [ pkgs.znc ];
+      serviceConfig = {
+        User = "${cfg.user}";
+        Restart = "always";
+        ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
+        ExecStop   = "${pkgs.coreutils}/bin/kill -INT $MAINPID";
+      };
+      preStart = ''
+        ${pkgs.coreutils}/bin/mkdir -p ${cfg.dataDir}
+        ${pkgs.coreutils}/bin/chown ${cfg.user} ${cfg.dataDir} -R
+        ${pkgs.coreutils}/bin/mkdir -p ${cfg.dataDir}/configs
+
+        # If mutable, regenerate conf file every time.
+        ${optionalString (!cfg.mutable) ''
+          ${pkgs.coreutils}/echo "znc-${cfg.user} is set to be system-managed. Now deleting old znc.conf file to be regenerated."
+          ${pkgs.coreutils}/rm -f ${cfg.dataDir}/configs/znc.conf
+        ''}
+
+        # Ensure essential files exist.
+        if [[ ! -f ${cfg.dataDir}/configs/znc.conf ]]; then
+          ${pkgs.coreutils}/bin/echo "No znc.conf file found in ${cfg.dataDir}. Creating one now."
+          ${if (!cfg.mutable)
+            then "${pkgs.coreutils}/bin/ln --force -s ${zncConfFile} ${cfg.dataDir}/configs/znc.conf"
+            else ''
+              ${pkgs.coreutils}/bin/cp --no-clobber ${zncConfFile} ${cfg.dataDir}/configs/znc.conf
+              ${pkgs.coreutils}/bin/chmod u+rw ${cfg.dataDir}/configs/znc.conf
+              ${pkgs.coreutils}/bin/chown ${cfg.user} ${cfg.dataDir}/configs/znc.conf
+            ''}
+        fi
+
+        if [[ ! -f ${cfg.dataDir}/znc.pem ]]; then
+          ${pkgs.coreutils}/bin/echo "No znc.pem file found in ${cfg.dataDir}. Creating one now."
+          ${pkgs.znc}/bin/znc --makepem
+        fi
+      '';
+      script = "${pkgs.znc}/bin/znc --foreground --datadir ${cfg.dataDir} ${cfg.extraFlags}";
+    };
+
+    users.extraUsers = optional (cfg.user == defaultUser)
+      { name = defaultUser;
+        description = "ZNC server daemon owner";
+        group = defaultUser;
+        uid = config.ids.uids.znc;
+        createHome = true;
+        createUser = true;
+      };
+ 
+    users.extraGroups = optional (cfg.user == defaultUser)
+      { name = defaultUser;
+        gid = config.ids.gids.znc;
+        members = [ defaultUser ];
+      };
+
+  };
+}
diff --git a/nixos/modules/services/scheduling/cron.nix b/nixos/modules/services/scheduling/cron.nix
index 5da71b12dd76..9ce0bcbec7eb 100644
--- a/nixos/modules/services/scheduling/cron.nix
+++ b/nixos/modules/services/scheduling/cron.nix
@@ -15,7 +15,7 @@ let
         MAILTO="${config.services.cron.mailto}"
       ''}
       NIX_CONF_DIR=/etc/nix
-      ${pkgs.lib.concatStrings (map (job: job + "\n") config.services.cron.systemCronJobs)}
+      ${lib.concatStrings (map (job: job + "\n") config.services.cron.systemCronJobs)}
     '';
 
   # Vixie cron requires build-time configuration for the sendmail path.
diff --git a/nixos/modules/services/scheduling/fcron.nix b/nixos/modules/services/scheduling/fcron.nix
index 346a64f2c3cb..ade8c19329ca 100644
--- a/nixos/modules/services/scheduling/fcron.nix
+++ b/nixos/modules/services/scheduling/fcron.nix
@@ -17,7 +17,7 @@ let
         MAILTO="${config.services.cron.mailto}"
       ''}
       NIX_CONF_DIR=/etc/nix
-      ${pkgs.lib.concatStrings (map (job: job + "\n") config.services.cron.systemCronJobs)}
+      ${lib.concatStrings (map (job: job + "\n") config.services.cron.systemCronJobs)}
     '';
 
   allowdeny = target: users:
diff --git a/nixos/modules/services/security/frandom.nix b/nixos/modules/services/security/frandom.nix
index 9aae7b33a430..2d43d12e541d 100644
--- a/nixos/modules/services/security/frandom.nix
+++ b/nixos/modules/services/security/frandom.nix
@@ -1,4 +1,4 @@
-{pkgs, config, ...}:
+{lib, config, ...}:
 
 let kernel = config.boot.kernelPackages;
 in
@@ -9,9 +9,9 @@ in
 
   options = {
 
-    services.frandom.enable = pkgs.lib.mkOption {
+    services.frandom.enable = lib.mkOption {
       default = false;
-      type = pkgs.lib.types.bool;
+      type = lib.types.bool;
       description = ''
         enable the /dev/frandom device (a very fast random number generator)
       '';
@@ -22,7 +22,7 @@ in
 
   ###### implementation
 
-  config = pkgs.lib.mkIf config.services.frandom.enable {
+  config = lib.mkIf config.services.frandom.enable {
     boot.kernelModules = [ "frandom" ];
     boot.extraModulePackages = [ kernel.frandom ];
     services.udev.packages = [ kernel.frandom ];
diff --git a/nixos/modules/services/system/kerberos.nix b/nixos/modules/services/system/kerberos.nix
index 8fb5debd20e4..3a0171ca1b9b 100644
--- a/nixos/modules/services/system/kerberos.nix
+++ b/nixos/modules/services/system/kerberos.nix
@@ -1,8 +1,8 @@
-{pkgs, config, ...}:
+{pkgs, config, lib, ...}:
 
 let
 
-  inherit (pkgs.lib) mkOption mkIf singleton;
+  inherit (lib) mkOption mkIf singleton;
 
   inherit (pkgs) heimdal;
 
@@ -36,7 +36,7 @@ in
     environment.systemPackages = [ heimdal ];
 
     services.xinetd.enable = true;
-    services.xinetd.services = pkgs.lib.singleton
+    services.xinetd.services = lib.singleton
       { name = "kerberos-adm";
         flags = "REUSE NAMEINARGS";
         protocol = "tcp";
diff --git a/nixos/modules/services/system/nscd.nix b/nixos/modules/services/system/nscd.nix
index 1ac82064a1f7..5460e962ea2c 100644
--- a/nixos/modules/services/system/nscd.nix
+++ b/nixos/modules/services/system/nscd.nix
@@ -7,7 +7,7 @@ let
   nssModulesPath = config.system.nssModules.path;
   cfg = config.services.nscd;
 
-  inherit (pkgs.lib) singleton;
+  inherit (lib) singleton;
 
   cfgFile = pkgs.writeText "nscd.conf" cfg.config;
 
diff --git a/nixos/modules/services/system/uptimed.nix b/nixos/modules/services/system/uptimed.nix
index 61eecd5c9ba8..ab46c508914d 100644
--- a/nixos/modules/services/system/uptimed.nix
+++ b/nixos/modules/services/system/uptimed.nix
@@ -1,8 +1,8 @@
-{pkgs, config, ...}:
+{pkgs, config, lib, ...}:
 
 let
 
-  inherit (pkgs.lib) mkOption mkIf singleton;
+  inherit (lib) mkOption mkIf singleton;
 
   inherit (pkgs) uptimed;
 
diff --git a/nixos/modules/services/ttys/kmscon.nix b/nixos/modules/services/ttys/kmscon.nix
index 70555e5d8825..7783a1ada71d 100644
--- a/nixos/modules/services/ttys/kmscon.nix
+++ b/nixos/modules/services/ttys/kmscon.nix
@@ -1,6 +1,6 @@
-{ config, pkgs, ... }:
+{ config, pkgs, lib, ... }:
 let
-  inherit (pkgs.lib) mkOption types mkIf optionalString;
+  inherit (lib) mkOption types mkIf optionalString;
 
   cfg = config.services.kmscon;
 
diff --git a/nixos/modules/services/web-servers/apache-httpd/mediawiki.nix b/nixos/modules/services/web-servers/apache-httpd/mediawiki.nix
index 0693ca57814a..d562bc50c82f 100644
--- a/nixos/modules/services/web-servers/apache-httpd/mediawiki.nix
+++ b/nixos/modules/services/web-servers/apache-httpd/mediawiki.nix
@@ -72,11 +72,11 @@ let
 
   # Unpack Mediawiki and put the config file in its root directory.
   mediawikiRoot = pkgs.stdenv.mkDerivation rec {
-    name= "mediawiki-1.20.8";
+    name= "mediawiki-1.23.1";
 
     src = pkgs.fetchurl {
-      url = "http://download.wikimedia.org/mediawiki/1.20/${name}.tar.gz";
-      sha256 = "0yfmh5vnfbgpvicfqh7nh4hwdk4qbc6gfniv02vchkg5al0nn7ag";
+      url = "http://download.wikimedia.org/mediawiki/1.23/${name}.tar.gz";
+      sha256 = "07z5j8d988cdg4ml4n0vs9fwmj0p594ibbqdid16faxwqm52dkhl";
     };
 
     skins = config.skins;
@@ -93,9 +93,10 @@ let
         mkdir -p $out
         cp -r * $out
         cp ${mediawikiConfig} $out/LocalSettings.php
-        sed -i 's|/bin/bash|${pkgs.stdenv.shell}|' \
-          $out/maintenance/fuzz-tester.php \
-          $out/bin/ulimit.sh \
+        sed -i \
+        -e 's|/bin/bash|${pkgs.bash}/bin/bash|g' \
+        -e 's|/usr/bin/timeout|${pkgs.coreutils}/bin/timeout|g' \
+          $out/includes/limit.sh \
           $out/includes/GlobalFunctions.php
       '';
   };
diff --git a/nixos/modules/services/web-servers/apache-httpd/mercurial.nix b/nixos/modules/services/web-servers/apache-httpd/mercurial.nix
index 82da3330b00a..6dd91be00a73 100644
--- a/nixos/modules/services/web-servers/apache-httpd/mercurial.nix
+++ b/nixos/modules/services/web-servers/apache-httpd/mercurial.nix
@@ -1,8 +1,8 @@
-{ config, pkgs, serverInfo, ... }:
+{ config, pkgs, serverInfo, lib, ... }:
 
 let
   inherit (pkgs) mercurial;
-  inherit (pkgs.lib) mkOption;
+  inherit (lib) mkOption;
 
   urlPrefix = config.urlPrefix;
 
diff --git a/nixos/modules/services/web-servers/apache-httpd/tomcat-connector.nix b/nixos/modules/services/web-servers/apache-httpd/tomcat-connector.nix
index 1b754cf025eb..b2cd53ae55cd 100644
--- a/nixos/modules/services/web-servers/apache-httpd/tomcat-connector.nix
+++ b/nixos/modules/services/web-servers/apache-httpd/tomcat-connector.nix
@@ -1,7 +1,7 @@
-{ config, pkgs, serverInfo, ... }:
+{ config, pkgs, serverInfo, lib, ... }:
 
 let
-  extraWorkersProperties = pkgs.lib.optionalString (config ? extraWorkersProperties) config.extraWorkersProperties;
+  extraWorkersProperties = lib.optionalString (config ? extraWorkersProperties) config.extraWorkersProperties;
   
   workersProperties = pkgs.writeText "workers.properties" ''
 # Define list of workers that will be used
diff --git a/nixos/modules/services/x11/window-managers/openbox.nix b/nixos/modules/services/x11/window-managers/openbox.nix
index 46b1945d33e8..8fc759dda68a 100644
--- a/nixos/modules/services/x11/window-managers/openbox.nix
+++ b/nixos/modules/services/x11/window-managers/openbox.nix
@@ -1,7 +1,7 @@
-{pkgs, config, ...}:
+{lib, pkgs, config, ...}:
 
 let
-  inherit (pkgs.lib) mkOption mkIf;
+  inherit (lib) mkOption mkIf;
   cfg = config.services.xserver.windowManager.openbox;
 in
 
diff --git a/nixos/modules/services/x11/window-managers/xmonad.nix b/nixos/modules/services/x11/window-managers/xmonad.nix
index 87eff38a028a..74acfc219759 100644
--- a/nixos/modules/services/x11/window-managers/xmonad.nix
+++ b/nixos/modules/services/x11/window-managers/xmonad.nix
@@ -1,7 +1,7 @@
-{pkgs, config, ...}:
+{pkgs, lib, config, ...}:
 
 let
-  inherit (pkgs.lib) mkOption mkIf optionals literalExample;
+  inherit (lib) mkOption mkIf optionals literalExample;
   cfg = config.services.xserver.windowManager.xmonad;
   xmonadEnv = cfg.haskellPackages.ghcWithPackages(self: [
     self.xmonad
@@ -48,7 +48,7 @@ in
       enableContribAndExtras = mkOption {
         default = false;
         example = true;
-        type = pkgs.lib.types.bool;
+        type = lib.types.bool;
         description = "Enable xmonad-{contrib,extras} in Xmonad.";
       };
     };