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}