This is based on a prototype Nicolas B. Pierron worked on during a discussion we had at FOSDEM. A new version with a workaround for problems of the reverted original. Discussion: https://github.com/NixOS/nixpkgs/commit/3f2566689wip/yesman
parent
bb9a37a2a5
commit
d88721e440
@ -0,0 +1,5 @@ |
||||
{ lib, ... }: |
||||
|
||||
{ |
||||
disabledModules = [ ./declare-enable.nix ]; |
||||
} |
@ -0,0 +1,5 @@ |
||||
{ lib, ... }: |
||||
|
||||
{ |
||||
disabledModules = [ ./define-enable.nix ]; |
||||
} |
@ -0,0 +1,5 @@ |
||||
{ lib, ... }: |
||||
|
||||
{ |
||||
disabledModules = [ "define-enable.nix" "declare-enable.nix" ]; |
||||
} |
@ -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> |
Loading…
Reference in new issue