Using Process Compose with Sculpin, Browsersync and Decap CMS
I had three different commands to start my website project:
- One to start Sculpin to generate and serve the pages.
- One to start Browsersync and have pages automatically reload when changes were made.
- One to start the Decap CMS server so I can edit my content.
Rather than running separate commands, I've added Process Compose - a tool used by Drupal Flake, Devbox and other projects to manage processes. I also used it in my original Drupal Nix Flake example, and have shown it my slides for my Nix for PHP Developers presentation.
Here is the file I created:
{ inputs, lib, ... }:
{
imports = [ inputs.process-compose.flakeModule ];
perSystem =
{ pkgs, ... }:
{
process-compose.watch-server = {
settings.processes = {
browsersync = {
command = ''
${pkgs.nodePackages.browser-sync}/bin/browser-sync start \
--files output_dev \
--no-notify \
--no-open \
--no-ui \
--server output_dev
'';
depends_on.sculpin.condition = "process_started";
};
cms = {
command = pkgs.writeShellApplication {
name = "cms";
text = "${pkgs.nodejs}/bin/npx decap-server -y";
runtimeInputs = [
pkgs.nodejs
];
};
depends_on.sculpin.condition = "process_started";
};
sculpin.command = ''
${lib.getExe pkgs.sculpin} generate \
--clean \
--no-interaction \
--server \
--watch \
'';
};
};
};
}
Each is defined as its own process, and I can start them all with a simple nix run .#watch-server.
This is how it looks:
