NixOS-like services for Nix flakes
Go to file
2024-06-03 22:08:35 +05:30
.github/workflows ci(update-changelog): Use $GITHUB_OUTPUT as ::set-output is deprecated 2024-06-03 13:39:02 +05:30
.vscode chore(vscode): Initial exts/settings 2024-05-21 15:02:29 +05:30
dev chore(dev): Use with pkgs; in devShell 2024-05-21 15:02:29 +05:30
doc chore: run grafana test only on Linux; document that it is broken on Darwin 2024-06-03 22:08:35 +05:30
example chore(example): Update simple/flake.lock 2024-06-02 00:33:20 +00:00
nix feat: Add Weaviate service (#195) 2024-05-28 12:30:40 +05:30
test chore: run grafana test only on Linux; document that it is broken on Darwin 2024-06-03 22:08:35 +05:30
.envrc chore(envrc): nix_direnv_watch_file is deprecated, use watch_file 2024-04-24 14:36:27 +05:30
.gitignore feat: add tempo service (#192) 2024-05-19 17:06:45 +05:30
CHANGELOG.md chore: update changelog 2024-05-28 11:38:17 +00:00
flake.nix chore(nix): Add flake 'description' 2024-04-22 14:21:16 +10:00
justfile feat(dev): add just changelog (#162) 2024-04-01 03:40:37 +05:30
LICENSE Initial commit 2023-06-19 17:44:27 -04:00
README.md chore(readme): Update appraisal re: devenv 2024-05-28 14:28:00 -04:00

project chat

services-flake

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.

Demo

Motivation

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.

Getting Started

See https://community.flake.parts/services-flake/start

Services available

List of supported services is available at https://community.flake.parts/services-flake/services

Comparison with other tools

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.

Service data directory

See https://community.flake.parts/services-flake/guide/datadir

Discussions

To discuss the project, please join our Zulip.

Contributing & Development

See https://community.flake.parts/services-flake/contributing

Credits

Thanks to the devenv project, which originally inspired this project to provide the same for Nix flake users.


  1. Devenv's flakes integration requires you use run the nix shell in impure mode by passing --impure. ↩︎

  2. 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. ↩︎

  3. services-flake allows you to configure multiple instances of the same service, whereas devenv does not. ↩︎

  4. 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. ↩︎

  5. service-flake exposes process-compose-flake modules for each service, which can be reused as long as your project is using flake-parts. With devenv, decoupling is not possible (nor prioritized in future) unless you buy into the whole devenv ecosystem. ↩︎