about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lib/default.nix17
-rw-r--r--machines/aszlig/dnyarri-kconf.nix2
-rw-r--r--machines/aszlig/dnyarri.nix119
-rw-r--r--machines/aszlig/mmrnmhrm.nix21
-rw-r--r--modules/module-list.nix1
-rw-r--r--modules/user/aszlig/system/kernel.nix53
6 files changed, 111 insertions, 102 deletions
diff --git a/lib/default.nix b/lib/default.nix
deleted file mode 100644
index 95f4f39f..00000000
--- a/lib/default.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-with import <nixpkgs> {};
-
-with pkgs.lib;
-
-{
-  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);
-}
diff --git a/machines/aszlig/dnyarri-kconf.nix b/machines/aszlig/dnyarri-kconf.nix
index 368c155f..7e176541 100644
--- a/machines/aszlig/dnyarri-kconf.nix
+++ b/machines/aszlig/dnyarri-kconf.nix
@@ -745,8 +745,6 @@
   "CONFIG_DEVTMPFS_MOUNT" = "y";
   "CONFIG_FW_LOADER" = "y";
   "CONFIG_FIRMWARE_IN_KERNEL" = "y";
-  "CONFIG_EXTRA_FIRMWARE" = "@extra_firmware@";
-  "CONFIG_EXTRA_FIRMWARE_DIR" = "@builtin_firmware@";
   "CONFIG_ALLOW_DEV_COREDUMP" = "y";
   "CONFIG_GENERIC_CPU_AUTOPROBE" = "y";
   "CONFIG_DMA_SHARED_BUFFER" = "y";
diff --git a/machines/aszlig/dnyarri.nix b/machines/aszlig/dnyarri.nix
index 89753820..9eb3a65e 100644
--- a/machines/aszlig/dnyarri.nix
+++ b/machines/aszlig/dnyarri.nix
@@ -1,18 +1,49 @@
-{ pkgs, ... }:
+{ pkgs, lib, ... }:
 
