···11# Nixie
2233-NixOS PXE boot install with
44-[Wake-on-LAN](https://en.wikipedia.org/wiki/Wake-on-LAN),
55-[Pixiecore](https://github.com/danderson/netboot/tree/main/pixiecore) and
66-[nixos-anywhere](https://nix-community.github.io/nixos-anywhere).
77-Currently, only `x86_64-linux` is supported.
33+> [!CAUTION]
44+> This project is still a work in progress and will not be ready for use until
55+> most of the [features](#features) below are completed.
66+77+Easy NixOS PXE boot install.
8899## Features
1010+1111+Currently, only `x86_64-linux` is supported.
10121113- [x] Simple, declarative JSON configuration
1214- [x] Build a custom NixOS installer from a flake
1313-- [x] Built-in PXE server to serve netboot components from the custom installer
1414-- [ ] Host status check with IP discovery
1515-- [ ] Remote power-on with Wake-on-LAN
1515+- [x] Built-in PXE server based on [Pixiecore](https://github.com/danderson/netboot/tree/main/pixiecore) to serve netboot components from the custom installer
1616- [ ] Custom agent and API to manage the installation process
1717-- [ ] Install NixOS from a flake using nixos-anywhere
1818-- [x] Stateless
1717+- [ ] Install NixOS from a flake using [nixos-anywhere](https://nix-community.github.io/nixos-anywhere)
1818+- [ ] Remote power-on with [Wake-on-LAN](https://en.wikipedia.org/wiki/Wake-on-LAN)
1919+- [ ] Host status check with IP discovery
2020+- [x] Stateless and ephemeral [^1]
2121+- [ ] Fast, under 2 minutes to install NixOS from empty hard drives [^2]
2222+2323+[^1]: No pre-configured PXE server is required to install other machines - you
2424+ only need to run Nixie on your laptop or workstation. This solves the
2525+ "first machine in the data center" problem: in bare-metal setups with
2626+ persistent PXE servers, you would otherwise need to automate the installation
2727+ of the PXE server itself.
2828+[^2]: Using the provided examples with a warm cache. Factors that affect the
2929+ speed include whether the configuration has been cached in the Nix store,
3030+ the size of the NixOS configuration, the network speed, etc.
19312032## Usage
2133···9210493105 Note over Nixie: Return when all machines are installed
94106```
107107+108108+## Acknowledgements
109109+110110+This project is a rewrite of my previous ephemeral PXE server implementation in
111111+my [khuedoan/homelab](https://github.com/khuedoan/homelab) repository, which
112112+used a stateless PXE server in Docker with Ansible templating and targeted
113113+generic Linux distributions. It has been rebuilt from the ground up for NixOS,
114114+offering a more integrated and robust experience in this project. All credits
115115+from the previous implementation are also referenced here, as similar knowledge
116116+and concepts apply.
117117+118118+- Ephemeral PXE server [^1] inspired by [Minimal First Machine in the DC](https://speakerdeck.com/amcguign/minimal-first-machine-in-the-dc)
119119+- [NixOS netboot with pixiecore](https://nixos.wiki/wiki/Netboot)
120120+- [The Pixiecore library](https://github.com/danderson/netboot/tree/main/pixiecore)
121121+- Custom agent for the installation process inspired by [OpenStack ironic-python-agent](https://opendev.org/openstack/ironic-python-agent) and [Tinkerbell Worker](https://tinkerbell.org/docs/services/tink-worker)