services-flake
provides declarative, composable, and reproducible services for Nix development environment, as a process-compose-flake module (based on flake-parts). Enabling users to have NixOS-like service on MacOS and Linux.
With services-flake
, we aim to solve the following problems:
- Run external services like databases, Redis, etc. natively across platforms.
- Enable users to configure multiple instances of these external services.
- Provide project-specific service configuration and data isolation.
Consider a scenario where we are juggling two projects, located at ~/code/foo
and ~/code/bar
. The foo
project integrates postgres and nginx, while bar
encompasses postgres, pgAdmin, and kafka. It's crucial that the postgres data remains segregated across these projects. Additionally, the bar
project is designed to facilitate multiple instances of postgres. Both projects are equipped with a flake app, streamlining the launch of their respective service stacks. Consequently, anyone using a Linux or macOS system can effortlessly clone either project and execute nix run .#services
to activate the full suite of services without the need for manual configuration.
See https://community.flake.parts/services-flake/start
List of supported services is available at https://community.flake.parts/services-flake/services
services-flake | devenv services | |
---|---|---|
macOS support | ✔️ | ✔️ |
Pure Flakes | ✔️ | ✖️1 |
Services as flake apps | ✔️ | ✖️2 |
Multiple instances of a service | ✔️ | ✖️3 |
Share services | ✔️ | ✖️4 |
No coupling | ✔️ | ✖️5 |
Want to compare with other tools? Let us know.
See https://community.flake.parts/services-flake/guide/datadir
To discuss the project, please join our Zulip.
See https://community.flake.parts/services-flake/contributing
Thanks to the devenv project on which much of our services implementation is based on.
Footnotes
-
Devenv's flakes integration requires you use run the nix shell in impure mode by passing
--impure
. ↩ -
services-flake
produces a flake app that you can run using the Nix command (nix run
) outside of the devShell, whereas with devenv you must use devenv's CLI,devenv up
, inside of devShell. See here. ↩ -
services-flake
allows you to configure multiple instances of the same service, whereas devenv does not. ↩ -
services-flake
is built on top of flake-parts, thus you may share your service and process modules for re-use across flakes (see example), whilst making them general enough for customization based on the module system. With devenv, as far as we can ascertain, you can only share whole devenv configuration as modules. See here. ↩ -
service-flake
exposesprocess-compose-flake
modules for each service, which can be reused as long as your project is usingflake-parts
. With devenv, decoupling is not possible (nor prioritized in future) unless you buy into the whole devenv ecosystem. ↩