grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / config / power-management.nix
blob524a23edab64e799b723498cdb21e4d3a0a964ff
1 { config, lib, ... }:
2 let
4   cfg = config.powerManagement;
6 in
10   ###### interface
12   options = {
14     powerManagement = {
16       enable = lib.mkOption {
17         type = lib.types.bool;
18         default = true;
19         description = ''
20             Whether to enable power management.  This includes support
21             for suspend-to-RAM and powersave features on laptops.
22           '';
23       };
25       resumeCommands = lib.mkOption {
26         type = lib.types.lines;
27         default = "";
28         description = "Commands executed after the system resumes from suspend-to-RAM.";
29       };
31       powerUpCommands = lib.mkOption {
32         type = lib.types.lines;
33         default = "";
34         example = lib.literalExpression ''
35           "''${pkgs.hdparm}/sbin/hdparm -B 255 /dev/sda"
36         '';
37         description = ''
38             Commands executed when the machine powers up.  That is,
39             they're executed both when the system first boots and when
40             it resumes from suspend or hibernation.
41           '';
42       };
44       powerDownCommands = lib.mkOption {
45         type = lib.types.lines;
46         default = "";
47         example = lib.literalExpression ''
48           "''${pkgs.hdparm}/sbin/hdparm -B 255 /dev/sda"
49         '';
50         description = ''
51             Commands executed when the machine powers down.  That is,
52             they're executed both when the system shuts down and when
53             it goes to suspend or hibernation.
54           '';
55       };
57     };
59   };
62   ###### implementation
64   config = lib.mkIf cfg.enable {
66     systemd.targets.post-resume = {
67       description = "Post-Resume Actions";
68       requires = [ "post-resume.service" ];
69       after = [ "post-resume.service" ];
70       wantedBy = [ "sleep.target" ];
71       unitConfig.StopWhenUnneeded = true;
72     };
74     # Service executed before suspending/hibernating.
75     systemd.services.pre-sleep =
76       { description = "Pre-Sleep Actions";
77         wantedBy = [ "sleep.target" ];
78         before = [ "sleep.target" ];
79         script =
80           ''
81             ${cfg.powerDownCommands}
82           '';
83         serviceConfig.Type = "oneshot";
84       };
86     systemd.services.post-resume =
87       { description = "Post-Resume Actions";
88         after = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" "suspend-then-hibernate.target" ];
89         script =
90           ''
91             /run/current-system/systemd/bin/systemctl try-restart --no-block post-resume.target
92             ${cfg.resumeCommands}
93             ${cfg.powerUpCommands}
94           '';
95         serviceConfig.Type = "oneshot";
96       };
98   };