{ config, pkgs, lib, ... }: with lib; let cfg = config.vuizvui.user.aszlig.system.kernel; generateKConf = exprs: let isNumber = c: elem c ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9"]; mkValue = val: if val == "" then "\"\"" else if val == "y" || val == "m" || val == "n" then val else if all isNumber (stringToCharacters val) then val else if substring 0 2 val == "0x" then val else "\"${val}\""; mkConfigLine = key: val: "${key}=${mkValue val}"; mkConf = cfg: concatStringsSep "\n" (mapAttrsToList mkConfigLine cfg); in pkgs.writeText "generated.kconf" (mkConf exprs + "\n"); mainlineKernel = { version = "4.7.0-rc7"; src = pkgs.fetchgit { url = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git; rev = "47ef4ad2684d380dd6d596140fb79395115c3950"; sha256 = "15b6fqfwyi3lh13qa7hz7x9za6r32cdaiww6labqn229vp8362ys"; }; }; in { options.vuizvui.user.aszlig.system.kernel = { enable = mkEnableOption "aszlig's custom kernel"; config = mkOption { type = types.attrsOf types.unspecified; default = {}; description = '' An attribute set of configuration options to use for building a custom kernel. ''; }; }; config = mkIf cfg.enable { boot = { kernelPatches = singleton pkgs.vuizvui.kernelPatches.bfqsched; kernelPackages = pkgs.linuxPackages_custom { inherit (mainlineKernel) version src; configfile = generateKConf cfg.config; }; }; }; }