I’ve been using NixOS at home for several months now, and I think I’m getting close to convincing my employer to take it on as well, which will be excellent both for us and for Nix. I think I need a bit of advice from the gurus here though to help my case.
For background, my employer has a set of very large codebases, organized as a few monorepos (plus a huge number of scattered micro repos); we are thinking that a good fit for the builds of that will be Bazel, to give us all the caching, autofixing, cross language goodness. However that does nothing for the control of the runtime, or for deployment/distribution; plus quite a lot seeps into the hermetic builds. Hence Nix, which solves this side of life extremely nicely. Then further, we’ll want to use a decent IDE with built in syntax highlighting, jumping to definition/declaration, refactoring, etc etc - let’s say CLion as an example.
The question is how best to get all these tools to play with each other nicely? Both Bazel and Nix will want to orchestrate the build and control dependency versions; CLion will need to read the Bazel BUILD/WORKSPACE files (which should be fine, I know they’re working on that) and the nix definitions, understanding how they play together. Basically I want everything to be smooth as silk, and to just work out of the box, integrated all the way up the development chain, with all the beautiful features that you guys have written. Oh and this all needs to work on Windows as well, since we have end-user UI apps there. I’m figuring that WSL will be my saviour there as then I’ll be able to use Nix everywhere, but please let me know if I’m being overly optimistic…
Note that this whole thing will be basically from scratch (ported across from a current bit-of-a-mess-but-works), so we have a great deal of scope to get it right from the beginning. We are willing to entertain solutions that require real work, as long as the end result is stable and sustainable. Please help me get it right!
Thanks in advance for your help, I know I’m asking a lot.