Keep the number of exposed inputs from the top-level flake small by
splitting the development environment into its own flake.
The .envrc uses `--override-input srvos path:$PATH` so that the srvos
path always get re-calculated on reload, but not recorded. Since the
hash of srvos is stored inside of srvos, it would infinitely update
otherwise.
We introduce a few new mechanism in this commit:
flake-parts is used to wire things together.
./all-parts.nix looks for and imports all flake-part.nix files. This
makes it easier to co-locate the parts next to the targeted code.
We introduce a `modules` flake output to hold all modules. For example
instead of `nixosModules`, use `modules.nixos`.
In ./nixos we enforce a 1:1 mapping between the module filenames and the
attribute. For example ./nixos/mixins/telegraf.nix will translate to
`modules.nixos.mixins-telegraf`.
flake-compat ensures that the default.nix and flake.nix are in sync and have the same outputs.