{ config, service_configs, lib, ... }: let walletAddress = lib.strings.trim (builtins.readFile ../secrets/xmrig-wallet); in { imports = [ (lib.serviceMountWithZpool "p2pool" service_configs.zpool_hdds [ service_configs.p2pool.dataDir ]) (lib.serviceFilePerms "p2pool" [ "Z ${service_configs.p2pool.dataDir} 0700 p2pool p2pool" ]) ]; services.p2pool = { enable = true; dataDir = service_configs.p2pool.dataDir; walletAddress = walletAddress; sidechain = "mini"; host = "127.0.0.1"; rpcPort = service_configs.ports.monero_rpc; zmqPort = service_configs.ports.monero_zmq; extraArgs = [ "--stratum 0.0.0.0:${builtins.toString service_configs.ports.p2pool_stratum}" ]; }; # Ensure p2pool starts after monero is ready systemd.services.p2pool = { after = [ "monero.service" ]; wants = [ "monero.service" ]; }; # Stop p2pool on UPS battery to conserve power services.apcupsd.hooks = lib.mkIf config.services.apcupsd.enable { onbattery = "systemctl stop p2pool"; offbattery = "systemctl start p2pool"; }; networking.firewall.allowedTCPPorts = [ service_configs.ports.p2pool_p2p ]; }