2021-07-03 16:19:26 +02:00
|
|
|
|
<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
|
2022-12-21 21:24:48 +01:00
|
|
|
|
module will be ignored, allowing another to take its place. This can
|
|
|
|
|
be used to import a set of modules from another channel while
|
2021-07-03 16:19:26 +02:00
|
|
|
|
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
|
2022-12-21 21:24:48 +01:00
|
|
|
|
only overrides the module definition, this won’t use postgresql from
|
2021-07-03 16:19:26 +02:00
|
|
|
|
nixos-unstable unless explicitly configured to do so.
|
|
|
|
|
</para>
|
2022-12-21 22:00:27 +01:00
|
|
|
|
<programlisting language="nix">
|
2021-07-03 16:19:26 +02:00
|
|
|
|
{ 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
|
2022-12-21 21:24:48 +01:00
|
|
|
|
original module without having to know its implementation details.
|
2021-07-03 16:19:26 +02:00
|
|
|
|
</para>
|
2022-12-21 22:00:27 +01:00
|
|
|
|
<programlisting language="nix">
|
2021-07-03 16:19:26 +02:00
|
|
|
|
{ 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>
|