anchor.diff:  
   let
   
  -  # Function to parse the config file to get the features supported
  -  readFeatures = config:
  +  # Function to parse the config file into a nix expression
  +  readConfig = configFile:
       let
  -      configAttrs = import "${runCommand "attrList.nix" {} ''
  -        grep -E -v '(^#|^$)' < ${config} | \
  -          sed 's/CONFIG_// ; s/=/ /' | \
  -          awk \
  -            'BEGIN { print "{" }
  -             END { print "}" }
  -             { printf "\"%s\" = '"'''"'%s'"'''"';\n", $1, $2 }' > $out
  +      configAttrs = import "${runCommand "config.nix" {} ''
  +        (. ${configFile}
  +        echo "{"
  +        for var in `set`; do
  +            if [[ "$var" =~ ^CONFIG_ ]]; then
  +                IFS="="
  +                set -- $var
  +                echo "\"$1\" = \"''${*:2}\";"
  +            fi
  +        done
  +        echo "}") > $out
         ''}";
  -      getValue = option:
  -        if hasAttr option configAttrs then getAttr option configAttrs else null;
   
  -      isYes = option: (getValue option) == "y";
  +      config = configAttrs // rec {
  +        attrName = attr: "CONFIG_" + attr;
  +
  +        isSet = attr: hasAttr (attrName attr) config;
  +
  +        getValue = attr: if isSet attr then getAttr (attrName attr) config else null;
  +
  +        isYes = attr: (isSet attr) && ((getValue attr) == "y");
  +
  +        isNo = attr: (isSet attr) && ((getValue attr) == "n");
  +
  +        isModule = attr: (isSet attr) && ((getValue attr) == "m");
  +
  +        isEnabled = attr: (isModule attr) || (isYes attr);
  +
  +        isDisabled = attr: (!(isSet attr)) || (isNo attr);
  +      };
       in
  -
  -    {
  -      modular = isYes "MODULES";
  -    };
  +      config;
   
   in
   
  
positive.code:     runHook preConfigure
      mkdir ../build
      make $makeFlags "''${makeFlagsArray[@]}" mrproper
      ln -sv ${config} ../build/.config
      make $makeFlags "''${makeFlagsArray[@]}" oldconfig
      rm ../build/.config.old
      runHook postConfigure
    '';
  
    buildNativeInputs = [ perl nettools kmod ];
  
    makeFlags = commonMakeFlags;
  
    meta = {
      description = "The Linux kernel";
  
negative.code:   # Any patches
    patches ? [],
    # The kernel .config file
    configfile,
    # Manually specified nixexpr representing the config
    # If unspecified, this will be autodetected from the .config
    config ? optionalAttrs allowImportFromDerivation (readConfig configfile),
    # Whether to utilize the controversial import-from-derivation feature to parse the config
    allowImportFromDerivation ? false
  }:
  
  let
    installkernel = writeTextFile { name = "installkernel"; executable=true; text = ''
      #!/bin/sh
      mkdir $4
      mv -v $2 $4
      mv -v $3 $4
    '';};
  
    isModular = config.isYes "MODULES";
  
    installsFirmware = (config.isEnabled "FW_LOADER") &&
      (isModular || (config.isNo "FIRMWARE_IN_KERNEL"));
  in
  
  stdenv.mkDerivation {
    name = "linux-${version}";
  
    enableParallelBuilding = true;
  
    passthru = {
      inherit version modDirVersion config;
    };
  
    inherit patches src;
  