anchor.diff:                type = types.int;
                 default = 1;
                 description = ''
  -                Something at indicates how fast the machine is relative to an
  -                arbitrary norm???
  -              '';
  -            };
  -            mandatoryFeatures = mkOptions {
  -              type = types.listOf types.string;
  +                The relative speed of this builder. This is an arbitrary integer
  +                that indicates the speed of this builder, relative to other
  +                builders. Higher is faster.
  +              '';
  +            };
  +            mandatoryFeatures = mkOption {
  +              type = types.listOf types.str;
                 default = [];
  -              decriptions = ''
  -                A list of features derivations built with this remote are
  -                required to opt into using. (See the documentation on Nix itself
  -                for what those features are.)
  -              '';
  -            };
  -            supportedFeatures = mkOptions {
  -              type = types.listOf types.string;
  +              example = [ "big-parallel" ];
  +              description = ''
  +                A list of features mandatory for this builder. The builder will
  +                be ignored for derivations that don't require all features in
  +                this list. All mandatory features are automatically included in
  +                <varname>supportedFeatures</varname>.
  +              '';
  +            };
  +            supportedFeatures = mkOption {
  +              type = types.listOf types.str;
                 default = [];
  -              decriptions = ''
  -                A list of features derivations built with this remote may choose
  -                to use or not. (See the documentation on Nix itself for what
  -                those features are.)
  -              '';
  -            };
  -          };
  -          config = {
  -            assertions = [{
  -              assertion = config.system != null || config.systems != null;
  -              message = ''
  -                At least one system type (via <varname>system</varname> or
  -                <varname>systems</varname>) must be set for every build machine.
  -              '';
  -            }];
  +              example = [ "kvm" "big-parallel" ];
  +              description = ''
  +                A list of features supported by this builder. The builder will
  +                be ignored for derivations that require features not in this
  +                list.
  +              '';
  +            };
             };
           }));
           default = [];
  -        example = literalExample ''
  -          [ { hostName = "voila.labs.cs.uu.nl";
  -              sshUser = "nix";
  -              sshKey = "/root/.ssh/id_buildfarm";
  -              system = "powerpc-darwin";
  -              maxJobs = 1;
  -            }
  -            { hostName = "linux64.example.org";
  -              sshUser = "buildfarm";
  -              sshKey = "/root/.ssh/id_buildfarm";
  -              system = "x86_64-linux";
  -              maxJobs = 2;
  -              speedFactor = 2;
  -              supportedFeatures = [ "kvm" ];
  -              mandatoryFeatures = [ "perf" ];
  -            }
  -          ]
  -        '';
  -        description = ''
  -          This option lists the machines to be used if distributed
  -          builds are enabled (see
  -          <option>nix.distributedBuilds</option>).  Nix will perform
  -          derivations on those machines via SSH by copying the inputs
  -          to the Nix store on the remote machine, starting the build,
  -          then copying the output back to the local Nix store.  Each
  -          element of the list should be an attribute set containing
  -          the machine's host name (<varname>hostname</varname>), the
  -          user name to be used for the SSH connection
  -          (<varname>sshUser</varname>), the Nix system type
  -          (<varname>system</varname>, e.g.,
  -          <literal>"i686-linux"</literal>), the maximum number of
  -          jobs to be run in parallel on that machine
  -          (<varname>maxJobs</varname>), the path to the SSH private
  -          key to be used to connect (<varname>sshKey</varname>), a
  -          list of supported features of the machine
  -          (<varname>supportedFeatures</varname>) and a list of
  -          mandatory features of the machine
  -          (<varname>mandatoryFeatures</varname>). The SSH private key
  -          should not have a passphrase, and the corresponding public
  -          key should be added to
  -          <filename>~<replaceable>sshUser</replaceable>/authorized_keys</filename>
  -          on the remote machine.
  +        description = ''
  +          This option lists the machines to be used if distributed builds are
  +          enabled (see <option>nix.distributedBuilds</option>).
  +          Nix will perform derivations on those machines via SSH by copying the
  +          inputs to the Nix store on the remote machine, starting the build,
  +          then copying the output back to the local Nix store.
           '';
         };
   
  
positive.code:       };
  
        buildMachines = mkOption {
          type = types.loaOf (submodule ({ config }: {
            options = {
              sshUser = mkOption {
                type = types.nullOr types.string;
                default = null;
                description = ''
                  The user as who to SSH to the build machine.
                '';
              };
              hostName = mkOption {
                type = types.string;
                description = ''
                  The hostname of the build machine.
                '';
              };
              system = mkOption {
                type = types.string;
                default = null;
                description = ''
                  The system type the build machine can execute derivations on.
                  null if multiple are supported.
                '';
              };
              systems = mkOption {
                type = types.listOf types.string;
                default = [];
                description = ''
                  The system types the build machine can execute derivations on.
                '';
              };
              sshKey = mkOption {
                type = types.string;
                default = "-";
                description = ''
                  The path to the SSH private key with which to authenticate with
                  the build machine. <literal>"-"</literal> indicates falling back
                  on defaults.
                '';
              };
              maxJobs = mkOption {
  
negative.code:           concatMapStrings (machine:
              "${if machine.sshUser != null then "${machine.sshUser}@" else ""}${machine.hostName} "
              + (if machine.system != null then machine.system else concatStringsSep "," machine.systems)
              + " ${if machine.sshKey != null then machine.sshKey else "-"} ${toString machine.maxJobs} "
              + toString (machine.speedFactor)
              + " "
              + concatStringsSep "," (machine.mandatoryFeatures ++ machine.supportedFeatures)
  