{
  inputs = {
    flake-parts.url = "github:hercules-ci/flake-parts";
    nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
    process-compose.url = "github:Platonic-Systems/process-compose-flake";
    services.url = "github:juspay/services-flake";
    systems.url = "github:nix-systems/default";
  };

  outputs =
    inputs:
    inputs.flake-parts.lib.mkFlake { inherit inputs; } {
      systems = import inputs.systems;

      imports = [
        inputs.process-compose.flakeModule
      ];

      perSystem =
        {
          config,
          lib,
          pkgs,
          ...
        }:

        let
          php = pkgs.php83;
          phpPackages = pkgs.php83Packages;

          databasePort = 3306;
          webPort = 8000;

        in
        with lib;
        {

          process-compose."default" = {
            imports = [
              inputs.services.processComposeModules.default
            ];

            services = {
              mysql."mysql1" = {
                enable = true;

                initialDatabases = [
                  { name = "drupal_nix_flake_example"; }
                ];

                settings.mysqld.port = toString databasePort;
              };
            };

            settings.processes = {
              php = {
                command = pkgs.writeShellApplication {
                  name = "php-local-server";

                  text = "${getExe php} -S 127.0.0.1:${toString webPort} -t web";
                };

                depends_on."mysql1".condition = "process_healthy";
              };
            };
          };

          devShells.default = pkgs.mkShell {
            inputsFrom = [
              config.process-compose."default".services.outputs.devShell
            ];

            nativeBuildInputs = [
              php
              phpPackages.composer
            ];
          };

          formatter = pkgs.nixfmt-rfc-style;
        };
    };
}