nixos/modules/wakeup.nix

53 lines
1.3 KiB
Nix
Raw Normal View History

{
pkgs,
lib,
config,
...
}: let
cfg = config.wakeup;
2022-04-23 18:02:17 +02:00
mkScript = type: dev: let
expected =
if type == "enable"
then "enabled"
else "disabled";
in
pkgs.writeShellApplication {
name = "wakeup-${type}-${dev}";
runtimeInputs = [pkgs.coreutils];
text = ''
# See if our goal has already been reached and exit if so
if grep "${dev}" /proc/acpi/wakeup | grep ${expected}; then
printf "Wakeup settings are ok.\n"
exit 0
else
printf "Fixing /proc/acpi/wakeup.\n"
echo "${dev}" > /proc/acpi/wakeup
fi
# Verify our actions or fail!
grep "${dev}" /proc/acpi/wakeup | grep ${expected}
'';
};
createServiceName = type: dev: "wakeup-${type}-${dev}";
createService = type: dev: {
description = "${type} ${dev} wakeup setting";
serviceConfig.Type = "oneshot";
2022-04-23 18:02:17 +02:00
serviceConfig.ExecStart = "${mkScript type dev}/bin/wakeup-${type}-${dev}";
wantedBy = ["default.target"];
};
in {
2022-04-23 18:02:17 +02:00
options.wakeup = lib.mkOption {
type = with lib.types; attrsOf (enum ["enable" "disable"]);
default = {};
example = {GPP0 = "disable";};
};
2022-04-23 18:02:17 +02:00
config.systemd.services =
lib.attrsets.mapAttrs' (dev: type: {
name = createServiceName type dev;
value = createService type dev;
})
cfg;
}