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/3f2566689
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<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>
 |