anchor.diff:  
   {
   
  -  require = [
  -    options
  -  ];
  -
  -  services = {
  -    extraJobs = [{
  -      name = "udev";
  -      
  -      job = ''
  -        start on startup
  -        stop on shutdown
  -
  -        env UDEV_CONFIG_FILE=${conf}
  -
  -        start script
  +  ###### interface
  +  
  +  options = {
  +
  +    boot.hardwareScan = mkOption {
  +      default = true;
  +      description = ''
  +        Whether to try to load kernel modules for all detected hardware.
  +        Usually this does a good job of providing you with the modules
  +        you need, but sometimes it can crash the system or cause other
  +        nasty effects.  If the hardware scan is turned on, it can be
  +        disabled at boot time by adding the <literal>safemode</literal>
  +        parameter to the kernel command line.
  +      '';
  +    };
  +  
  +    services.udev = {
  +
  +      addFirmware = mkOption {
  +        default = [];
  +        example = ["/mnt/big-storage/firmware/"];
  +        description = ''
  +          To specify firmware that is not too spread to ensure 
  +          a package, or have an interactive process of extraction
  +          and cannot be redistributed.
  +        '';
  +        merge = pkgs.lib.mergeListOption;
  +      };
  +
  +      addUdevPkgs = mkOption {
  +        default = [];
  +        description = ''
  +          List of packages containing <command>udev</command> rules.
  +          All files found in
  +          <filename><replaceable>pkg</replaceable>/udev/rules.d</filename>
  +          will be included.
  +        '';
  +        merge = pkgs.lib.mergeListOption;
  +      };
  +
  +      extraRules = mkOption {
  +        default = "";
  +        example = ''
  +          KERNEL=="eth*", ATTR{address}=="00:1D:60:B9:6D:4F", NAME="my_fast_network_card"
  +        '';
  +        description = ''
  +          Additional <command>udev</command> rules. They'll be written
  +          into file <filename>10-local.rules</filename>. Thus they are
  +          read before all other rules.
  +        '';
  +      };
  +
  +      sndMode = mkOption {
  +        default = "0600";
  +        example = "0666";
  +        description = ''
  +          Permissions for sound devices, in case you have multiple
  +          logged in users or if the devices belong to root for some
  +          reason.
  +        '';
  +      };
  +        
  +    };
  +    
  +  };
  +  
  +
  +  ###### implementation
  +
  +  config = {
  +
  +    jobs = singleton
  +      { name = "udev";
  +
  +        startOn = "startup";
  +        stopOn = "shutdown";
  +
  +        environment = { UDEV_CONFIG_FILE = conf; };
  +
  +        preStart =
  +          ''
               echo "" > /proc/sys/kernel/hotplug
   
               # Get rid of possible old udev processes.
  
positive.code:             done
  
              initctl emit new-devices
          end script
  
          respawn ${udev}/sbin/udevd
        '';
  
        passthru = {inherit udevRules;};
      }];
    };
  }
  
negative.code:   };
  
    firmwareDirs = config.services.udev.addFirmware;
    
    extraUdevPkgs = config.services.udev.addUdevPkgs
      ++ pkgs.lib.optional (cfg.extraRules != "")
        (pkgs.writeTextFile {
  