diff options
Diffstat (limited to 'nixos/doc/manual/from_md/development/replace-modules.section.xml')
-rw-r--r-- | nixos/doc/manual/from_md/development/replace-modules.section.xml | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/nixos/doc/manual/from_md/development/replace-modules.section.xml b/nixos/doc/manual/from_md/development/replace-modules.section.xml new file mode 100644 index 00000000000..cf8a39ba844 --- /dev/null +++ b/nixos/doc/manual/from_md/development/replace-modules.section.xml @@ -0,0 +1,70 @@ +<section xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-replace-modules"> + <title>Replace Modules</title> + <para> + Modules that are imported can also be disabled. The option + declarations, config implementation and the imports 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 language="bash"> +{ config, lib, pkgs, ... }: + +{ + disabledModules = [ "services/databases/postgresql.nix" ]; + + imports = + [ # Use postgresql service from nixos-unstable channel. + # sudo nix-channel --add https://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 language="bash"> +{ 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> |