Skip to content

Commit

Permalink
Added support for mprocs process manager
Browse files Browse the repository at this point in the history
  • Loading branch information
dacevedo12 committed Feb 17, 2025
1 parent 2420f22 commit 83fffec
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions src/modules/process-managers/mprocs.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{ pkgs, config, lib, ... }:
let
cfg = config.process.managers.mprocs;
settingsFormat = pkgs.formats.yaml { };
makeImpurePackage = impurePath:
pkgs.runCommandLocal
"${lib.strings.sanitizeDerivationName impurePath}-impure"
{
__impureHostDeps = [ impurePath ];
} "mkdir -p $out/bin && ln -s ${impurePath} $out/bin";
in
{
options.process.managers.mprocs = {
enable = lib.mkEnableOption "mprocs as the process manager" // {
internal = true;
};

package = lib.mkOption {
type = lib.types.package;
default = pkgs.mprocs;
defaultText = lib.literalExpression "pkgs.mprocs";
description = "The mprocs package to use.";
};

configFile = lib.mkOption {
type = lib.types.path;
internal = true;
};

settings = lib.mkOption {
type = settingsFormat.type;
description = ''
Top-level mprocs.yaml options
https://github.com/pvolok/mprocs?tab=readme-ov-file#config
'';
default = { };
};
};

config = lib.mkIf cfg.enable {
process.manager.args = { "config" = cfg.configFile; };

process.manager.command = lib.mkDefault ''
${cfg.package}/bin/mprocs \
${lib.cli.toGNUCommandLineShell { } config.process.manager.args}
'';

packages = [ cfg.package ] ++ lib.optionals pkgs.stdenv.isDarwin
[ (makeImpurePackage "/usr/bin/pbcopy") ];

process.managers.mprocs = {
configFile =
lib.mkDefault (settingsFormat.generate "mprocs.yaml" cfg.settings);
settings = {
procs = lib.mapAttrs
(name: value:
let scriptPath = pkgs.writeShellScript name value.exec;
in { cmd = [ "${scriptPath}" ]; })
config.processes;
};
};
};
}

0 comments on commit 83fffec

Please sign in to comment.