commit bf4873eb012235b4d82cd79c4f508064ead301ab Author: Joao Porta <jpedro.porta@gmail.com> Date: Fri Jul 17 17:24:26 2026 -0300 wake on lan
72 lines
1.8 KiB
Nix
72 lines
1.8 KiB
Nix
{
|
|
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
|
|
];
|
|
};
|
|
}
|