Git Product home page Git Product logo

services-flake's Introduction

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 on which much of our services implementation is based on.

Footnotes

  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.

services-flake's People

Contributors

srid avatar shivaraj-bh avatar conscious-puppet avatar github-actions[bot] avatar attilaersek avatar rsrohitsingh682 avatar adrian-gierakowski avatar johnalotoski avatar johnhampton avatar hraban avatar javyre avatar roman-bodavskiy avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.