{ pkgs, ... }:

{

  environment.systemPackages = [ pkgs.mdadm ];

  services.udev.packages = [ pkgs.mdadm ];

  boot.initrd.availableKernelModules = [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];

  boot.initrd.extraUdevRulesCommands = ''
    cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
  '';

  systemd.services.mdadm-shutdown = {
    wantedBy = [ "final.target"];
    after = [ "umount.target" ];

    unitConfig = {
      DefaultDependencies = false;
    };

    serviceConfig = {
      Type = "oneshot";
      ExecStart = ''${pkgs.mdadm}/bin/mdadm --wait-clean --scan'';
    };
  };

  systemd.services."mdmon@" = {
    description = "MD Metadata Monitor on /dev/%I";

    unitConfig.DefaultDependencies = false;

    serviceConfig = {
      Type = "forking";
      Environment = "IMSM_NO_PLATFORM=1";
      ExecStart = ''${pkgs.mdadm}/bin/mdmon --offroot --takeover %I'';
      KillMode = "none";
    };
  };

  systemd.services."mdadm-grow-continue@" = {
    description = "Manage MD Reshape on /dev/%I";

    unitConfig.DefaultDependencies = false;

    serviceConfig = {
      ExecStart = ''${pkgs.mdadm}/bin/mdadm --grow --continue /dev/%I'';
      StandardInput = "null";
      StandardOutput = "null";
      StandardError = "null";
      KillMode = "none";
    };
  };
 
}