{ stdenv

# required for gcc plugins
, gmp, libmpc, mpfr

# the base kernel
, kernel

, grsecPatch
, kernelPatches ? []

, localver ? "-grsec"
, modDirVersion ? "${kernel.version}${localver}"
, extraConfig ? ""
, ...
} @ args:

assert (kernel.version == grsecPatch.kver);

(kernel.override {
  inherit modDirVersion;
  # TODO: unique is a work-around
  kernelPatches = stdenv.lib.unique ([ grsecPatch ] ++ kernelPatches ++ (kernel.kernelPatches or []));
  extraConfig = ''
    GRKERNSEC y
    PAX y
    ${extraConfig}
  '';

  # Enabling grsecurity/PaX deselects several other options implicitly,
  # causing the configfile checker to fail (when it finds that options
  # expected to be enabled are not).
  ignoreConfigErrors = true;
}).overrideAttrs (attrs: {
  nativeBuildInputs = (stdenv.lib.chooseDevOutputs [ gmp libmpc mpfr ]) ++ (attrs.nativeBuildInputs or []);
  preConfigure = ''
    echo ${localver} >localversion-grsec
    ${attrs.preConfigure or ""}
  '';
})

{ stdenv
, lib
, overrideDerivation

# required for gcc plugins
, gmp, libmpc, mpfr

# the base kernel
, kernel

, grsecPatch
, kernelPatches ? []

, localver ? "-grsec"
, modDirVersion ? "${kernel.version}${localver}"
, extraConfig ? ""
, ...
} @ args:

assert (kernel.version == grsecPatch.kver);

overrideDerivation (kernel.override {
  inherit modDirVersion;
  kernelPatches = lib.unique ([ grsecPatch ] ++ kernelPatches ++ (kernel.kernelPatches or []));
  extraConfig = ''
    GRKERNSEC y
    PAX y
    ${extraConfig}
  '';
  ignoreConfigErrors = true;
}) (attrs: {
  nativeBuildInputs = (lib.chooseDevOutputs [ gmp libmpc mpfr ]) ++ (attrs.nativeBuildInputs or []);
  preConfigure = ''
    echo ${localver} >localversion-grsec
    ${attrs.preConfigure or ""}
  '';
})

Revert "grsecurity: overrideDerivation -> overrideAttrs"
Revert "grsecurity: overrideDerivation -> overrideAttrs"

This reverts commit 3d9017602b0f0dbe8e4c0706cda32e8f8b38311b.

This didn't quite work as I had expected ... While it seemed okay at
first, it fails to propagate all the attributes it used to (notably
features).  I'll revisit this later but reverting for now.
