Compare commits

...

2 commits

3 changed files with 72 additions and 0 deletions

View file

@ -103,6 +103,14 @@ in
}; };
my.displayManager.sddm.enable = true; my.displayManager.sddm.enable = true;
my.wakeonwlan.interfaces.phy0.methods = [
"magic-packet"
"disconnect"
"gtk-rekey-failure"
"eap-identity-request"
"rfkill-release"
];
services.udev.packages = with pkgs; [ services.udev.packages = with pkgs; [
packages.kaleidoscope-udev-rules packages.kaleidoscope-udev-rules
]; ];

View file

@ -2,5 +2,6 @@
{ {
imports = [ imports = [
./sddm.nix ./sddm.nix
./wakeonwlan.nix
]; ];
} }

63
modules/wakeonwlan.nix Normal file
View 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;
};
}