at 23.11-pre 1.2 kB view raw
1{ config, pkgs, lib, ... }: let 2 3 cfg = config.boot.initrd.services.swraid; 4 5in { 6 7 options.boot.initrd.services.swraid = { 8 enable = (lib.mkEnableOption (lib.mdDoc "swraid support using mdadm")) // { 9 visible = false; # only has effect when the new stage 1 is in place 10 }; 11 12 mdadmConf = lib.mkOption { 13 description = lib.mdDoc "Contents of {file}`/etc/mdadm.conf` in initrd."; 14 type = lib.types.lines; 15 default = ""; 16 }; 17 }; 18 19 config = { 20 environment.systemPackages = [ pkgs.mdadm ]; 21 22 services.udev.packages = [ pkgs.mdadm ]; 23 24 systemd.packages = [ pkgs.mdadm ]; 25 26 boot.initrd.availableKernelModules = lib.mkIf (config.boot.initrd.systemd.enable -> cfg.enable) [ "md_mod" "raid0" "raid1" "raid10" "raid456" ]; 27 28 boot.initrd.extraUdevRulesCommands = lib.mkIf (!config.boot.initrd.systemd.enable) '' 29 cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/ 30 ''; 31 32 boot.initrd.systemd = lib.mkIf cfg.enable { 33 contents."/etc/mdadm.conf" = lib.mkIf (cfg.mdadmConf != "") { 34 text = cfg.mdadmConf; 35 }; 36 37 packages = [ pkgs.mdadm ]; 38 initrdBin = [ pkgs.mdadm ]; 39 }; 40 41 boot.initrd.services.udev.packages = lib.mkIf cfg.enable [ pkgs.mdadm ]; 42 }; 43}