diff --git a/lib/modules.nix b/lib/modules.nix
index de9cfc637ae..4eee41306cd 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -20,8 +20,7 @@ rec {
, prefix ? []
, # This should only be used for special arguments that need to be evaluated
# when resolving module structure (like in imports). For everything else,
- # there's _module.args. If specialArgs.modulesPath is defined it will be
- # used as the base path for disabledModules.
+ # there's _module.args.
specialArgs ? {}
, # This would be remove in the future, Prefer _module.args option instead.
args ? {}
@@ -59,7 +58,10 @@ rec {
closed = closeModules (modules ++ [ internalModule ]) ({ inherit config options; lib = import ./.; } // specialArgs);
- options = mergeModules prefix (filterModules (specialArgs.modulesPath or "") closed);
+ # Note: the list of modules is reversed to maintain backward
+ # compatibility with the old module system. Not sure if this is
+ # the most sensible policy.
+ options = mergeModules prefix (reverseList closed);
# Traverse options and extract the option values into the final
# config set. At the same time, check whether all option
@@ -85,16 +87,6 @@ rec {
result = { inherit options config; };
in result;
-
- # Filter disabled modules. Modules can be disabled allowing
- # their implementation to be replaced.
- filterModules = modulesPath: modules:
- let
- moduleKey = m: if isString m then toString modulesPath + "/" + m else toString m;
- disabledKeys = map moduleKey (concatMap (m: m.disabledModules) modules);
- in
- filter (m: !(elem m.key disabledKeys)) modules;
-
/* Close a set of modules under the ‘imports’ relation. */
closeModules = modules: args:
let
@@ -119,13 +111,12 @@ rec {
else {};
in
if m ? config || m ? options then
- let badAttrs = removeAttrs m ["_file" "key" "disabledModules" "imports" "options" "config" "meta"]; in
+ let badAttrs = removeAttrs m ["imports" "options" "config" "key" "_file" "meta"]; in
if badAttrs != {} then
throw "Module `${key}' has an unsupported attribute `${head (attrNames badAttrs)}'. This is caused by assignments to the top-level attributes `config' or `options'."
else
{ file = m._file or file;
key = toString m.key or key;
- disabledModules = m.disabledModules or [];
imports = m.imports or [];
options = m.options or {};
config = mkMerge [ (m.config or {}) metaSet ];
@@ -133,10 +124,9 @@ rec {
else
{ file = m._file or file;
key = toString m.key or key;
- disabledModules = m.disabledModules or [];
imports = m.require or [] ++ m.imports or [];
options = {};
- config = mkMerge [ (removeAttrs m ["_file" "key" "disabledModules" "require" "imports"]) metaSet ];
+ config = mkMerge [ (removeAttrs m ["key" "_file" "require" "imports"]) metaSet ];
};
applyIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh
index ba0c67fb7d4..8b476a5d3dc 100755
--- a/lib/tests/modules.sh
+++ b/lib/tests/modules.sh
@@ -99,14 +99,6 @@ checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-if-foo-enabl
checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-foo-if-enable.nix
checkConfigOutput 'true' "$@" ./define-enable.nix ./define-loaOfSub-foo-enable-if.nix
-# Check disabledModules with config definitions and option declarations.
-set -- config.enable ./define-enable.nix ./declare-enable.nix
-checkConfigOutput "true" "$@"
-checkConfigOutput "false" "$@" ./disable-define-enable.nix
-checkConfigError "The option .*enable.* defined in .* does not exist" "$@" ./disable-declare-enable.nix
-checkConfigError "attribute .*enable.* in selection path .*config.enable.* not found" "$@" ./disable-define-enable.nix ./disable-declare-enable.nix
-checkConfigError "attribute .*enable.* in selection path .*config.enable.* not found" "$@" ./disable-enable-modules.nix
-
# Check _module.args.
set -- config.enable ./declare-enable.nix ./define-enable-with-custom-arg.nix
checkConfigError 'while evaluating the module argument .*custom.* in .*define-enable-with-custom-arg.nix.*:' "$@"
diff --git a/lib/tests/modules/default.nix b/lib/tests/modules/default.nix
index 5b094710419..c5ce9cb3e3b 100644
--- a/lib/tests/modules/default.nix
+++ b/lib/tests/modules/default.nix
@@ -3,6 +3,5 @@
{
inherit (lib.evalModules {
inherit modules;
- specialArgs.modulesPath = ./.;
}) config options;
}
diff --git a/lib/tests/modules/disable-declare-enable.nix b/lib/tests/modules/disable-declare-enable.nix
deleted file mode 100644
index a373ee7e550..00000000000
--- a/lib/tests/modules/disable-declare-enable.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ lib, ... }:
-
-{
- disabledModules = [ ./declare-enable.nix ];
-}
diff --git a/lib/tests/modules/disable-define-enable.nix b/lib/tests/modules/disable-define-enable.nix
deleted file mode 100644
index 0d84a7c3cb6..00000000000
--- a/lib/tests/modules/disable-define-enable.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ lib, ... }:
-
-{
- disabledModules = [ ./define-enable.nix ];
-}
diff --git a/lib/tests/modules/disable-enable-modules.nix b/lib/tests/modules/disable-enable-modules.nix
deleted file mode 100644
index c325f4e0743..00000000000
--- a/lib/tests/modules/disable-enable-modules.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ lib, ... }:
-
-{
- disabledModules = [ "define-enable.nix" "declare-enable.nix" ];
-}
diff --git a/nixos/doc/manual/development/replace-modules.xml b/nixos/doc/manual/development/replace-modules.xml
deleted file mode 100644
index cc0539ec510..00000000000
--- a/nixos/doc/manual/development/replace-modules.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-Replace Modules
-
-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.
-disabledModules is a top level attribute like
- imports, options and
- config. 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).
-
-
-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.
-
-
-{ 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;
-}
-
-
-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.
-
-
-{ 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." ];
- };
-}
-
-
-
diff --git a/nixos/doc/manual/development/writing-modules.xml b/nixos/doc/manual/development/writing-modules.xml
index 5bdcad5ceb5..ef6920160e6 100644
--- a/nixos/doc/manual/development/writing-modules.xml
+++ b/nixos/doc/manual/development/writing-modules.xml
@@ -179,6 +179,5 @@ in {
-
diff --git a/nixos/doc/manual/release-notes/rl-1703.xml b/nixos/doc/manual/release-notes/rl-1703.xml
index cea8b93b075..fda46217144 100644
--- a/nixos/doc/manual/release-notes/rl-1703.xml
+++ b/nixos/doc/manual/release-notes/rl-1703.xml
@@ -261,16 +261,6 @@ following incompatible changes:
-
-
- Modules can now be disabled by using
- disabledModules, 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.
-
-
-
Python 2.7, 3.5 and 3.6 are now built deterministically and 3.4 mostly.