diff --git a/configuration/config.nix b/configuration/config.nix
index 705b44407af3..46b9b1e76b8c 100644
--- a/configuration/config.nix
+++ b/configuration/config.nix
@@ -15,13 +15,14 @@ rec {
# its default value if it's not defined.
get = name:
let
- sameName = lib.filter (opt: lib.eqLists opt.name name) declarations;
+ decl =
+ lib.findSingle (decl: lib.eqLists decl.name name)
+ (abort ("Undeclared option `" + printName name + "'."))
+ declarations;
default =
- if sameName == []
- then abort ("Undeclared option `" + printName name + "'.")
- else if !builtins.head sameName ? default
+ if !decl ? default
then abort ("Option `" + printName name + "' has no default.")
- else (builtins.head sameName).default;
+ else decl.default;
in lib.getAttr name default config;
printName = name: lib.concatStrings (lib.intersperse "." name);
diff --git a/configuration/options.nix b/configuration/options.nix
index cd7f2a929d88..ec4bc85b9c48 100644
--- a/configuration/options.nix
+++ b/configuration/options.nix
@@ -13,17 +13,8 @@
default = false;
description = "
Whether to find the root device automatically by searching for a
- device with the right label. If this option is off, then
- must be set.
- ";
- }
-
-
- {
- name = ["boot" "rootDevice"];
- example = "/dev/hda1";
- description = "
- The device to be mounted on / at system startup.
+ device with the right label. If this option is off, then a root
+ file system must be specified using .
";
}
@@ -150,17 +141,31 @@
{
- name = ["filesystems" "mountPoints"];
+ name = ["filesystems"];
example = [
- { device = "/dev/hda2";
- mountPoint = "/";
+ { mountPoint = "/";
+ device = "/dev/hda1";
+ }
+ { mountPoint = "/data";
+ device = "/dev/hda2";
+ filesystem = "ext3";
+ autoMount = true;
+ options = "data=journal";
}
];
description = "
- The file systems to be mounted by NixOS. It must include an
- entry for the root directory (mountPoint =
- \"/\"). This is the file system on which NixOS is (to
- be) installed..
+ The file systems to be mounted. It must include an entry for
+ the root directory (mountPoint = \"/\").
+ Each entry in the list is an attribute set with the following
+ fields: mountPoint,
+ device, filesystem (a file
+ system type recognised by mount; defaults to
+ \"auto\"), autoMount (a
+ boolean indicating whether the file system is mounted
+ automatically; defaults to true) and
+ options (the mount options passed to
+ mount using the flag;
+ defaults to \"\").
";
}
diff --git a/configuration/system.nix b/configuration/system.nix
index 133c12b935c2..090ecc9b3a54 100644
--- a/configuration/system.nix
+++ b/configuration/system.nix
@@ -73,7 +73,10 @@ rec {
inherit (pkgsDiet) module_init_tools;
inherit extraUtils;
autoDetectRootDevice = config.get ["boot" "autoDetectRootDevice"];
- rootDevice = config.get ["boot" "rootDevice"];
+ rootDevice =
+ (pkgs.library.findSingle (fs: fs.mountPoint == "/")
+ (abort "No root mount point declared.")
+ (config.get ["filesystems"])).device;
rootLabel = config.get ["boot" "rootLabel"];
inherit stage2Init;
modulesDir = modulesClosure;
diff --git a/instances/examples/basic.nix b/instances/examples/basic.nix
index eedfa5f74b6f..f77b8101bb70 100644
--- a/instances/examples/basic.nix
+++ b/instances/examples/basic.nix
@@ -1,10 +1,16 @@
{
boot = {
autoDetectRootDevice = false;
- rootDevice = "/dev/hda1";
readOnlyRoot = false;
grubDevice = "/dev/hda";
};
+
+ filesystems = [
+ { mountPoint = "/";
+ device = "/dev/hda1";
+ }
+ ];
+
services = {
sshd = {
enable = true;