grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / hardware / freefall.nix
blobfe017bb17f7e4a7f8b507054cb9bdb2d69f8156a
1 { config, lib, pkgs, utils, ... }:
2 let
4   cfg = config.services.freefall;
6 in {
8   options.services.freefall = {
10     enable = lib.mkOption {
11       type = lib.types.bool;
12       default = false;
13       description = ''
14         Whether to protect HP/Dell laptop hard drives (not SSDs) in free fall.
15       '';
16     };
18     package = lib.mkPackageOption pkgs "freefall" { };
20     devices = lib.mkOption {
21       type = lib.types.listOf lib.types.str;
22       default = [ "/dev/sda" ];
23       description = ''
24         Device paths to all internal spinning hard drives.
25       '';
26     };
28   };
30   config = let
32     mkService = dev:
33       assert dev != "";
34       let dev' = utils.escapeSystemdPath dev; in
35       lib.nameValuePair "freefall-${dev'}" {
36         description = "Free-fall protection for ${dev}";
37         after = [ "${dev'}.device" ];
38         wantedBy = [ "${dev'}.device" ];
39         serviceConfig = {
40           ExecStart = "${cfg.package}/bin/freefall ${dev}";
41           Restart = "on-failure";
42           Type = "forking";
43         };
44       };
46   in lib.mkIf cfg.enable {
48     environment.systemPackages = [ cfg.package ];
50     systemd.services = builtins.listToAttrs (map mkService cfg.devices);
52   };