{ modulesPath, tree, config, pkgs, lib, ... }: let secrets = config.services.secrets.secrets; in { imports = with tree; [ users.root profiles.base profiles.sshd profiles.nix-gc ./hardware.nix ./networking.nix ./secrets.nix ]; environment.etc."mdadm.conf".text = '' HOMEHOST PROGRAM /run/current-system/sw/bin/mdadm-notify ''; # some taken from https://github.com/hunleyd/mdadm_notify/blob/master/mdadm_notify environment.systemPackages = [ (pkgs.writeShellScriptBin "mdadm-notify" '' event=$1 md_device=$2 device=$3 case $event in DegradedArray) msg="$md_device is running in DEGRADED MODE" ;; DeviceDisappeared) msg="$md_device has DISAPPEARED" ;; Fail) msg="$md_device had an ACTIVE component FAIL ($device)" ;; FailSpare) msg="$md_device had a SPARE component FAIL during rebuild ($device)" ;; MoveSpare) msg="SPARE device $device has been MOVED to a new array ($md_device)" ;; NewArray) # silence NewArray exit 0 msg="$md_device has APPEARED" ;; Rebuild??) msg="$md_device REBUILD is now `echo $event|sed 's/Rebuild//'`% complete" ;; RebuildFinished) msg="REBUILD of $md_device is COMPLETE or ABORTED" ;; RebuildStarted) msg="RECONSTRUCTION of $md_device has STARTED" ;; SpareActive) msg="$device has become an ACTIVE COMPONENT of $md_device" ;; SparesMissing) msg="$md_device is MISSING one or more SPARE devices" ;; TestMessage) msg="TEST MESSAGE generated for $md_device" ;; esac printf "Subject: BuildBox mdadm: $event\n\n$msg" | msmtp "all@owo.monster" '') ]; programs.msmtp = { enable = true; accounts = { default = { auth = true; tls = true; protocol = "smtp"; host = "mail.owo.monster"; port = 587; from = "system@owo.monster"; user = "system@owo.monster"; passwordeval = "cat ${secrets.system_mail_password.path}"; }; }; }; systemd.services.mdadm-monitor = { requires = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; path = with pkgs; [ mdadm msmtp ]; script = '' exec mdadm --monitor --scan ''; serviceConfig = { Restart = "always"; StartLimitAction = "none"; }; }; home-manager.users.root = { imports = with tree; [ home.base home.dev.small ]; home.stateVersion = "22.05"; }; networking.hostName = "buildbox"; time.timeZone = "Europe/London"; system.stateVersion = "22.05"; }