diff options
Diffstat (limited to 'nixos/doc/manual/development/replace-modules.xml')
-rw-r--r-- | nixos/doc/manual/development/replace-modules.xml | 75 |
1 files changed, 75 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 00000000000..cc0539ec510 --- /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> |