modules: wakeonwlan: setup simple wakeonwlan
This commit is contained in:
parent
996ba1cdda
commit
e0336d1367
|
@ -2,5 +2,6 @@
|
|||
{
|
||||
imports = [
|
||||
./sddm.nix
|
||||
./wakeonwlan.nix
|
||||
];
|
||||
}
|
||||
|
|
63
modules/wakeonwlan.nix
Normal file
63
modules/wakeonwlan.nix
Normal file
|
@ -0,0 +1,63 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.my.wakeonwlan;
|
||||
|
||||
mkWowlanService = name: cfg:
|
||||
nameValuePair "wowlan-${name}" {
|
||||
description = "Enable WoWLAN for interface ${name}";
|
||||
requires = [ "network.target" ];
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
};
|
||||
script = ''
|
||||
${pkgs.iw}/bin/iw ${name} wowlan enable ${concatStringsSep " " cfg.methods}
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
options.my.wakeonwlan = {
|
||||
interfaces = mkOption {
|
||||
default = { };
|
||||
description = "Wireless interfaces where you want to enable WoWLAN";
|
||||
example = literalExample ''
|
||||
{
|
||||
phy0.methods = [
|
||||
"magic-packet"
|
||||
"disconnect"
|
||||
"gtk-rekey-failure"
|
||||
"eap-identity-request"
|
||||
"rfkill-release"
|
||||
];
|
||||
phy2.methods = [ "any" ];
|
||||
}
|
||||
'';
|
||||
type = types.attrsOf (
|
||||
types.submodule {
|
||||
options = {
|
||||
methods = mkOption {
|
||||
type = types.listOf (types.enum [
|
||||
"4way-handshake"
|
||||
"any"
|
||||
"disconnect"
|
||||
"eap-identity-request"
|
||||
"gtk-rekey-failure"
|
||||
"magic-packet"
|
||||
"rfkill-release"
|
||||
]);
|
||||
description = "Wake-On-WiFiLan methods for this interface.";
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (cfg.interfaces != {}) {
|
||||
systemd.services = mapAttrs' mkWowlanService cfg.interfaces;
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue