36 lines
881 B
Nix
36 lines
881 B
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
|
||
|
with lib;
|
||
|
|
||
|
let
|
||
|
cfg = config.trivial-services;
|
||
|
|
||
|
serviceModule.options = {
|
||
|
script = mkOption {
|
||
|
type = types.lines;
|
||
|
description = "Shell commands executed as the service's main process.";
|
||
|
};
|
||
|
|
||
|
environment = mkOption {
|
||
|
default = {};
|
||
|
type = types.attrs; # FIXME
|
||
|
example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
|
||
|
description = "Environment variables passed to the service's processes.";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
launcher = name: value: pkgs.writeScript name ''
|
||
|
#!${pkgs.stdenv.shell} -eu
|
||
|
|
||
|
${pkgs.writeScript "${name}-entry" value.script}
|
||
|
'';
|
||
|
in {
|
||
|
options.trivial-services = mkOption {
|
||
|
default = {};
|
||
|
type = with types; attrsOf (types.submodule serviceModule);
|
||
|
description = "Definition of trivial services";
|
||
|
};
|
||
|
|
||
|
config.system.build.toplevel-trivial = lib.mapAttrs launcher cfg;
|
||
|
}
|