LumiGuide develops and maintains bicycle and car parking guidance systems that are deployed in various cities in the Netherlands and abroad. To run this system a number of different machines are needed: image analysis servers deployed locally in facilities, central web-servers and support servers in data centers, embedded machines like Raspberry Pi's and ARM FPGA's to power our various displays in facilities and on the streets. Finally our engineers have workstation to write our software. All these machines need to be developed, tested, provisioned, configured, installed and rolled back (in case we make a mistake). Since we don't have a dedicated sys-admin we rely on automation to do most of these tasks. We use the Nix ecosystem of tools to help us with that. I will talk about how we've structured our mono-repository, how we make sure each engineer uses the exact same version of nixpkgs and the exact same NixOS configuration, how we override our Haskell packages, how we use Continuous Integration wit hydra and how we deploy our machines using nixops. Finally I will also talk about the things that we don't like about the Nix ecosystem. |