summaryrefslogtreecommitdiff
path: root/default.nix
blob: 8a0e155ec7197c22ccebbe70d56d6a437a933b19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
let
  lock = builtins.fromJSON (builtins.readFile ./flake.lock);
  nixpkgs' = fetchTarball {
    url = lock.nodes.nixpkgs.locked.url or "https://github.com/NixOS/nixpkgs/archive/${lock.nodes.nixpkgs.locked.rev}.tar.gz";
    sha256 = lock.nodes.nixpkgs.locked.narHash;
  };
in
  {
    nixpkgs ?
      import nixpkgs' {
        config = {};
        overlays = [];
        inherit system;
      },
    system ? builtins.currentSystem,
  }: let
    pkgs = nixpkgs;
    inherit (nixpkgs) lib;

    toProcfile = procGroup:
      lib.concatLines (
        lib.mapAttrsToList (name: cmd: "${name}: ${cmd}") procGroup
      );

    mkRunCommand = procRunner: procfile: let
      inherit (builtins.parseDrvName procRunner.name) name;
      default = "${lib.getExe procRunner} ${procfile}";
    in
      # special cases for officially supported procfile runners
      {
        overmind = ''overmind start -f ${procfile} --root "$PWD" "$@"'';
        honcho = ''honcho start -f ${procfile} --app-root "$PWD" "$@"'';
      }
      .${name}
      or default;
  in {
    mkProcfileRunner = {
      name,
      procGroup,
      procRunner ? pkgs.overmind,
    }:
      pkgs.writeShellApplication {
        inherit name;
        runtimeInputs = [procRunner];
        text = ''
          set -x
          ${mkRunCommand procRunner (
            pkgs.writeText "Procfile" (toProcfile procGroup)
          )}
        '';
      };
  }