hd-idle.nix 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. { lib, pkgs, ... }:
  2. let
  3. disks = [
  4. "/dev/disk/by-id/ata-ST8000VN002-2ZM188_WPV023WG"
  5. "/dev/disk/by-id/ata-ST8000VN002-2ZM188_WPV07RMA"
  6. "/dev/disk/by-id/ata-ST8000VN002-2ZM188_WPV020CG"
  7. ];
  8. mkArgString = disks:
  9. lib.concatStringsSep " " (lib.map (disk: "-a ${disk} -i 600") disks);
  10. args = mkArgString disks;
  11. in
  12. {
  13. environment.systemPackages = [ pkgs.hd-idle pkgs.fatrace ];
  14. systemd.services.hd-idle = {
  15. description = "hd-idle - spin down idle hard disks";
  16. after = [
  17. "suspend.target"
  18. "hibernate.target"
  19. "hybrid-sleep.target"
  20. "suspend-then-hibernate.target"
  21. ];
  22. wantedBy = [ "multi-user.target" ];
  23. serviceConfig = {
  24. Type = "simple";
  25. ExecStart = "${lib.getExe pkgs.hd-idle} ${args}";
  26. Restart = "always";
  27. };
  28. };
  29. systemd.services.fatrace = {
  30. description = "File access tracing service";
  31. after = [ "local-fs.target" ];
  32. wants = [ "local-fs.target" ];
  33. serviceConfig = {
  34. ExecStart = "${lib.getExe pkgs.fatrace} --timestamp /mnt/storage";
  35. Restart = "always";
  36. User = "root";
  37. };
  38. };
  39. }