diff options
author | Daiderd Jordan <daiderd@gmail.com> | 2017-02-14 23:18:44 +0100 |
---|---|---|
committer | Nicolas B. Pierron <nicolas.b.pierron@gmail.com> | 2017-02-28 00:14:48 +0100 |
commit | 3f2566689d14f1d7778d55ca807d1dad2f4695d1 (patch) | |
tree | 22129406dc4fa63df482c1ab1fbbeb6075eaf3ff /nixos/doc/manual/development | |
parent | 3c9fbfbe7f16ffbd21309d6a7dabc3fb197b5ffe (diff) | |
download | nixlib-3f2566689d14f1d7778d55ca807d1dad2f4695d1.tar nixlib-3f2566689d14f1d7778d55ca807d1dad2f4695d1.tar.gz nixlib-3f2566689d14f1d7778d55ca807d1dad2f4695d1.tar.bz2 nixlib-3f2566689d14f1d7778d55ca807d1dad2f4695d1.tar.lz nixlib-3f2566689d14f1d7778d55ca807d1dad2f4695d1.tar.xz nixlib-3f2566689d14f1d7778d55ca807d1dad2f4695d1.tar.zst nixlib-3f2566689d14f1d7778d55ca807d1dad2f4695d1.zip |
modules: add support for module replacement with disabledModules
This is based on a prototype Nicolas B. Pierron worked on during a discussion we had at FOSDEM.
Diffstat (limited to 'nixos/doc/manual/development')
-rw-r--r-- | nixos/doc/manual/development/replace-modules.xml | 75 | ||||
-rw-r--r-- | nixos/doc/manual/development/writing-modules.xml | 1 |
2 files changed, 76 insertions, 0 deletions
diff --git a/nixos/doc/manual/development/replace-modules.xml b/nixos/doc/manual/development/replace-modules.xml new file mode 100644 index 000000000000..cc0539ec5109 --- /dev/null +++ b/nixos/doc/manual/development/replace-modules.xml @@ -0,0 +1,75 @@ +<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. <nixpkgs/nixos/modules> 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 + <nixos-unstable/nixos/modules/services/databases/postgresql.nix> + ]; + + 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> diff --git a/nixos/doc/manual/development/writing-modules.xml b/nixos/doc/manual/development/writing-modules.xml index ef6920160e6d..5bdcad5ceb57 100644 --- a/nixos/doc/manual/development/writing-modules.xml +++ b/nixos/doc/manual/development/writing-modules.xml @@ -179,5 +179,6 @@ in { <xi:include href="option-types.xml" /> <xi:include href="option-def.xml" /> <xi:include href="meta-attributes.xml" /> +<xi:include href="replace-modules.xml" /> </chapter> |