NixOS on Turris

Hello to all Turris users.

I want to present you with an alternative Linux distribution for Turris Mox and Omnia. The router functionality is very early in development, but I managed to get both Omnia and Mox working with NixOS.

Why NixOS? OpenWrt and Turris OS in proxy are user-friendly (I know but compared to NixOS…), but once you start deploying a few of them, you find it is simple to get their configuration out of sync. There are solutions for that, such as Ansible. NixOS is even more potent than Ansible as it not only manages the system but it ships and deploys it at the same time. With Turris running NixOS you can manage your network gear the same way as your servers.

NixTurris sources repository and NixTurris basic documentation

I highly suggest reading not only the documentation that I wrote in the NixTurris repository but also the NixOS configuration itself, as the Nix configuration language you need to use NixTurris requires some practice to understand and fully use. Remember to read the major todos for the NixTurris as it covers features you are most like going to miss.

What NixTurris has and TOS not? Nix allows you to build configurations for multiple Turris routers (as well as other boards and PCs) from the same Nix expression on the powerful system and copy it over SSH to the device (see how I use it here) NixTurris ships with Linux 6.0 for Turris Omnia and Mox and a more comprehensive range of drivers. Nixpkgs provides a lot of packages that are not available on OpenWrt (be aware that they might not build on arm).

Is this production ready? That depends on your use case. Turris are routers, and NixTurris can provide simple router functionality, but some more work has to be done before multiple networks can be used. I successfully use it on Turris Moxes and one Omnia serving as Wi-Fi APs, but I still haven’t deployed it to my edge router (my Omnia routers).

Disclaimer: You might know me as one of the Turris developers, but I moved on from the Turris team. NixTurris is not the official firmware nor a Turris project.


I expect that MOX will have a significant advantage here, as NixOS supports aarch64 much better (and provides natively built binaries for huge amount of packages). The future Omnia will combine that with lots of RAM, so I have even higher hopes for that, as it might comfortably “self-host”.

@vcunat you are right about armv7. I had to do some tweaks to get it working. Some issues are caused by just not working cross-compilation in some cases (this applies to both architectures almost the same way). The second and most prevalent issue is that many software no longer runs tests in 32bit platforms, and although the software works, the tests do not. Those are all those “disable check” overrides.

I had a hard time initially getting it to Omnia due to the state of the armv7l support in NixOS and kernel issues, but in the end, it ain’t such a big issue. It only takes some time to compile.