{ pkgs, lib, config, inputs, modulesPath, ... }@args:
let
  pixiecore = config.services.pixiecore;
  nixos = import ../minimal.nix
    (args // {
      modules = [ (modulesPath + "/installer/netboot/netboot-minimal.nix") ];
    });
  build = nixos.config.system.build;
in
{
  services.pixiecore = {
    enable = true;
    mode = "boot";
    debug = true;
    dhcpNoBind = false;
    port = 64172;
    statusPort = 64172;
    kernel = "${build.kernel}/bzImage";
    initrd = "${build.netbootRamdisk}/initrd";
    cmdLine = "init=${build.toplevel}/init loglevel=4";
    extraArguments = [];
  };
  networking.nftables.ruleset = ''
    table inet filter {
      chain input-lan {
        udp dport 67 counter accept comment "Pixiecore/DHCP"
        udp dport 69 counter accept comment "Pixiecore/TFTP"
        udp dport 4011 counter accept comment "Pixiecore/ProxyDHCP"
        tcp dport ${toString pixiecore.port} counter accept comment "Pixiecore"
        tcp dport ${toString pixiecore.statusPort} counter accept comment "Pixiecore/status"
      }
      chain output-lan {
      }
    }
  '';
}