Squashed commit of the following:

commit bf4873eb012235b4d82cd79c4f508064ead301ab
Author: Joao Porta <jpedro.porta@gmail.com>
Date:   Fri Jul 17 17:24:26 2026 -0300

    wake on lan
This commit is contained in:
2026-07-17 17:25:16 -03:00
parent 85d5fa453a
commit cdbad8910c
8 changed files with 243 additions and 10 deletions
+71
View File
@@ -0,0 +1,71 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.custom.wake-on-lan;
iface = "enp14s0";
mac = "d8:43:ae:5a:ae:12";
wake-jpporta-nixos = pkgs.writeShellScriptBin "wake-jpporta-nixos" ''
exec ${pkgs.wakeonlan}/bin/wakeonlan -i "''${1:-255.255.255.255}" ${mac}
'';
in
{
options.custom.wake-on-lan = {
enable = lib.mkEnableOption "Wake-on-LAN on the wired NIC (magic-packet mode)";
};
config = lib.mkIf cfg.enable {
# Keep `wol g` applied on the NIC after the link is up (boot path).
systemd.services."wol-${iface}" = {
description = "Enable Wake-on-LAN (magic packet) on ${iface}";
wantedBy = [ "multi-user.target" ];
wants = [
"network-online.target"
"NetworkManager.service"
];
after = [
"network-online.target"
"NetworkManager.service"
"NetworkManager-wait-online.service"
];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${pkgs.ethtool}/bin/ethtool -s ${iface} wol g";
};
};
# Re-apply `wol g` after resume from suspend / hibernate so NetworkManager
# cannot silently drop the WOL flag on link renegotiation.
systemd.services."wol-${iface}-resume" = {
description = "Re-apply Wake-on-LAN (magic packet) on ${iface} after resume";
wantedBy = [
"suspend.target"
"hibernate.target"
"hybrid-sleep.target"
];
after = [
"systemd-suspend.service"
"systemd-hibernate.service"
"systemd-hybrid-sleep.service"
];
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.ethtool}/bin/ethtool -s ${iface} wol g";
};
};
environment.systemPackages = [
pkgs.ethtool
pkgs.wakeonlan
wake-jpporta-nixos
];
};
}