-with pkgs.lib;
-with import ../../lib;
+with lib;
 
 {
   vuizvui.user.aszlig.profiles.workstation.enable = true;
 
   nix.maxJobs = 8;
 
-  boot = let
-    patch51Name = "patch51.fw";
-    kernelParams = [ "snd-hda-intel.patch=${patch51Name}" ];
+  boot = {
+    kernelParams = [ "snd-hda-intel.patch=patch51.fw" ];
 
-    patch51 = pkgs.writeText patch51Name ''
+    initrd = {
+      mdadmConf = ''
+        ARRAY /dev/md0 metadata=1.2 UUID=f5e9de04:89efc509:4e184fcc:166b0b67
+        ARRAY /dev/md1 metadata=0.90 UUID=b85aa8be:cea0faf2:7abcbee8:eeae037b
+      '';
+      luks.devices = [
+        { name = "system_crypt";
+          device = "/dev/md1";
+          preLVM = true;
+        }
+      ];
+    };
+
+    loader.grub.devices = [
+      "/dev/disk/by-id/ata-ST31500541AS_5XW0AMNH"
+      "/dev/disk/by-id/ata-ST31500541AS_6XW0M217"
+    ];
+  };
+
+  nixpkgs.config.virtualbox.enableExtensionPack = true;
+
+  vuizvui.user.aszlig.system.kernel.enable = true;
+  vuizvui.user.aszlig.system.kernel.config = let
+    radeonFw = [
+      "radeon/R600_rlc.bin"
+      "radeon/R700_rlc.bin"
+      "radeon/RV710_uvd.bin"
+      "radeon/RV710_smc.bin"
+      "radeon/RV730_smc.bin"
+    ];
+
+    extraFw = radeonFw ++ [ "patch51.fw" ];
+
+    patch51 = pkgs.writeText "patch51.fw" ''
       [codec]
       0x10ec0889 0x80860033 2
 
@@ -36,69 +67,21 @@ with import ../../lib;
       auto
     '';
 
-    radeonFW = [
-      "radeon/R600_rlc.bin"
-      "radeon/R700_rlc.bin"
-      "radeon/RV710_uvd.bin"
-      "radeon/RV710_smc.bin"
-      "radeon/RV730_smc.bin"
-    ];
-
-    linuxVuizvui = pkgs.buildLinux {
-      inherit (pkgs.kernelSourceVuizvui) version src;
-
-      kernelPatches = singleton pkgs.vuizvuiKernelPatches.bfqsched;
-      configfile = pkgs.substituteAll {
-        name = "vuizvui-with-firmware.kconf";
-        src = generateKConf (import ./dnyarri-kconf.nix);
-
-        extra_firmware = concatStringsSep " " (radeonFW ++ [
-          "patch51.fw"
-        ]);
-
-        builtin_firmware = pkgs.stdenv.mkDerivation {
-          name = "builtin-firmware";
-          buildCommand = let
-            firmwareBasePath = "${pkgs.firmwareLinuxNonfree}/lib/firmware";
-          in ''
-            mkdir -p "$out/radeon"
-            ${concatMapStrings (x: ''
-              cp -Lv -t "$out/radeon" "${firmwareBasePath}/${x}";
-            '') radeonFW}
-
-            cp "${patch51}" "$out/${patch51Name}"
-          '';
-        };
-      };
-      allowImportFromDerivation = true; # XXX
-    };
-  in rec {
-    kernelPackages = let
-      kpkgs = pkgs.recurseIntoAttrs
-        (pkgs.linuxPackagesFor linuxVuizvui kernelPackages);
-      virtualbox = kpkgs.virtualbox.override {
-        enableExtensionPack = true;
-      };
-    in pkgs.recurseIntoAttrs (kpkgs // { inherit virtualbox; });
-    inherit kernelParams;
-
-    initrd = {
-      mdadmConf = ''
-        ARRAY /dev/md0 metadata=1.2 UUID=f5e9de04:89efc509:4e184fcc:166b0b67
-        ARRAY /dev/md1 metadata=0.90 UUID=b85aa8be:cea0faf2:7abcbee8:eeae037b
+  in import ./dnyarri-kconf.nix // {
+    CONFIG_EXTRA_FIRMWARE = concatStringsSep " " extraFw;
+    CONFIG_EXTRA_FIRMWARE_DIR = pkgs.stdenv.mkDerivation {
+      name = "builtin-firmware";
+      buildCommand = let
+        firmwareBasePath = "${pkgs.firmwareLinuxNonfree}/lib/firmware";
+      in ''
+        mkdir -p "$out/radeon"
+        ${concatMapStrings (x: ''
+          cp -Lv -t "$out/radeon" "${firmwareBasePath}/${x}"
+        '') radeonFw}
+
+        cp "${patch51}" "$out/patch51.fw"
       '';
-      luks.devices = [
-        { name = "system_crypt";
-          device = "/dev/md1";
-          preLVM = true;
-        }
-      ];
     };
-
-    loader.grub.devices = [
-      "/dev/disk/by-id/ata-ST31500541AS_5XW0AMNH"
-      "/dev/disk/by-id/ata-ST31500541AS_6XW0M217"
-    ];
   };
 
   networking.hostName = "dnyarri";
diff --git a/machines/aszlig/mmrnmhrm.nix b/machines/aszlig/mmrnmhrm.nix
index e46a723b..11ec69f6 100644
--- a/machines/aszlig/mmrnmhrm.nix
+++ b/machines/aszlig/mmrnmhrm.nix
@@ -1,31 +1,22 @@
-{ pkgs, ... }:
+{ pkgs, lib, ... }:
 
-with pkgs.lib;
-with import ../../lib;
+with lib;
 
 {
   vuizvui.user.aszlig.profiles.workstation.enable = true;
 
   nix.maxJobs = 2;
 
-  boot = let
-    linuxVuizvui = pkgs.buildLinux {
-      inherit (pkgs.kernelSourceVuizvui) version src;
-
-      kernelPatches = singleton pkgs.vuizvuiKernelPatches.bfqsched;
-      configfile = generateKConf (import ./mmrnmhrm-kconf.nix);
-      allowImportFromDerivation = true;
-    };
-  in rec {
-    kernelPackages = pkgs.recurseIntoAttrs
-      (pkgs.linuxPackagesFor linuxVuizvui kernelPackages);
-
+  boot = {
     loader.grub.devices = map (i: "/dev/disk/by-id/${i}") [
       "ata-WDC_WD10EZEX-00BN5A0_WD-WCC3F5756955"
       "ata-WDC_WD10EZEX-00BN5A0_WD-WCC3F5790537"
     ];
   };
 
+  vuizvui.user.aszlig.system.kernel.enable = true;
+  vuizvui.user.aszlig.system.kernel.config = import ./mmrnmhrm-kconf.nix;
+
   networking.hostName = "mmrnmhrm";
 
   fileSystems = {
diff --git a/modules/module-list.nix b/modules/module-list.nix
index dbcb08a7..2cc3235f 100644
--- a/modules/module-list.nix
+++ b/modules/module-list.nix
@@ -7,4 +7,5 @@
   ./user/aszlig/services/i3
   ./user/aszlig/services/slim
   ./user/aszlig/services/vlock
+  ./user/aszlig/system/kernel.nix
 ]
diff --git a/modules/user/aszlig/system/kernel.nix b/modules/user/aszlig/system/kernel.nix
new file mode 100644
index 00000000..4a7ba609
--- /dev/null
+++ b/modules/user/aszlig/system/kernel.nix
@@ -0,0 +1,53 @@
+{ 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");
+
+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 = let
+      linuxVuizvui = pkgs.buildLinux {
+        inherit (pkgs.kernelSourceVuizvui) version src;
+
+        kernelPatches = singleton pkgs.vuizvuiKernelPatches.bfqsched;
+        configfile = generateKConf cfg.config;
+        allowImportFromDerivation = true;
+      };
+    in rec {
+      kernelPackages = pkgs.recurseIntoAttrs
+        (pkgs.linuxPackagesFor linuxVuizvui kernelPackages);
+
+      loader.grub.devices = map (i: "/dev/disk/by-id/${i}") [
+        "ata-WDC_WD10EZEX-00BN5A0_WD-WCC3F5756955"
+        "ata-WDC_WD10EZEX-00BN5A0_WD-WCC3F5790537"
+      ];
+    };
+  };
+}