about summary refs log tree commit diff
path: root/nixpkgs/nixos/doc/manual/development/replace-modules.xml
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/doc/manual/development/replace-modules.xml')
-rw-r--r--nixpkgs/nixos/doc/manual/development/replace-modules.xml79
1 files changed, 79 insertions, 0 deletions
diff --git a/nixpkgs/nixos/doc/manual/development/replace-modules.xml b/nixpkgs/nixos/doc/manual/development/replace-modules.xml
new file mode 100644
index 000000000000..7b103c36d907
--- /dev/null
+++ b/nixpkgs/nixos/doc/manual/development/replace-modules.xml
@@ -0,0 +1,79 @@
+<section xmlns="http://docbook.org/ns/docbook"
+        xmlns:xlink="http://www.w3.org/1999/xlink"
+        xmlns:xi="http://www.w3.org/2001/XInclude"
+        version="5.0"
+        xml:id="sec-replace-modules">
+ <title>Replace Modules</title>
+
+ <para>
+  Modules that are imported can also be disabled. The option declarations and
+  config implementation of a disabled module will be ignored, allowing another
+  to take it's place. This can be used to import a set of modules from another
+  channel while keeping the rest of the system on a stable release.
+ </para>
+
+ <para>
+  <literal>disabledModules</literal> is a top level attribute like
+  <literal>imports</literal>, <literal>options</literal> and
+  <literal>config</literal>. It contains a list of modules that will be
+  disabled. This can either be the full path to the module or a string with the
+  filename relative to the modules path (eg. &lt;nixpkgs/nixos/modules&gt; for
+  nixos).
+ </para>
+
+ <para>
+  This example will replace the existing postgresql module with the version
+  defined in the nixos-unstable channel while keeping the rest of the modules
+  and packages from the original nixos channel. This only overrides the module
+  definition, this won't use postgresql from nixos-unstable unless explicitly
+  configured to do so.
+ </para>
+
+<programlisting>
+{ config, lib, pkgs, ... }:
+
+{
+  disabledModules = [ "services/databases/postgresql.nix" ];
+
+  imports =
+    [ # Use postgresql service from nixos-unstable channel.
+      # sudo nix-channel --add http://nixos.org/channels/nixos-unstable nixos-unstable
+      &lt;nixos-unstable/nixos/modules/services/databases/postgresql.nix&gt;
+    ];
+
+  services.postgresql.enable = true;
+}
+</programlisting>
+
+ <para>
+  This example shows how to define a custom module as a replacement for an
+  existing module. Importing this module will disable the original module
+  without having to know it's implementation details.
+ </para>
+
+<programlisting>
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+  cfg = config.programs.man;
+in
+
+{
+  disabledModules = [ "services/programs/man.nix" ];
+
+  options = {
+    programs.man.enable = mkOption {
+      type = types.bool;
+      default = true;
+      description = "Whether to enable manual pages.";
+    };
+  };
+
+  config = mkIf cfg.enabled {
+    warnings = [ "disabled manpages for production deployments." ];
+  };
+}
+</programlisting>
+</section>